Sobes.tech
Junior — Middle

Quais são as principais diferenças entre o uso de herança e a injeção de componentes na programação orientada a objetos?

sobes.tech IA

Resposta da IA

As principais diferenças entre herança e incorporação de componentes (composição) na programação orientada a objetos:

  • Herança — é um mecanismo pelo qual uma classe (subclasse) obtém propriedades e métodos de outra classe (classe pai). Permite criar hierarquias e reutilizar código. No entanto, a herança cria uma ligação forte entre classes e pode levar a uma estrutura rígida.

  • Incorporação de componentes (composição) — é quando um objeto contém referências a outros objetos e usa sua funcionalidade. Em vez de herdar comportamentos, o objeto delega tarefas aos componentes. É uma abordagem mais flexível, permitindo alterar o comportamento em tempo de execução e reduzir o acoplamento.

Exemplo:

// Herança (em Go realizada por embedding)
type Animal struct {
    Name string
}
func (a Animal) Speak() string {
    return "..."
}

type Dog struct {
    Animal // embedding
}
func (d Dog) Speak() string {
    return "Woof!"
}

// Composição
ntype Speaker interface {
    Speak() string
}

type Dog struct {
    speaker Speaker
}
func (d Dog) Speak() string {
    return d.speaker.Speak()
}

Resumindo, a herança é mais adequada para expressar "é um" (is-a), enquanto a composição é para relações de "tem" (has-a), proporcionando maior flexibilidade e modularidade.