terça-feira, 14 de dezembro de 2010

Generalização e Especialização (Artigo Forum PHP)

Generalização
É o termo aplicado quando você utiliza herança e ela referencia a superclasse ou seja a classe pai. Imagine um organograma, quando você “navega” para o topo da hierarquia, você está fazendo uma operação de generalização ou seja, quanto mais no topo mais generalizada a classe é. Utilizar essa prática deixa sua aplicação mais fácil para utilização do polimorfismo e da reutilização de código. Por exemplo, se você criasse um sistema que desenhasse figuras geométricas ao invés de criar um método para receber cada figura, poderia criar um único para receber o objeto figura geométrica.
Outro exemplo de utilização de generalização seria na classe Pessoa, que seria a classe onde haveria os métodos e atributos em comum das classes PessoaFisica e PessoaJuridica.
Especialização
Especialização também faz parte do conceito de herança, só que num sentido contrario de “navegação” ao da generalização. As classes especializadas são como classes refinadas em relação a superclasse onde elas implementam soluções diferentes da classe-pai. Temos duas formas de trabalhar a alteração das classes-pai via operações de sobrepor ou sobrescrever características. A sobreposição pode ser entendido da seguinte maneira: você altera alguma coisa na classe-filha onde seu objetivo não é substituir o comportamento existente mais sim estende-lo de alguma forma. Já o de sobrescrever é quando você alterar o comportamento completamente do comportamento preexistente.
O conceito de sobrescrever é um pouco diferente, nele você faz com que determinadas características se comportem de modo não igual as da classe-pai. Seguindo ainda o exemplo das figuras geométricas, se a classe Circulo implementa um método chamado desenhar, este deve ser diferente do método desenhar da classe-pai. Uma forma de fazer a diferenciação dos métodos é através da quantidade de argumentos constantes em sua assinatura. Isso deve ser feito pelo fato de que quando o compilador da linguagem for chamar o método desenhar da classe, ele possa saber qual é o método correto para chamar.

0 comentários:

Postar um comentário