[DESBRAVANDO SOLID] Herança vs Composição (Capítulo 7.5)

No livro estamos falando sobre Herança e Composição, há uma citação do Paulo Silveira falando que não faz sentido as classe Gato extender a classe Cachorro, e realmente não faz!

Mas umas páginas depois estamos falamos sobre substituir Herança por Composição, a minha dúvida é: No caso da classe Gato e classe Cachorro, faz sentido utilizar Composição? Gato ter atributo Cachorro (ou vice versa) não faz sentido para mim.

Na sua opinião como poderia ser o design dessas classes? Eu acho que poderíamos ter uma terceira classe chamada Animal, na qual Gato e Cachorro extendem, ou uma interface Animal, na qual Gato e Cachorro implementam…

O que acha?

Obrigado pela atenção!

Opa, Arthur!

Essa analogia de Gato extends Cachorro não é muito detalhada. Por isso, não dá pra avaliar com precisão opções de design.

Usando um pouco a imaginação, eu criaria classes para cada comportamento comum e faria composição. Se tivermos as ações de comer, correr e ser tosado poderíamos compor tanto Gato como Cachorro com as classes AcaoDeComer, AcaoDeCorrer e AcaoDeSerTosado. Já coisas como latir ficariam especificamente para o Cachorro.

1 curtida