Navigation überspringen

Was sind Beziehungen?

Vorwissen

Beziehungen oder Assoziationen zwischen Objekten stellt virtuell abstrakt ein Geflecht von realen Objektabhängigkeiten dar. Beispielsweise kann eine Wohnung ohne Zimmer nicht existieren. Assoziationen ermöglichen den Austausch von Nachrichten zwischen den Objekten. Dazu sind Objekte untereinander >>bekannt<<. Dabei spilen sowohl die Richtung als auch die Multiplizität eine entscheidende Rolle. Alles zusammengenommen können Assoziationen im Klassendiagramm angelegt werden, wodurch unmissverständliche Codieranforderungen abzuleiten sind.

Folgende Assoziationen sind bekannt

  • unidirektionale
  • bidirektionale
  • 1:1-Beziehung
  • 1:n-Beziehung

Für weiterführende Informationen folgen Sie dem Kapitel 5.7 aus Java ist auch eine Insel weiter unten.

Beispiel

Wir greifen das Beispiel Wohnung und Zimmer wieder auf. Folgende Aspekte sind anzunehmen:

  1. Eine Wohnung ohne Zimmer gibt es nicht!
  2. Eine Wohnung besteht aus einer unbekannten aber endlichen Zahl Zimmer!

Aus diesen Informationen lassen sich bereits drei Dinge ableiten

  1. Es liegt eine zwangsweise Beziehung vor!
  2. Es liegt eine unidirektionale Beziehung vor!
  3. Es liegt eine 1:n-Beziehung vor, da eine Wohnung aus eine theoretisch unbegrenzten Anzahl Zimmer besteht aber mindestens 1.

 

Was sagt uns nun der Hinweis zwangweise Beziehung?

Um diese Frage zu beantworten müssen wir zunächst klären, welche Arten von Beziehungen es überhaupt gibt:

Assoziation Objekt A und B stehen in Beziehung. Nicht näher spezifiziert.
Assoziation - Aggregation

Jedes Objekt A enthält Objekte B.

Einschränkung: die Lebensdauer der Objekte B hängen nicht von der Lebensdauer des Ganzen bzw. Objekte A ab.

Assoziation - Komposition

Jedes Objekt A enthält Objekte B.

Einschränkung: die Lebensdauer der Objekte B werden durch die Lebensdauer des Ganzen bzw. Objekte A beschränkt.

 

Mit dieser Information können wir am obigen Beispiel davon ausgehen, dass eine Komposition mit Richtung von Wohnung zu Zimmer vorliegt. Weiterhin besteht eine Wohnung aus eventuell mehrere aber mindestens einem Zimmer. Das alles fassen wir zusammen:

 

Aus dieser Beziehung läßt sich nun eine Programmieranweisung ableiten, die unmissverständlich ist!

 

Die Lebensdauer hängt nach den Vorgaben einer Komposition von der Lebensdauer des Ganzen also von der Wohnung ab. Wenn es sie nicht mehr gibt, soll es auch die Zimmer nicht mehr geben. Dieser Zustand entspricht der Realität ziemlich genau. Diese Abhängigkeit läßt sich mit Hilfe des Konstruktors gut realisieren. Wir benötigen zur Darstellung der Multiplizität (Kardinalität) 1..* eine Hilfsmittel aus dem Bereich der Arrays genauer eine ArrayList.

package test;

import javax.swing.*;
import java.util.ArrayList;
import java.io.*;

public class Wohnung {

    public static void main(String[] args) {

        ArrayList<String> zimmerNamenArray = new ArrayList<>();
        int iZimmer = 0;
        String sEingabe;
        while (iZimmer < 5) {
            
            sEingabe=JOptionPane.showInputDialog("("+ iZimmer + "von 4) Geben Sie einen Zimmernamen ein: ");
            zimmerNamenArray.add(sEingabe);
            iZimmer++;

        }
        
        WohnungMitNZimmern whg1 = new WohnungMitNZimmern(zimmerNamenArray);
        System.out.println("Das Zimmer 2 heißt: " + whg1.getZimmerBezeichnung(1));
        System.out.println("Das Zimmer 4 heißt: " + whg1.getZimmerBezeichnung(3));

    }//public static void main(String[] args)

}//public class Wohnung

class WohnungMitNZimmern {

    private ArrayList<Zimmer> zimmerWhg = new ArrayList<>();

    public WohnungMitNZimmern(ArrayList<String> ziBez) {

        // ForEach Schleife
        for (String ziBezWert : ziBez) {
            this.zimmerWhg.add(new Zimmer(ziBezWert));
        }

    }//public WohnungMitNZimmern(ArrayList<String> ziBez)

    public String getZimmerBezeichnung(int ziIndex) {

        return this.zimmerWhg.get(ziIndex).getZimmerName();

    }//public String getZimmerBezeichnung(int ziIndex)

    private class Zimmer {

        private String zimmerName;

        public Zimmer(String z) {
            this.zimmerName = z;
        }//public Zimmer(String z)

        public String getZimmerName() {
            return this.zimmerName;
        }//public String getZimmerName()

    }//private class Zimmer

}//class WohnungMitNZimmern