Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
informatik:oop:oop-skript [2025/06/26 09:13] jonathan.pfeifferinformatik:oop:oop-skript [2025/06/26 09:34] (aktuell) jonathan.pfeiffer
Zeile 331: Zeile 331:
 } }
 </code> </code>
-===== 6 Assoziation =====+===== 6 Assoziationen =====
 Eine Beziehung zwischen zwei oder mehreren Klassen wird als Assoziation bezeichnet. Die Assoziation beschreibt eine sehr enge Form der Beziehung zwischen zwei Klassen, die das gegenseitige Zugreifen auf Elemente der Klasse (Attribute und Operationen) **ermöglicht**. Eine Beziehung zwischen zwei oder mehreren Klassen wird als Assoziation bezeichnet. Die Assoziation beschreibt eine sehr enge Form der Beziehung zwischen zwei Klassen, die das gegenseitige Zugreifen auf Elemente der Klasse (Attribute und Operationen) **ermöglicht**.
-Eine Assoziation beschreibt die Beziehung aller Objekte der beteiligten Klassen. Sie wird auf Objektebene hergestellt und auf Klassenebene modelliert.+Eine Assoziation beschreibt die Beziehung aller Objekte der beteiligten Klassen. Sie wird auf Objektebene hergestellt und auf Klassenebene modelliert. \\
 {{:informatik:oop:assoziation1.png?400|}} {{:informatik:oop:assoziation1.png?400|}}
 +\\
 Beispielsweise besteht zwischen der Klasse Kunde und der Klasse Girokonto eine Beziehung. Denn ein Kunde kann ein Girokonto haben und der Kontoinhaber eines Girokontos ist ein Kunde. Beziehungen zwischen Klassen (Assoziationen) werden genauer beschrieben durch **Rollen**, **Multiplizitäten** und **Navigierbarkeit**. Beispielsweise besteht zwischen der Klasse Kunde und der Klasse Girokonto eine Beziehung. Denn ein Kunde kann ein Girokonto haben und der Kontoinhaber eines Girokontos ist ein Kunde. Beziehungen zwischen Klassen (Assoziationen) werden genauer beschrieben durch **Rollen**, **Multiplizitäten** und **Navigierbarkeit**.
  
Zeile 347: Zeile 348:
 ==== Multiplizitäten ==== ==== Multiplizitäten ====
  
-Multiplizitäten geben an mit wie vielen Objekten der assoziierten Klasse ein Objekt ver-bunden werden kann (vgl. Kardinalitäten bei ERDs). Sie stellen folglich Mengenverhältnisse zwischen Klassen dar.+Multiplizitäten geben an mit wie vielen Objekten der assoziierten Klasse ein Objekt verbunden werden kann (vgl. Kardinalitäten bei ERDs). Sie stellen folglich Mengenverhältnisse zwischen Klassen dar.
  
 === Beispiel === === Beispiel ===
Zeile 354: Zeile 355:
 {{:informatik:oop:assoziation3.png?400|}} {{:informatik:oop:assoziation3.png?400|}}
  
-Im oben beschriebenen Beispiel kann ein Kunde ein Girokonto haben. Es ist aber auch vor-stellbar, dass der Kunde bei der Bank kein Girokonto hat, sondern nur ein Sparkonto. Des-wegen spricht man hier von einer Kann-Assoziation (Untergrenze 0). Dagegen muss ein Girokonto einen Kunden als Kontoinhaber haben, weswegen hier von einer Muss-Assoziation (Untergrenze > 0) gesprochen wird.+Im oben beschriebenen Beispiel kann ein Kunde ein Girokonto haben. Es ist aber auch vorstellbar, dass der Kunde bei der Bank kein Girokonto hat, sondern nur ein Sparkonto. Deswegen spricht man hier von einer Kann-Assoziation (Untergrenze 0). Dagegen muss ein Girokonto einen Kunden als Kontoinhaber haben, weswegen hier von einer Muss-Assoziation (Untergrenze > 0) gesprochen wird.
  
 Mögliche Multiplizitäten sind: Mögliche Multiplizitäten sind:
Zeile 362: Zeile 363:
 | 1 .. *  | ein oder beliebig viele assoziierte Objekte        | MUSS-Assoziation  | | 1 .. *  | ein oder beliebig viele assoziierte Objekte        | MUSS-Assoziation  |
 | n .. m  | von n bis m assoziierte Objekte                    | -                 | | n .. m  | von n bis m assoziierte Objekte                    | -                 |
 +
 +=== Weitere Beispiele ===
 +Jeder Kunde hat kein, ein oder beliebig viele Girokonten. Jedes Girokonto hat ein oder be-liebig viele Kontoinhaber (= Kunden).
 +\\
 +{{:informatik:oop:assoziation4.png?400|}}
 +\\
 +Jeder Kunde hat kein, ein oder beliebig viele Girokonten. Jedes Girokonto hat 1 oder 4 Kontoinhaber (= Kunden).
 +\\
 +{{:informatik:oop:assoziation5.png?400|}}
 +\\
 +
 +==== Navigierbarkeit ====
 +
 +Bei der Navigierbarkeit wird die Frage beantwortet, wer kann auf wen zugreifen? Dabei unterscheidet man zwischen **unidirektionalen** und **bidirektionalen** Assoziationen.
 +
 +==== Unidirektionale Assoziation ====
 +
 +\\
 +{{:informatik:oop:assoziation6.png?300|}}
 +\\
 +
 +Jedes Objekt der Klasse Girokonto kennt seinen Kontoinhaber (= Kunde). Allerdings kennt ein Objekt der Klasse Kunde nicht seine Girokonten. Das heißt, man kann über das Girokonto z.B. den Namen des Kontos ausgeben, aber nicht über den Kun-den den Kontostand seines Girokontos.
 +Die Navigierbarkeit ist also nur in eine Richtung möglich, nämlich von Kunde zu Girokonto (Pfeil), aber nicht von Girokonto zu Kunde („X“)
 +
 +==== Bidirektionale Assoziation ====
 +
 +
 +\\
 +{{:informatik:oop:assoziation7.png?300|}}
 +\\
 +Jedes Objekt der Klasse Kunde weiß, welche Girokonten ihm zugeordnet sind. Umgekehrt weiß aber auch jedes Girokonto welche Kontoinhaber (= Kunden) es hat. Die Navigierbarkeit ist in beide Richtun-gen möglich. Das heißt, über einen Kun-den kann der Kontostand seines Girokon-tos herausgefunden werden und über ein Girokonto kann der Name des Kunden ermittelt werden.
 +
 +----
 +
 +Neben der Pfeilspitze und dem „X“ kann auch „nichts“ geschrieben werden. Dies bedeutet, dass noch keine Beziehung festgelegt wurde.
 +\\
 +{{:informatik:oop:assoziation8.png?300|}}
 +\\
 +\\
 +=== Mögliche Beziehungen ===
 +| Pfeilspitze  | Zugriff auf die Klasse möglich.       |
 +| „X“          | Kein Zugriff auf die Klasse möglich.  |
 +| (nichts)     | Keine Beziehung festgelegt.           |
 +
 +
 ===== 7 Algorithmus ===== ===== 7 Algorithmus =====
 ==== 7.1 Definition ==== ==== 7.1 Definition ====