Composities

Soms zijn twee objecten onlosmakelijk met elkaar verbonden: de ene kan niet bestaan zonder de andere. In dit geval spreken we van een compositie. Als het ene object ophoudt te bestaan, is ook het andere object gedoemd om op te houden te bestaan.

Als voorbeeld nemen we de relatie tussen een huis en een kamer. Als het huis wordt afgebroken, zal ook de kamer verdwijnen. De kamer kan niet bestaan zonder het huis.

UML-diagram van een compositie

In bovenstaand diagram heeft het huis vier verschillende kamers. Dit zijn allemaal instanties van dezelfde klasse. Merk op dat we in UML een compositie aanduiden met een volle ruit.

De code ziet er als volgt uit:

House.java

public class House {
    private Room kitchen = new Room("kitchen");
    private Room livingRoom = new Room("living room");
    private Room sleepingRoom = new Room("sleeping room");
    private Room bathroom = new Room("bathroom");
}

In deze code worden de instanties van de kamer gecreërd op het moment dat het huis gecreërd wordt. Verder zijn er ook geen methoden voorzien om de kamers te wijzigen. De kamers kunnen dus niet zomaar van huis veranderen zoals dat wel is bij een huisdier dat van eigenaar verandert. En als het huis ophoudt te bestaan, houden ook de kamers op te bestaan.

Het verschil tussen de verschillende soorten relaties, namelijk associaties, aggregaties en composities, vooral theoretisch en conceptueel is: in Java wordt een relatie tussen twee objecten altijd gerealiseerd door het ene object een referentie te laten hebben naar het andere object. De drie verschillende soorten relaties worden dus technisch op dezelfde manier gerealiseerd. Referenties naar andere objecten kunnen soms wel gedeeld worden en soms niet. Daar zit dan wel een mogelijk verschil dat overeenkomt met het verschil tussen een aggregaties (gedeelde referentie) en een compositie (niet gedeelde referentie).