6.2. Classes: herança, contenção e motivos para criar
Prefira "tem um" (contenção); herde só quando "é um" for verdade e respeite Liskov.
Resumo
- Contenção ("tem um") é a primeira escolha. Classe com mais de 7±2 dados membros: talvez quebrar.
- Herança ("é um"): só com Liskov (subclasse usável onde a base é). Projete para herança ou proíba-a.
- Hierarquias rasas; prefira polimorfismo a testar tipos com
case; dados sempre privados. - Motivos para classe: modelar objetos, reduzir/isolar complexidade, esconder detalhes, limitar mudanças.
- Evite: classe-deus, classe só de dados, classe com nome de verbo. Construtor inicializa todos os membros.
Perguntas-chave
responda de cabeça, depois abraO que diz o princípio de substituição de Liskov?
Uma subclasse deve poder ser usada em qualquer lugar que espera a classe base sem que o código perceba diferença de significado.
Quando usar herança?
Quando há uma relação "é um" verdadeira e você quer compartilhar interface e/ou implementação de forma controlada.
Cite motivos para criar uma classe.
Modelar objetos do mundo real ou abstratos, reduzir e isolar complexidade, esconder detalhes, limitar o efeito de mudanças, esconder dados globais, agrupar operações.
Exercícios de fixação
0/5 respondidas1.
Quadrado herda de Retangulo, mas mudar só a largura de um quadrado quebra o código que espera um retângulo. Qual princípio foi violado?2.
Um
Carro precisa de um motor. Qual relação o capítulo recomenda?3.
Um método faz
switch (forma.tipo) para desenhar círculo, quadrado e triângulo. O que o capítulo sugere?4.
Qual destas classes o capítulo aponta como suspeita?
5.
Uma classe base não foi pensada para ser estendida e não documenta isso. O que o livro recomenda?