Falhas no Suporte OOP do PHP
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.
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.
fernando, pelo amor de Deus... publica seu artigo sobre php com uml.. intertessantíssimo cara!!!!
04/10/2004 6:29pm
(~20 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.
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
(~21 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.
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
(~21 anos atrás)
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
Atributos privados só estão disponíveis na versão 5.0, que está em versão Alpha
30/01/2003 1:26pm
(~22 anos atrás)
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í!
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
(~22 anos atrás)
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)
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
(~22 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.
Parece com java, com perl com php, c e com nada ao mesmo tempo.
Vale a curiosidade.
12/08/2002 7:30am
(~22 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
.net ta mais proximo de web services da ibm, que ja vi coisas funcionando ao inves do .net
12/08/2002 7:28am
(~22 anos atrás)
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
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
(~22 anos atrás)
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