Posts Tagged ‘oo’
É 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…