Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Kerneprincipper for Komposition | Komposition
Objektorienteret Programmering i Python

bookKerneprincipper 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.

123456789101112131415161718192021222324252627282930313233
class 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())
copy

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.

God-objekter
expand arrow

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.

Lækage af komponent-API'er
expand arrow

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.

Skjult kobling
expand arrow

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.

question mark

Hvad er en almindelig risiko ved brug af composition, som kan gøre designet sværere at vedligeholde?

Vælg det korrekte svar

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 2

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Sektion 3. Kapitel 2
some-alt