terça-feira, 24 de março de 2015

Herança múltipla e composição

Dependendo da classe que tentamos criar, pode ser que desejemos herdar informações de duas classes diferentes. Mas isso pode gerar um problema, conhecido como Diamond Problem, como no exemplo abaixo (animais são o exemplo mais fácil).

Sapo é um animal terrestre e aquático, que herdam de animal. Então há conflitos em relação à funções de Animal herdadas por sapo, uma vez que há duas descrições (mesmo que iguais) dos métodos.

Cada linguagem trata de forma diferente o problema. Em Java, não há herança múltipla, então o problema não ocorre. No entanto, é possível fazer algo parecido, utilizando composição.

Em Java, é possível definir interfaces, que podem se resumir em "classes somente com métodos não especificados (define-se nome, parâmetros e tipo retornado)". Delega-se a responsabilidade de descrever o método para as classes que implementarem a interface.

Basicamente, a interface diz que métodos devem ser implementados na interface e tem grandes vantagens. Funciona também de modo semelhante à classe abstrata, pois pode ser criado um vetor de elementos que implementam a interface (não faz sentido falar "herdam"), mas não pode ser instanciada.

Uma das desvantagens de usar herança em relação a composição é que herança aumenta o acoplamento das classes, ou seja, as subclasses são muito dependentes das classes superiores, e uma alteração nestas gera grande impacto naquela.

Para maiores informações sobre em qual situação se aplica cada, sugiro esta leitura.

Até mais!

Nenhum comentário:

Postar um comentário