Articles

Samenvoeging vs. Compositie in Object Georiënteerd Programmeren

In Object Georiënteerd Programmeren zijn er veel verschillende soorten relaties die kunnen bestaan tussen twee of meer klassen. De meest voorkomende twee typen zijn:

  • Inheritance – een “is een” relatie
  • Association – een “heeft een” relatie

Deze blog gaat een diepe duik doen in de twee typen Association relaties – Aggregation en Composition.

Een association relatie tussen twee klassen is een “heeft een” relatie. Bijvoorbeeld:

  • Een Car heeft een Engine en een Wheel
  • Een Person heeft een Leg en een Arm

  • Een Book heeft Pages

Dit komt meestal voor als er twee klassen zijn, ClassA en ClassB, en ofwel:

  • ClassA bevat ClassB als een attribuut, of
  • Eenheden van ClassB worden opgebouwd binnen ClassA

Wat is het verschil tussen Aggregatie en Compositie?

Er zijn twee subtypen van Associatierelaties – Aggregation en Composition. Wat is het verschil tussen deze twee?

Compositie

Compositie houdt in dat de ingesloten klasse niet onafhankelijk van de container kan bestaan. Als de container wordt vernietigd, wordt het kind ook vernietigd.

Neem bijvoorbeeld een Page en een Book. De Page kan niet bestaan zonder de Book, want het boek is opgebouwd uit Pages. Als de Book wordt vernietigd, wordt de Page ook vernietigd.

In code verwijst dit meestal naar de child-instantie die binnen de containerklasse wordt gecreëerd:

class Book:
def __init__(self):
page1 = Page('This is content for page 1')
page2 = Page('This is content for page 2')
self.pages =
class Page:
def __init__(self, content):
self.content = contentbook = Book() # If I destroy this Book instance,
# the Page instances are also destroyed

Agggregatie

Met een aggregatie kan het kind onafhankelijk van de ouder bestaan.

Dus denkend aan een Car en een Engine, hoeft de Engine niet vernietigd te worden als de Car vernietigd wordt.

class Car:
def __init__(self, engine):
self.engine = engine
class Engine:
def __init__(self):
passengine = Engine()
car = Car(engine) # If I destroy this Car instance,
# the Engine instance still exists

Hoe worden deze in een UML-diagram weergegeven?

In een UML-diagram worden zowel Aggregation als Composition weergegeven met een diamanten pijl tussen de klassen. Het diamanten uiteinde gaat aan de kant van de container.

  • Aggregatie gebruikt een open diamant
  • Compositie gebruikt een gesloten diamant

Hier volgt een voorbeeld:

Hoop dat dit geholpen heeft!

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *