Que savez-vous de la composition de classes en programmation?
sobes.tech IA
Réponse de l'IA
La composition est une relation de "contient" ou "partie de", dans laquelle une classe (composite) contient une référence à une autre classe (composant) ou à ses instances. Le cycle de vie du composant est généralement étroitement lié à celui du composite. C'est une relation forte où le composant ne peut pas exister sans le composite.
Avantages de la composition :
- Flexibilité : Il est plus facile de changer le comportement en modifiant les composants.
- Réduction du couplage : Les classes dépendent moins les unes des autres par rapport à l'héritage.
- Réutilisation : Les mêmes composants peuvent être utilisés dans différents composites.
Exemple : La classe Automobile peut contenir une référence à la classe Moteur. Si l'Automobile est détruit, le Moteur (dans ce contexte) cesse d'exister.
class Moteur {
// propriétés et méthodes du moteur
}
class Automobile {
private Moteur moteur; // composition
public Automobile() {
this.moteur = new Moteur(); // création du composant à l'intérieur du composite
}
// autres propriétés et méthodes de la voiture
}
Différence avec l'agrégation : En agrégation, les composants peuvent exister indépendamment du composite (relation faible). Exemple : La classe Université contient des références à des instances de la classe Étudiant. Les étudiants peuvent exister en dehors de l'université.
Dans le développement Android, la composition est couramment utilisée, par exemple lors de la création de vues (ViewGroup contient View), lors du travail avec des dépendances via Dagger/Hilt. C'est une approche préférée par rapport à l'héritage multiple (qui n'existe pas en Java/Kotlin pour les classes) et souvent plus flexible que l'héritage simple.
class UserRepository(private val apiService: ApiService) {
// UserRepository "utilise" ApiService (composition/agrégation)
fun fetchUser(userId: String) {
// apiService.getUser(userId)
}
}