Ich hatte neulich erst einen Beitrag zur objektorientierten Programmieung in Java geschrieben und möchte ergänzend dazu heute über Assoziationen sprechen. Denn auch diese sind ein wichtiger Teil wenn uns um Verbindungen, bzw. Beziehungen zwischen Klassen geht.
In der Therorie ist das ziemlich einfach wenn man sich zum Beispiel mal die Beziehung einer Bestellung zu einem Kunden vor Augen hält. Wenn der Kunde keine Beziehung zu seinen Bestellungen hätte, könnte er weder bestellen noch könnten die von ihm bestellten Waren zugestellt werden.
Diese Beziehungen untereinander nennt man Assoziationen und es gibt sie in verschiedenen Formen:
Einfache Asoziation: Eine Klasse kennt die andere, aber nicht umgekehrt
Bidirektionale Assoziation: Beide Klassen kennen sich gegenseitig
Aggregation: Eine "hat-eine"-Beziehung, bei der die anhängige Klasse auch ihne die Hauptklasse existieren kann
Komposition: Eine "besteht-aus"-Beziehung, bei der das abhängige Objekt nicht ohne das Hauptobjekt existieren kann
Zurück zu unseren Bestellungen und Kunden und lass uns dafür ein bisschen Code anschauen:
public class Bestellung {
private int bestellnummer;
private String produkt;
public Bestellung(int bestellnummer, String produkt) {
this.bestellnummer = bestellnummer;
this.produkt = produkt;
}
public int getBestellnummer() {
return bestellnummer;
}
public String getProdukt() {
return produkt;
}
@Override
public String toString() {
return "Bestellung {Bestellnummer: " + bestellnummer + ", Produkt: " + produkt + "}";
}
}
Hier sehen wir eine normale Klasse ohne weitere Besonderheiten. Wir haben zwei Attribute die eine Bestellnummer und einen Produktnamen repräsentieren.
public class Kunde {
private String name;
private List<Bestellung> bestellungen;
public Kunde(String name) {
this.name = name;
this.bestellungen = new ArrayList<>();
}
public void addBestellung(Bestellung bestellung) {
bestellungen.add(bestellung);
}
public List<Bestellung> getBestellungen() {
return bestellungen;
}
@Override
public String toString() {
return "Kunde {Name: " + name + ", Bestellungen: " + bestellungen + "}";
}
}
Die Klasse Kunde hingegen hat nun eine Assoziation mit der Klasse Bestellung. Der Kunde "hat-eine" Liste von Bestellungen als Attribut um diese Assoziation zu definieren. Das bedeutet also, dass die Klasse Kunde auch die Klasse Bestellung kennt, die Klasse Bestellung aber nicht den Kunden. Somit sind wir in der Lage, einem Kunden seine Bestellungen zuzuordnen.
Um nun die Bestellungen einem Kunden zuzuordnen können wir folgendes tun:
public class Main {
public static void main(String[] args) {
Kunde kunde = new Kunde("Max Mustermann");
Bestellung bestellung1 = new Bestellung(1001, "Laptop");
Bestellung bestellung2 = new Bestellung(1002, "Smartphone");
kunde.addBestellung(bestellung1);
kunde.addBestellung(bestellung2);
System.out.println(kunde);
}
}
Im ersten Schritt erzeugen wir einen neuen Kunden und können ihm im nächsten Schritt seine Bestellungen zuweisen.
Dieses Beispiel zeigt eine einfache eins-zu-viele Assoziation (one to many). In der Praxis könnten solche Beziehungen noch erweitert werden, z. B. mit einer bidirektionalen Referenz (dass die Bestellung weiß, zu welchem Kunden sie gehört) und/oder mit einer Datenbankanbindung.
Ich hoffe, dass dieser kleine Einblick dir weitergeholfen hat und du nun mit Assoziationen in Java etwas mehr vertraut bist. Wenn du bereits objektorientierte Programmierung einsetzt, wirst du Assoziationen vermutlich schon viele Male verwendet haben, ohne es genau zu wissen.
