0Pricing
C++ Academy · Aula

Herança versus composição: compromissos

Compare herança e composição e escolha a ferramenta adequada para o design

Herança versus composição: compromissos é uma aula grátis de C++ 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 C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.

Duas Formas de Reutilizar Código

Você pode reutilizar código herdando de outra classe ou compondo-o como um membro. Ambas as abordagens têm seu lugar.

Herança: "É-um"

Utilize herança quando a classe derivada for realmente um tipo especial da classe base.

class Vehicle {};
class Car : public Vehicle {};       // a Car IS a Vehicle
class SportsCar : public Car {};

Composição: "Tem-um"

Utilize composição quando a relação for "tem-um" ou "usa-um".

class Engine {};
class Car {
    Engine engine_;                  // a Car HAS an Engine
};

Compromisso de Acoplamento

A herança cria um acoplamento forte — as classes derivadas dependem dos detalhes internos da classe base. A composição mantém os módulos independentes e mais fáceis de alterar.

Flexibilidade

A composição permite alterar o comportamento durante a execução — basta trocar o objeto composto. A herança vincula o comportamento em tempo de compilação.

class Logger {
    std::unique_ptr<LogSink> sink_;   // can swap implementations
public:
    void setSink(std::unique_ptr<LogSink> s) { sink_ = std::move(s); }
};

Testes

Objetos compostos podem ser substituídos por objetos simulados durante os testes. Classes base herdadas são mais difíceis de simular sem funções virtuais ou modelos.

O Problema da Classe Base Frágil

Alterações em uma classe base podem quebrar várias classes derivadas. A composição isola a alteração na classe que faz a composição.

Escolha a Herança Quando

A herança é adequada quando:

  • Existe uma relação clara de "é-um"
  • É necessário polimorfismo por meio de uma interface base
  • A classe base foi explicitamente projetada para herança

Escolha a Composição Quando

A composição é adequada quando:

  • Você quiser flexibilidade para trocar implementações
  • A relação for "tem-um" ou "usa-um"
  • Você quiser baixo acoplamento e testes mais fáceis

O Padrão de Estratégia

Combine composição com polimorfismo: armazene um ponteiro para a classe base que aponte para um objeto de estratégia composto pela classe hospedeira.

class Sorter {
    std::unique_ptr<SortStrategy> strategy_;
public:
    void sort(std::vector<int>& v) { strategy_->execute(v); }
};

Misturas e Classes de Políticas

Para personalização em tempo de compilação, utilize classes de políticas parametrizadas — composição no nível do tipo. É uma abordagem poderosa, sem sobrecarga em tempo de execução.

Interface + Composição

Um padrão moderno comum: defina uma interface, ou classe base abstrata, e componha classes concretas que a implementem. Utilize herança para a interface e composição para a implementação.

Verificação Rápida

Qual abordagem geralmente oferece mais flexibilidade e menor acoplamento?

Recapitulação

A herança modela "é-um"; a composição modela "tem-um". A composição é mais flexível e menos acoplada — prefira-a para reutilização de código. Utilize herança para polimorfismo por meio de uma interface, geralmente combinada com implementações compostas.

Perguntas Frequentes

A aula “Herança versus composição: compromissos” é grátis?

Sim — o texto completo de “Herança versus composição: compromissos” é 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 C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.

O que vou aprender em “Herança versus composição: compromissos”?

Compare herança e composição e escolha a ferramenta adequada para o design Você pratica C++ 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 C++ Academy?

Nenhuma experiência prévia é necessária. C++ 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 “Herança versus composição: compromissos”?

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 C++ Academy?

Sim. Cada aula de C++ 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

  1. Herança simples e múltipla
  2. Funções virtuais e a vtable
  3. Classes abstratas e métodos virtuais puros
  4. Herança versus composição: compromissos
← Voltar para C++ Academy