+4

Falhas no Suporte OOP do PHP

criado por Daniel Melo em 24/07/2002 10:56pm
Ao ler a documentação do PHP sobre o suporte a programação orientada a objetos, os programadores provenientes de outras linguagens como Java, C++ ou Object Pascal (Delphi e FPC), sentirão falta de conceitos básicos do paradigma de orientação à objetos. O PHP não suporta encapsulamento, nem polimorfismo.

Encapsulamento define que atributos de objetos podem ser "escondidos", permitindo que exista uma melhor controle no acesso a estes atributos. Essa técnica é também conhecida como "information hidding". Tecnicamente falando, o PHP não suporta atributos ou métodos (funções) privados.

Resumidamente, o conceito de encapsulamento diz que não é necessário conhecer os atributos dos objetos, apenas seus métodos.

Polimorfismo diz respeito a como objetos de um mesmo tipo pode ter comportamento diferentes, de acordo com a situação.

Mesmo sem estes dois conceitos implementados, os programadores podem "se virar" sem eles. Seja simulando, ou apenas ignorando-os. Por exemplo, é comum entre os programadores PHP nomear atributos que eles desejam ser privados desta forma: $_atributo. Através dos uma convenção se formou que o caractere "underline" descreve um atributo privado, que não deveria ser acessado por codigo fora da definição da classe. Isto é apenas uma convenção, é claro... Nada garante que este atributo não possa ser acessado, pois o PHP não implementa encapsulamento.

"Qual o problema, se conseguimos nos virar sem isso? " - Essa pergunta pode ser levantada. Os verdadeiros problemas aparecem em uma leitura mais atenta na documentação, ou pior, no meio do desenvolvimento de um projeto.

Comentários:

Mostrando 1 - 10 de 25 comentários
Click disse:
Não entendo porque o PHP Brasil ainda não tirou seu artigo do ar.
Uma coisa é manter arquivado artigos úteis, outra coisa é manter artigos que se tornaram inválidos. Com o PHP 5 muita coisa que você disse aqui já era!

[]s
20/04/2006 6:33pm (~10 anos atrás)

fernando, pelo amor de Deus... publica seu artigo sobre php com uml.. intertessantíssimo cara!!!!
04/10/2004 6:29pm (~12 anos atrás)

Tenho acompanhado este debate e realmente utilizar OO é algo que traz mudança de cultura, isto é, os Modelos tem de ser desenvolvidos pensando OO.
Agora o PHP tem um poder maravilhoso e acredito que em breve estará dando suporte completo a esta nova metodologia.
01/03/2004 2:17pm (~12 anos atrás)

Desenvolvendo em PHP Orientado a Objetos pude aplicar parte do MVC(Modelo Visão Controlador) Framework Model II.

Tive bastante sucesso na implementação, além disso, instalar, alterar e remover módulos no sistema ficou mais rápido pois sei extamente onde mexer no código.

Aconselho para quem desenvolve muitos projetos simultãneos a utiliza-lo uma vez que o reaproveitamento de código neste caso é muito útil.
22/07/2003 2:37pm (~13 anos atrás)

Daniel Melo disse:
Nao existe atributos privados na versão atual do PHP 4.3.0. Todos os atributos são publicos

Atributos privados só estão disponíveis na versão 5.0, que está em versão Alpha
30/01/2003 1:26pm (~14 anos atrás)

Caio Filipini disse:
Daniel, parabéns pelo artigo, é bastante interessante.

Pessoal, vale lembrar que o nosso amigo Rasmus Lerdorf, o criador da PHP, afirmou que criou a linguagem por acaso, e jamais pensou que ela se tornaria o que é hoje. O suporte a OO não era (e naõ é) nativo da linguagem, mas está sendo incorporado aos poucos.

É isso aí!
15/09/2002 11:39am (~14 anos atrás)

Daniel Melo disse:
1 - O object Pascal provem as funcionalidades de orientação objeto

2 - O PHP Group nao recomenda uso intensivo da OO, justamente porque ela nao foi corretamente implementada (ainda) no PHP. Mesmo assim, como seria de se esperar , o PHP Group sabe da importancia de um bom suporte a OO , que no Zend Engine 2 , as falhas foram corrigidas

3 - É claro que da pra programar sem o paragdima OO. Ninguem disse que nao podia. Mas existe um consenso entre os desenvolvedores que o paradigma OO e mais eficiente que o paradigma orientado a funções ou eventos. Nao sou que estou afirmando isto, basta ler as publicacoes de desenvolvimento de software (ou desenvolver OO e constatar voce mesmo)
15/08/2002 7:56pm (~14 anos atrás)

Nunca mechi com tal linguagem, mas sei que é totalmente orientada a objetos.

Parece com java, com perl com php, c e com nada ao mesmo tempo.

Vale a curiosidade.
12/08/2002 7:30am (~14 anos atrás)

Dot net se acharem melhor é outra idéia muito diferente de php...

.net ta mais proximo de web services da ibm, que ja vi coisas funcionando ao inves do .net
12/08/2002 7:28am (~14 anos atrás)

Daniel Melo disse:
Fernando,

Voce esta descrevendo um projeto em 3 camadas (interface, negocio e persitencia) que muitos programadores ja usam, mesmo nao sendo projetos OO . Veja um artigo sobre isto
no site www.zend.com.

Discordo com alguma diretivas de seu projeto :

"Nao passar objetos entre classes, usar arrays estruturados".

Acho que vai contra o paradigma OO, que preza pela comunicação entre objetos.

"Nao serialize objetos" - Como voce passa um objeto de uma pagina para outra? OK, concordo que o PHP falha na serializacao...

Quando voce terminar seu projeto publique na Web, vai ser muito util...

Saudações,

Daniel Melo
08/08/2002 10:17am (~14 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)