Core Principles of Composition
Glissez pour afficher le menu
La composition consiste à construire des objets complexes en combinant des composants plus simples et indépendants. Plutôt que de s'appuyer sur l'héritage, qui crée des hiérarchies rigides, la composition permet aux classes de collaborer via des objets contenus. Cette approche rend les systèmes plus flexibles, modulaires et faciles à maintenir, car les composants peuvent être remplacés ou étendus sans perturber l'ensemble de la structure.
123456789101112131415161718192021222324252627282930313233class Payment: def pay(self, amount): return f"Paid {amount}" class Inventory: def reserve(self, item): return f"{item} reserved" class Shipping: def ship(self, item): return f"{item} shipped" class Order: def __init__(self, item, price, payment, inventory, shipping): self.item = item self.price = price self.payment = payment self.inventory = inventory self.shipping = shipping def process(self): return " | ".join([ self.inventory.reserve(self.item), self.payment.pay(self.price), self.shipping.ship(self.item) ]) order = Order("Laptop", 1200, Payment(), Inventory(), Shipping()) print(order.process())
Order n'implémente pas lui-même la logique de paiement, de gestion des stocks ou d'expédition.
Au lieu de cela, il possède des objets séparés (Payment, Inventory, Shipping) et les utilise pour accomplir son travail.
Chaque composant a une responsabilité unique, et Order ne fait que les coordonner.
Si vous souhaitez modifier la façon dont le paiement ou l'expédition fonctionnent, vous pouvez remplacer le composant sans modifier la classe Order.
Quelques écueils à éviter lors de l'utilisation de la composition : créer des objets dieux qui accumulent trop de composants et deviennent difficiles à gérer, divulguer les API des composants à travers la classe externe au lieu de maintenir une interface propre, et introduire un couplage caché lorsque les composants dépendent trop des détails internes des autres.
Un objet dieu essaie d’en faire trop. Il contient de nombreux composants et gère de nombreuses responsabilités, ce qui rend la classe difficile à comprendre, à tester et à maintenir.
Cela se produit lorsque la classe externe expose les méthodes ou attributs internes de ses composants. Au lieu de fournir sa propre interface claire, elle oblige les utilisateurs à interagir directement avec les objets internes.
Les composants deviennent fortement liés par des détails internes. Modifier une partie casse de façon inattendue une autre, car ils dépendent de la structure interne de chacun au lieu de contrats clairs.
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion