Composição em vez de herança
Prefira projetos do tipo “tem um” quando fizer sentido.
Composição em vez de herança é uma aula grátis de Dart Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Dart Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Dart Academy inclui 4 aulas no total.
Duas formas de reutilizar
Você pode reutilizar um comportamento herdando-o ou mantendo outro objeto. A segunda abordagem é chamada de composição.
É-um versus tem-um
A herança representa é-um: um Circle é um Shape. A composição representa tem-um: um Car tem um Engine.
Uma classe composta
Com a composição, você armazena um auxiliar como um campo e delega o trabalho a ele, em vez de estendê-lo.
class Car {
final Engine engine = Engine();
}Delegando comportamento
A classe externa encaminha as chamadas ao seu objeto interno. Essa delegação reutiliza a lógica sem nenhuma herança.
class Car {
final engine = Engine();
void start() => engine.ignite();
}Problema da classe base frágil
Uma herança profunda é frágil. Uma alteração em uma classe pai pode quebrar silenciosamente subclasses distantes, uma armadilha conhecida como classe base frágil.
Flexibilidade em tempo de execução
A composição permite trocar o objeto interno sempre que você quiser. A herança é fixa desde o início, mas um campo pode mudar.
class Car {
Engine engine;
Car(this.engine);
}Combine com interfaces
Combine a composição com interfaces: dependa de um tipo Engine abstrato para que qualquer mecanismo compatível possa ser conectado corretamente.
abstract class Engine {
void ignite();
}Mais fácil de testar
Como as partes são objetos separados, você pode passar um objeto falso nos testes. A composição torna o uso de objetos simulados simples e natural.
var car = Car(FakeEngine());Evite herdar as coisas erradas
As subclasses herdam todos os membros, até mesmo aqueles que não deveriam expor. A composição compartilha apenas aquilo que você escolhe delegar.
Quando a herança ainda é melhor
A herança é adequada para uma relação clara de é-um, com identidade compartilhada. Prefira a composição quando a relação for realmente de tem-um.
A regra prática
Prefira a composição por padrão e use a herança com moderação. Isso mantém os projetos pouco acoplados e fáceis de alterar mais tarde. 🧩
Verificação rápida
Uma pergunta rápida sobre composição.
Recapitulação
A composição representa tem-um mantendo outros objetos e delegando trabalho a eles. Ela continua flexível e fácil de testar, enquanto a herança se encaixa em relações claras de é-um. 👍
Perguntas Frequentes
A aula “Composição em vez de herança” é grátis?
Sim — o texto completo de “Composição em vez de herança” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Dart Academy, atualize para CoddyKit PRO. O curso de Dart Academy inclui 4 aulas no total.
O que vou aprender em “Composição em vez de herança”?
Prefira projetos do tipo “tem um” quando fizer sentido. Você pratica Dart Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Dart Academy?
Nenhuma experiência prévia é necessária. Dart Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Composição em vez de herança”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Dart Academy?
Sim. Cada aula de Dart Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Classes e métodos abstratos
- Interfaces implícitas e implements
- Polimorfismo por meio de tipos compartilhados
- Composição em vez de herança