O que sabes sobre composição de classes em programação?
sobes.tech IA
Resposta da IA
A composição é uma relação de "contém" ou "parte de", na qual uma classe (composite) contém uma referência a outra classe (componente) ou às suas instâncias. O ciclo de vida do componente geralmente está estreitamente ligado ao ciclo de vida do composite. É uma relação forte onde o componente não pode existir sem o composite.
Vantagens da composição:
- Flexibilidade: É mais fácil alterar o comportamento mudando os componentes.
- Redução do acoplamento: As classes dependem menos umas das outras em comparação com a herança.
- Reutilização: Os mesmos componentes podem ser usados em diferentes composites.
Exemplo: A classe Automóvel pode conter uma referência à classe Motor. Se o Automóvel for destruído, o Motor (neste contexto) deixa de existir.
class Motor {
// propriedades e métodos do motor
}
class Automovel {
private Motor motor; // composição
public Automovel() {
this.motor = new Motor(); // criação do componente dentro do composite
}
// outras propriedades e métodos do automóvel
}
Diferença para agregação: Na agregação, os componentes podem existir independentemente do composite (relação fraca). Exemplo: A classe Universidade contém referências a instâncias da classe Estudante. Os estudantes podem existir fora da universidade.
No desenvolvimento Android, a composição é amplamente utilizada, por exemplo, ao criar visualizações (ViewGroup contém View), ao trabalhar com dependências via Dagger/Hilt. É uma abordagem preferencial em comparação com herança múltipla (que não existe em Java/Kotlin para classes) e muitas vezes mais flexível do que herança simples.
class UserRepository(private val apiService: ApiService) {
// UserRepository "utiliza" ApiService (composição/agrupamento)
fun fetchUser(userId: String) {
// apiService.getUser(userId)
}
}