explicação simples PHP OOP vs Procedural?

106

Eu gostaria de aprender PHP e quero ter uma ideia sobre OOP e procedural. Eu li alguns outros blogs e tutoriais sobre OOP vs Procedural, mas ainda não consigo entender a abordagem.

OOP vs processual

  1. O que devo aprender?
  2. Qual é a diferença no código? quais são os efeitos?
  3. Como um framework PHP pode ajudar na abordagem OOP? (Eu gostaria de aprender CodeIgniter)
  4. Os procedimentos precisam de uma estrutura?

Eu realmente quero saber a diferença de código de ambos, meu entendimento de OOP é que você cria uma classe como e pode ser acessada. (Não sei se isso é correto).

Obrigado!

Pennf0lio
fonte

Respostas:

279

Contexto: Você pediu uma "explicação simples" que sugere:

  1. Você quer uma visão geral prática, sem jargão
  2. Você quer algo que o ajude a aprender desde o início
  3. Você descobriu que duas pessoas nunca respondem à pergunta da mesma maneira , e isso é confuso. Essa é a razão pela qual você está aqui pedindo uma explicação simples. Sim?

Resposta curta sem jargão:

  1. Muitas explicações introdutórias saltam rapidamente para exemplos do "mundo real OOP". Eles tendem a confundir mais do que ajudar, então fique à vontade para ignorar isso por enquanto.
  2. Você pode pensar no código-fonte simplesmente como "pedaços" de funcionalidade, que por acaso são salvos em arquivos individuais.
  3. Existem diferentes maneiras de organizar esses "blocos"; dependendo de coisas como convenções da linguagem de programação, o histórico e o treinamento do (s) desenvolvedor (es), ou simplesmente preferências pessoais antigas.
  4. OOP e programação procedural são simplesmente duas metodologias principais, geralmente reconhecidas, para como organizar e organizar esses "pedaços" de código.

Resposta longa sem jargões:

Procedural vs OOP é apenas um aspecto de uma questão fundamental da programação de computadores: como tornar seu código fácil de entender e fácil de manter profissionalmente . Na verdade, você pode escrever um código "procedural" que siga alguns dos princípios da OOP, portanto, os dois não são necessariamente opostos.

Sua compreensão vai realmente crescer quando você aprender outras linguagens de programação orientadas a objetos , entre as quais PHP é um "novo garoto no bloco".

Aqui está uma visão geral rápida do que você aprenderá à medida que construir a experiência:

  • Você pode escrever o código-fonte PHP que executa tarefas úteis
  • Você pode organizar tarefas úteis em "pedaços" de código
  • Você pode pensar em "pedaços" de código independentemente dos arquivos individuais onde são salvos
  • Às vezes, esses "pedaços" de código se comportam de maneira diferente com base nos parâmetros que você passa
  • Os pedaços de código que aceitam parâmetros são chamados de "Funções"
  • As funções podem ser "fragmentadas" juntas e existem diferentes maneiras de fazer isso:
    • Por exemplo: você poderia ter apenas um grande arquivo PHP com todas as funções que você já escreveu em toda a sua vida, listadas em ordem alfabética por nome de função
    • Por exemplo: você poderia ter vários arquivos PHP com funções agrupadas por assunto [por exemplo, funções para fazer manipulação de strings básicas, funções para processar matrizes, funções para entrada / saída de arquivos, etc]
  • OOP é uma forma especial de "agrupar" funções em uma "classe"
  • Uma classe é apenas outro nível de "agrupamento" de código para que você possa tratá-la como um todo unificado
  • Uma classe pode ser considerada um "bloco" de métodos e propriedades

    • os métodos são simplesmente funções que estão logicamente relacionadas entre si de alguma forma significativa. As palavras "método" e "função" são basicamente dois termos diferentes para a mesma coisa.
    • propriedades são simplesmente valores de dados relacionados à classe. Esses são valores intencionalmente não isolados para qualquer função individual, porque mais de uma das funções na classe deve ter acesso a eles.
      • Por exemplo : se sua classe tem um monte de métodos para fazer astronomia, as propriedades da classe podem ser os valores para certos números famosos que todos os métodos de astronomia precisam saber (como Pi, a velocidade da luz, a distância entre planetas específicos, etc.).
    • É aqui que a maioria das explicações OOP ficam confusas porque se ramificam em " exemplos do mundo real " que podem rapidamente sair do tópico . Freqüentemente, "mundo real" é um eufemismo para as perspectivas ontológicas de um determinado indivíduo. Isso tende a ser útil apenas quando você já entende o conceito bem o suficiente para ensiná-lo a outra pessoa.
    • Para entender o OOP sem confusão, você pode pular os exemplos do "mundo real" por enquanto e se concentrar apenas no código. Uma classe é simplesmente uma maneira de armazenar funções (também conhecidos como métodos) e propriedades (também conhecidos como dados) como código PHP em um ou mais "pedaços" relacionados, onde cada "pedaço" individual lida com um tópico específico ou parte da funcionalidade. Isso é tudo que você precisa saber para começar.
  • Uma classe é útil porque permite que você organize seu código em um nível muito alto de uma maneira que facilite seu entendimento, uso e manutenção.

  • Quando alguém escreve muitas funções, e as organiza em várias classes, e faz com que funcionem juntas de alguma forma legal, eles empacotam tudo junto e chamam de "Framework" .
  • Um Framework é apenas o próximo nível mais alto de "fragmentação" (incluindo estilo de codificação e convenções) com o qual uma ou mais pessoas concordam porque gostam da maneira como o código é organizado e se adapta a seu estilo de trabalho, preferências, valores e planos para o mundo dominação, etc.

Veja também

dreftymac
fonte
1
@dreftymac: você poderia ter me fornecido feedback sobre o que poderia ser melhorado em minhas adições, em vez de excluí-lo sem jeito nas minhas costas. Realmente. Agradeço a crítica construtiva e convido você a fazer o mesmo.
Flavius
1
@Flavius ​​OK. Gratidão pelo esforço e por reservar um momento para fazer acréscimos. Depois de pensar sobre isso, parece razoável que a adição que você fez merecesse sua própria resposta independente.
dreftymac de
2
Uma adição: uma classe também é útil para agrupar dados de função para que você não tenha que passá-los em parâmetros.
chiborg
1
+1 especialmente para sua definição de "Estrutura". Já ouvi muitas pessoas tentarem explicar o que é um framework, e acho que o seu é o mais fácil de entender.
TecBrat
1
cara ... esta é a melhor explicação que eu li sobre oop vs procedural e eu li MUITO! excelente trabalho realmente eficaz, simples e direto ao ponto. vocês estão certos pessoas sempre usam exemplos do mundo real e não é uma maneira fácil de entender nada, é uma porcaria!
thechrishaddad
25

OOP nada mais é do que um padrão de design. Se você está apenas começando, aprenda o básico concentrando-se na abordagem procedimental. Mais importante ainda, familiarize-se com os princípios básicos como loops, condições e chamada de outros procedimentos.

Ao criar seu código procedural, crie o hábito de adicionar métodos relacionados dentro de um único arquivo de origem. Aprenda a dividir seus procedimentos em unidades lógicas e você já estará começando a se tornar orientado a objetos. Basicamente, um objeto nada mais é do que uma coleção de métodos relacionados uns aos outros simplesmente porque operam no mesmo conjunto de dados. (Não falando de bancos de dados aqui, mas de dados de aplicativos!)

OO é usado principalmente para tornar seu código mais lógico, dividindo tudo em blocos simples. Ao combinar os blocos certos, você obtém um aplicativo completo. OO não é uma bala de prata ou um martelo dourado que resolverá todos os seus problemas. Mas o que ele faz é tornar seu código mais fácil de entender.

Então, novamente, algumas pessoas ainda conseguem fazer uma bagunça completa com objetos, simplesmente transformando-os em enormes superobjetos com centenas de métodos. Esses objetos não diferem muito de uma abordagem procedural regular, simplesmente por causa da enorme quantidade de métodos sendo combinados sem nenhuma lógica real. É um erro fácil de cometer quando as pessoas começam a fazer OOP muito rápido.

Wim ten Brink
fonte
3
Acho que alguns códigos OOP são muito mais confusos ... tente olhar no interior do prestashop, por exemplo.
AndrewC de
Excelente ponto sobre Pretashop. O Magento é uma besta fumegante, mas decidimos permanecer com ele porque alternativas como Pretashop ou WooComm são ainda piores.
PKHunter
6

Você deve aprender ambos. Objetos são apenas uma das muitas abstrações possíveis que existem, e abstração é a essência da programação. Dito isso, comece com as coisas procedurais e, em seguida, adicione objetos mais tarde, porque as partes internas dos objetos PHP são procedurais de qualquer maneira.

Quanto a frameworks; primeiro aprenda os fundamentos da linguagem, escreva programas experimentais descartáveis ​​e tal. Mais tarde você pode se familiarizar com os quadros e considerar a si mesmo se você encontrar alguns deles útil em algum contexto. Eles definitivamente não são obrigatórios.

Joonas Pulakka
fonte
6

Para adicionar as ótimas respostas acima. Você deve ver OOP como uma progressão natural do seu estilo de codificação - quando você começa a escrever um pequeno programa, você pode apenas precisar juntar algumas linhas de código php, então agrupá-las em funções e quanto mais funções você escrever, você pode sentir a necessidade para melhor organizá-los em classes. OOP apenas permite que você estruture melhor seus códigos - permitindo uma melhor manutenção do código.

Rawdreeg
fonte
6

O php e oop procedurais usam o mesmo código php. Então, a única diferença é que com procedural, você se concentra em uma tarefa e é isso. Em oop, você organiza seu código usando padrões ou pedaços que podem ser reutilizados em muitas áreas diferentes do código.

A resposta simples é que você precisa conhecer e compreender php. Você pode aprender em php.net. Depois de entender isso, você pode começar a organizar seu código em mandris.

O código procedural usa funções, variáveis.

Depois de pegar o jeito, você pode começar a organizar as funções e variáveis ​​em classes. Começamos chamando as funções como métodos e variáveis ​​como propriedades.

Boa sorte.

Edward Manda
fonte