In Object-oriented programming, een object is gerelateerd aan andere te gebruiken functionaliteit en service die door dat object. Deze relatie tussen twee objecten staat bekend als de associatie in object-georiënteerde algemene software-ontwerp en wordt afgebeeld door een pijl in Unified Modelling Language of UML. Zowel Compositie als Aggregatie zijn de vormen van associatie tussen twee objecten, maar er is een subtiel verschil tussen compositie en aggregatie, dat ook tot uiting komt in hun UML-notatie. We spreken van een associatie tussen twee objecten als Compositie, wanneer een klasse eigenaar is van andere klassen en andere klassen niet zinvol kunnen bestaan, wanneer de eigenaar wordt vernietigd, bijvoorbeeld, de klasse Mens is een compositie van verschillende lichaamsdelen, waaronder Hand, Been, en Hart. Wanneer het menselijke object sterft, houden al zijn lichaamsdelen op zinvol te bestaan, dit is een voorbeeld van Compositie.
Programmeurs verwarren vaak Associatie, Compositie en Aggregatie in Object-georiënteerd ontwerp discussies, deze verwarring maakt ook het verschil tussen Associatie, Compositie en Aggregatie een van de populaire vragen in Java Interviews, alleen na het verschil tussen abstracte klasse en interface.
Een ander voorbeeld van Compositie is Auto en zijn onderdelen b.v. motoren, wielen, enz. Afzonderlijke onderdelen van de auto kunnen niet functioneren als de auto wordt vernietigd. Terwijl in het geval van Aggregatie, een object dat kan bestaan zonder deel uit te maken van het hoofdobject, zoals een Speler die deel uitmaakt van een Team, kan bestaan zonder een team en ook deel kan worden van andere teams.
Een ander voorbeeld van Aggregatie is Student in de School-klasse als de School gesloten is, bestaat de Student nog steeds en kan dan lid worden van een andere School of zo. In de UML-notatie wordt een composition aangeduid met een gevulde ruit, terwijl aggregation wordt aangeduid met een lege ruit, wat hun duidelijke verschil laat zien in termen van sterkte van de relatie.
De composition is sterker dan Aggregation. In het kort wordt een relatie tussen twee objecten een associatie genoemd. Een associatie wordt composition genoemd als het ene object eigenaar is van het andere object, terwijl een associatie aggregation wordt genoemd als het ene object gebruik maakt van een ander object.
In deze OOPS tutorial, zullen we nog een paar voorbeelden zien om het verschil tussen associatie, compositie en aggregatie beter te begrijpen.
Twee, als je nieuw bent in de wereld van object-georiënteerd programmeren en ontwerpen, dan raad ik je aan om een hands-on cursus te volgen zoals UML and Object-Oriented Design Foundations door Karloy Neisztor op Udemy. Het is een geweldige cursus om het volledige proces van objectgeoriënteerde analyse en ontwerp te begrijpen voor het maken van kwaliteitssoftware.
Een voorbeeld van associatie, samenstelling en aggregatie in Java
Hier volgt een voorbeeld van samenstelling en aggregatie, in termen van Java Code. Door naar deze code te kijken, kun je de verschillen tussen deze twee meten. Overigens, Compositie heeft ook in object-georiënteerd ontwerp de voorkeur boven overerving, zelfs Joshua Bloch heeft het belang ervan aangegeven in het klassieke boek, Effective Java.
1. Compositie:
Sinds Engine is-part-of Car, is de relatie tussen hen Composition. Hier is hoe ze zijn geïmplementeerd tussen Java klassen.
public class Car {
2. Aggregatie:
Sinds Organization Person als werknemers heeft, is de relatie tussen hen Aggregation. Zo zien ze eruit in termen van Java klassen
public class Organization { private List employees;}
public class Person { private String name; }
UML Schema van Associatie, Compositie en Aggregatie
UML heeft verschillende notaties om aggregatie, compositie en associatie aan te duiden. Associatie wordt aangeduid met een eenvoudige pijl, aggregatie met een lege pijl met diamantkop en compositie met een gevulde pijl met diamantkop.
Wanneer je een UML diagram tekent voor twee verwante klassen A en B, waarbij A is geassocieerd met B, dan wordt dit aangeduid met A -> B. Eenzelfde manier wordt gebruikt om aggregatie en compositie tussen twee klassen weer te geven.
Hieronder staan UML notaties voor een ander soort afhankelijkheid tussen twee klassen.
Zoals ik al zei, alle drie geven relaties aan tussen objecten en verschillen alleen in hun sterkte, je kunt ze ook bekijken zoals hieronder, waarbij composition de sterkste vorm van relatie weergeeft en association de meest algemene vorm is.
![](https://3.bp.blogspot.com/-4KAOtX0S5NU/UvJN_w4TCZI/AAAAAAAABCo/SKPKYaci8s0/s280/association+vs+composition+vs+aggregation.jpg)
Samenstelling vs. Aggregatie
Hier volgt een lijst van verschillen tussen Samenstelling en Aggregatie in puntformaat, voor een snel overzicht. Zoals ik al zei, komt het belangrijkste verschil tussen beide voort uit het punt dat in het geval van Compositie, het ene object EIGENAAR is van een ander object, terwijl in het geval van Aggregatie, het ene object slechts een GEBRUIKER is van een ander object.
1) Als A en B twee klassen zijn die zodanig aan elkaar gerelateerd zijn dat, B ophoudt te bestaan, wanneer A wordt vernietigd, dan staat de associatie tussen twee objecten bekend als Compositie. Een voorbeeld is Auto en Motor. Als A en B aan elkaar zijn gerelateerd, zodanig dat B kan bestaan zonder aan A te zijn gerelateerd, dan staat deze associatie bekend als Aggregatie.
Zie Head First Object-Oriented Analysis and Design voor meer voorbeelden van Compositie en Associatie in OOP.
2) In het geval van Compositie is A eigenaar van B, b.v. Persoon is de eigenaar van zijn Hand, Geest en Hart, terwijl in het geval van Aggregatie, A gebruik maakt van B, b.v. Organisatie maakt gebruik van Mensen als een werknemer.
3) In UML-diagram wordt Association aangeduid door een normale pijlpunt, terwijl Composition wordt weergegeven door een gevulde diamantpijlpunt, en Aggregation wordt weergegeven door een lege diamantpijlpunt, zoals te zien is in onderstaand en bijgevoegd diagram in de derde paragraaf.
Associatie A—->B
Samenstelling A—–<gevuld>B
Samenvoeging A—–<>B
4) Aggregatie is een lichtere vorm van Compositie, waarbij een deelobject zinvol kan bestaan zonder hoofdobjecten.
5) In Java kun je het sleutelwoord Definitief gebruiken om Compositie weer te geven. Omdat in Compositie, het object Eigenaar verwacht dat een deelobject beschikbaar is en functioneert, kun je, door het Definitief te maken, garanderen dat, wanneer Eigenaar wordt gemaakt, dit deelobject zal bestaan. Dit is eigenlijk een Java idioom om een sterke vorm van associatie weer te geven, d.w.z. compositie tussen twee objecten.
6) Een ander interessant woord, dat van pas komt om het verschil tussen Compositie en Aggregatie in software-ontwerp te begrijpen, is “part-of” en “heeft”. Als een object deel is van een ander object, b.v. Motor is deel van Auto, dan is de associatie of relatie tussen hen Compositie. Aan de andere kant, als een object gewoon een ander object heeft, b.v. Auto heeft de bestuurder, dan is het Aggregatie.
Dat is alles over het verschil tussen Associatie, Compositie en Aggregatie in UML, Java en Object georiënteerd ontwerp. Omdat object georiënteerde analyse meer gaat over het definiëren van de relatie tussen objecten, is het belangrijk om te weten wat voor soort relatie er tussen hen bestaat, compositie en aggregatie is een twee manier om de relatie tussen twee objecten weer te geven.
Verder leren
SOLIDE Principes van Objectgeoriënteerd Ontwerpen
Absolute Inleiding tot Objectgeoriënteerd Programmeren in Java
Java – Objectgeoriënteerd Programmeren
Nog een paar artikelen om je object-georiënteerd programmeren en ontwerpvaardigheden
Top 10 Objectgeoriënteerde Ontwerpprincipes die Java-programmeurs zouden moeten kennen
Waarom Composition boven Inheritance in Java
Verschil tussen overloading en overriding in Java
Top 10 Interviewvragen over Abstracte klasse en Interface
20 vragen over Java-ontwerppatroon en Softwareontwerp