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

**URL:** <https://forum.casadocodigo.com.br/t/desbravando-solid-heranca-vs-composicao-capitulo-7-5/2093>\
**Category:** Livros\
**Created:** [Setembro 30, 2022, 4:49pm UTC](https://forum.casadocodigo.com.br/t/desbravando-solid-heranca-vs-composicao-capitulo-7-5/2093 "2022-09-30T16:49:20Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Arthur98](https://avatars.discourse-cdn.com/v4/letter/a/ecb155/32.png) [@Arthur98](https://forum.casadocodigo.com.br/u/Arthur98)\
**Post date:** [Setembro 30, 2022, 4:49pm UTC](https://forum.casadocodigo.com.br/t/desbravando-solid-heranca-vs-composicao-capitulo-7-5/2093/1 "2022-09-30T16:49:20Z")

</div>

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!

---

<div class="post-metadata">

**Author:** ![alexandre.aquiles](https://yyz1.discourse-cdn.com/flex029/user_avatar/forum.casadocodigo.com.br/alexandre.aquiles/32/14791_2.png) [@alexandre.aquiles](https://forum.casadocodigo.com.br/u/alexandre.aquiles)\
**Post date:** [Setembro 30, 2022, 8:30pm UTC](https://forum.casadocodigo.com.br/t/desbravando-solid-heranca-vs-composicao-capitulo-7-5/2093/2 "2022-09-30T20:30:41Z")

</div>

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`.
