Angenommen, ich habe zwei Klassen: Ehemann und Ehefrau. Diese sind bidirektional miteinander verbunden. Ein Ehemann muss genau eine Ehefraue haben. Eine Ehefrau muss genau einen Ehemann haben. Wie kann ich diese Anforderung programmiertechnisch umsetzen? Kann ich effizient verhindern, dass Objekte existieren, die keinen Ehemann bzw. keine Ehefrau haben?
So kann ich natürlich keine der beiden Klassen instanziieren. Nehme ich nun bspw. den Konstruktor für Ehemann raus, ist es allerdings möglich, dass Objekte vom Typ Ehemann ohne eine Ehefrau existieren.
Das Problem welches ich sehe, ist die Tatsache, dass nun die Ehefrau dafür zuständig ist, dem Ehemann mitzuteilen, zu welcher Ehefrau er gehört (einEhemann.setzeEhefrau(this). Tut die Ehefrau dies nicht, besteht die Möglichkeit, einen Ehemann zu haben, welcher keine Ehefrau besitzt. Die Ehefrau stellt also gewissermaßen Funktionalität des Ehemanns bereit. Ist dieses Problem lösbar?
Java:
class Ehefrau
{
private Ehemann meinEhemann;
public Ehefrau(Ehemann einEhemann) {
this.meinEhemann = einEhemann;
}
}
class Ehemann
{
private Ehefrau meineEhefraue;
public Ehemann(Ehefrau eineEhefrau) {
this.meineEhefraue = eineEhefrau;
}
}
So kann ich natürlich keine der beiden Klassen instanziieren. Nehme ich nun bspw. den Konstruktor für Ehemann raus, ist es allerdings möglich, dass Objekte vom Typ Ehemann ohne eine Ehefrau existieren.
Java:
class Ehefrau
{
private Ehemann meinEhemann;
public Ehefrau(Ehemann einEhemann) {
einEhemann.setzeEhefrau(this);
this.meinEhemann = einEhemann;
}
}
class Ehemann
{
private Ehefrau meineEhefraue;
public void setzeEhefrau(Ehefrau eineEhefrau) {
this.meineEhefraue = eineEhefrau;
}
}
Das Problem welches ich sehe, ist die Tatsache, dass nun die Ehefrau dafür zuständig ist, dem Ehemann mitzuteilen, zu welcher Ehefrau er gehört (einEhemann.setzeEhefrau(this). Tut die Ehefrau dies nicht, besteht die Möglichkeit, einen Ehemann zu haben, welcher keine Ehefrau besitzt. Die Ehefrau stellt also gewissermaßen Funktionalität des Ehemanns bereit. Ist dieses Problem lösbar?