Kerneprincipper for Komposition
Stryg for at vise menuen
Komposition fokuserer på at opbygge komplekse objekter ved at kombinere enklere, uafhængige komponenter. I stedet for at benytte arv, som skaber stive hierarkier, gør komposition det muligt for klasser at samarbejde gennem indlejrede objekter. Denne tilgang gør systemer mere fleksible, modulære og nemmere at vedligeholde, da komponenter kan udskiftes eller udvides uden at ødelægge hele strukturen.
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 implementerer ikke selv logikken for betaling, lager eller forsendelse.
I stedet har den separate objekter (Payment, Inventory, Shipping) og bruger dem til at udføre sit arbejde.
Hver komponent har ét ansvar, og Order koordinerer blot disse.
Hvis du ønsker at ændre, hvordan betaling eller forsendelse fungerer, kan du udskifte komponenten uden at ændre Order-klassen.
Nogle faldgruber ved brug af komposition er at skabe gud-objekter, der samler for mange komponenter og bliver svære at håndtere, lækage af komponent-API'er gennem den ydre klasse i stedet for at bevare et rent interface, samt at introducere skjult kobling, når komponenter bliver for afhængige af hinandens interne detaljer.
Et god-objekt forsøger at gøre for meget. Det indeholder mange komponenter og håndterer mange ansvarsområder, hvilket gør klassen svær at forstå, teste og vedligeholde.
Dette sker, når den ydre klasse eksponerer de interne metoder eller attributter fra dens komponenter. I stedet for at tilbyde sit eget rene interface, tvinger den brugerne til at interagere direkte med interne objekter.
Komponenter bliver tæt forbundne gennem interne detaljer. Ændring af én del ødelægger uventet en anden, fordi de er afhængige af hinandens interne struktur i stedet for klare kontrakter.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat