Principi Fondamentali della Composizione
Scorri per mostrare il menu
La composizione si concentra sulla costruzione di oggetti complessi combinando componenti più semplici e indipendenti. Invece di affidarsi all'ereditarietà, che crea gerarchie rigide, la composizione permette alle classi di collaborare tramite oggetti contenuti. Questo approccio rende i sistemi più flessibili, modulari e facili da mantenere, poiché i componenti possono essere sostituiti o estesi senza compromettere l'intera struttura.
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 non implementa direttamente la logica di pagamento, inventario o spedizione.
Invece, possiede oggetti separati (Payment, Inventory, Shipping) e li utilizza per svolgere il proprio lavoro.
Ogni componente ha una sola responsabilità e Order si limita a coordinarli.
Se si desidera cambiare il funzionamento del pagamento o della spedizione, è possibile sostituire il componente senza modificare la classe Order.
Alcuni rischi da considerare nell'uso della composizione sono la creazione di god object che raccolgono troppi componenti e diventano difficili da gestire, la fuga delle API dei componenti attraverso la classe esterna invece di mantenere un'interfaccia pulita, e l'introduzione di accoppiamento nascosto quando i componenti dipendono eccessivamente dai dettagli interni degli altri.
Un oggetto dio cerca di fare troppo. Contiene molti componenti e gestisce molte responsabilità, rendendo la classe difficile da comprendere, testare e mantenere.
Questo accade quando la classe esterna espone i metodi o gli attributi interni dei suoi componenti. Invece di fornire una propria interfaccia pulita, costringe gli utenti a interagire direttamente con gli oggetti interni.
I componenti diventano strettamente collegati tramite dettagli interni. Modificare una parte causa inaspettatamente la rottura di un'altra perché si basano sulla struttura interna reciproca invece che su contratti chiari.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione