rvf, software e mitos

Herança NÃO é reutilizar código

Posted on: 25 de outubro de 2008

É incrível pensar que herança significa reutilizar código e ainda querer dizer que sabe Orientação a Objetos. Quem diz isso garanto que faz coisas do tipo:

PessoaFisica extends Pessoa

PessoaJuridica extends Pessoa

Muito bonito, reutilizou dados em comum entre PF e PJ, mas e o principio de OO, para onde foi? Para o lixo! Você simplesmente disse que, uma pessoa física é filho do mesmo pai de uma pessoa jurídica, um ser humano pode ser cosiderado irmão de uma empresa? Epa! Tem algo errado aí. Sim, isso está absolutamente errado se tratando de OO. “Ahh, mas meu professor disse que reutilizar código é bom” – Ok! Mas ele esqueceu de dizer que, deve haver uma coerência no meio disso, onde a reutilização de código se torna conseqüência de um bom modelo orientado a objetos e não uma obrigatoriedade, onde você tem a classe ChuckNorris com todos os comportamentos e atributos possíveis no universo, e faz todas suas subclasses herdarem ela.

Prefira a composição!

Como eu resolveria o problema da PessoaFisica e PessoaJuridica? Simples, usando composição. Vamos supor que você estivesse usando a classe Pessoa apenas para reutilizar dados cadastrais, ótimo, crie a classe DadosCadastrais e faça ela compor todas as classes que utilizem estes dados.

Quando usar herança?

Quando você definitivamente está certo que sua classe é uma especialização de alguma outra classe, que BEM PROVAVELMENTE será provida via polimorfismo. Por exemplo: ControleRemotoUniversal extends ControleRemoto.

A reutilização de código acontece uma vez que você ganha a componentização, onde você transformará sua família de objetos em um componente que se comunica muito bem com os objetos internos e externos. Isso é reutilizar código.

Cuidado com o que você aprende na faculdade…

3 Respostas to "Herança NÃO é reutilizar código"

Olá, achei seu blog la na sua assinatura do GUJ e como sou curioso vim ver😛

Parabens pelo blog, tem material muito bom aqui!

Concordo plenamente com o seu ponto de vista deste tópico, herança não deve ser encarada apenas como um “meio de reutilizar código”, deve haver coerencia, uma classe que extende outra deve ser “um tipo específico de” e não “um papel assumido por”, muito bem escrito.

Só não concordo com o exemplo de Pessoa, PessoaFisica/PessoaJuridica que você usou, pois o conceito de “Pessoa” no universo da informática/banco de dados/objetos não tem personalidade de “Ser Humano”! Uma “Pessoa”, do ponto de vista do governo (que é o nosso caso) pode sim ser Física e Jurídica, e elas tem atributos e ações (métodos) em comum!

O maior cuidado então é conseguir definir o que realmente é compartilhado entre essas especializações de Pessoa, mas você pode dizer que tanto “PessoaFisica” quanto “PessoaJuridica” são “tipos especificos de Pessoa” e não “Papeis assumidos por Pessoa”, logo, a Herança é valida!

[]

Oi Kym, obrigado pela visita!

Eu entendo o teu ponto de vista. Mas lembre-se do que foi relatado no post, onde para a herança ser interessante a nível de OO, ela deve ser uma especialização. Se PJ e PF são especializações de Pessoa, PF e PJ poderiam ser consideradas coisas bem parecidas, quando na verdade são completamente diferentes, o que pode gerar um péssimo design -além de levar pessoas a criarem o nome dos seus membros genericos para ser aplicavel a ambos os tipos-, neste caso, o ideal mesmo é utilizar a composicao do que ambos tem em comum e tratar as duas coisas como coisas diferentes.

Mas isso não é uma regra, é apenas uma boa prática de design.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s


  • Adolfo: Muito bom este post. Acho que tudo isso pode ser resumido em uma única palavra: humildade (isso não significa não defender seu ponto de vista).
  • Adolfo: Olá Robson, Alguns modelos até consegui identificar em alguns projetos que já trabalhei... Com algumas coisas eu concordo e outras não... Q
  • milah: Eu tenho um Amazon L71. Até 2 meses atrás não tive problemas com ele. Já troquei a placa de lan dele, por uma que capta melhor wi-fi. Só que ago
%d blogueiros gostam disto: