Heranças Rasas

Quais são algumas das desvantagens potenciais em se ter árvores de herança rasas, isto é, um grande conjunto de classes A, B, C e assim por diante sendo que todas essas classes estendem uma única classe Z?

Que pergunta mais abstrata.

Herança é uma relação É UM.

Se vc tem um grande numero de classes que herdam uma unica classe Z, vc tem muitas classes que SÃO UMA Z.

Me pergunto o que justifica tanta classe. Quais as diferenças entre A e B? E quais são os comportamentos herdados de Z?

Eu imagino um sistema onde vc tem, por exemplo, um componente PAI, e todos os componentes precisam estender isso para q o sistema funcione. Se a classe Z faz pouca coisa, para que exigir herança? se a classe Z faz muita coisa, pode ser bem dificil o desenvolvimento para novas classes pois vc pode ter conflitos.

A questão de Herança x Composição trata justamente disso. Se vc não desenhou Z para ser estendida, vc pode chegar em problemas como: ter q colocar na documentação para não usar determinados metodos.

Um exemplo classico é Stack herdar de Vector:

https://docs.oracle.com/javase/7/docs/api/java/util/Stack.html

Stack vc tem duas operações: push e pop. pegar um elemento do meio da Stack não é adequado ( vc quebra encapsulamento ). Mas como a Stack herda de Vector então vc pode fazer isso. O correto seria Stack TER UM Vector interno.

Se Z faz poucas coisas, é possivel vc transformar em uma Interface ( IZ ) e a classe Z vai fazer essas poucas coisas sem interferir no comportamento de A, B ou C.

Se Z faz muitas coisas as classes A. B ou C terão pouco espaço para trazer um comportamento diferente, podendo interferir em Z. Se este é o caso, então talvez vc não precise de tantas classes e sim quebrar o problema em classes menores que farão parte de Z.

Por outro lado, fragmentar seu problema pode não ser a solução. É o caso onde vc pode ter todos os testes unitarios funcionando 100% mas tudo junto pode não funcionar como vc espera, Aquela tentação que refatorar uma classe em 5 onde vc gasta tempo e não agrega valor imediatamente.

Eu não consigo ver muito alem disso. Existem casos como quando vc precisa falar com sistemas legados que vc PRECISA estender e fim de papo.

Aguarde outras pessoas responder também