Core Principles of Composition
Desliza para mostrar el menú
La composición se centra en construir objetos complejos combinando componentes más simples e independientes. En lugar de depender de la herencia, que crea jerarquías rígidas, la composición permite que las clases colaboren a través de objetos contenidos. Este enfoque hace que los sistemas sean más flexibles, modulares y fáciles de mantener, ya que los componentes pueden ser reemplazados o ampliados sin afectar toda la estructura.
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 no implementa la lógica de pago, inventario o envío por sí mismo.
En su lugar, tiene objetos separados (Payment, Inventory, Shipping) y los utiliza para completar su trabajo.
Cada componente tiene una responsabilidad, y Order solo los coordina.
Si se desea cambiar cómo funciona el pago o el envío, se puede reemplazar el componente sin modificar la clase Order.
Algunos inconvenientes a tener en cuenta al usar composición son la creación de objetos dios que agrupan demasiados componentes y se vuelven difíciles de gestionar, filtrar las APIs de los componentes a través de la clase externa en lugar de mantener una interfaz limpia, e introducir acoplamiento oculto cuando los componentes dependen demasiado de los detalles internos de otros.
Un objeto dios intenta hacer demasiado. Contiene muchos componentes y maneja muchas responsabilidades, lo que hace que la clase sea difícil de entender, probar y mantener.
Esto ocurre cuando la clase externa expone los métodos o atributos internos de sus componentes. En lugar de proporcionar su propia interfaz limpia, obliga a los usuarios a interactuar directamente con los objetos internos.
Los componentes se conectan estrechamente a través de detalles internos. Cambiar una parte rompe inesperadamente otra porque dependen de la estructura interna de cada uno en lugar de contratos claros.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla