Obwohl ich glaube, dass ich aggregation
und composition
verstehe, habe ich Schwierigkeiten, bi-directional
und uni-directional
association zu verstehen.
Ich habe gelesen, dass mit bi-directional
association beide Klassen wissen
einander und mit uni-directional
association ist nur einer der Klassen bekannt
der Beziehung. Diese Erklärung scheint mir jedoch zu abstrakt zu sein
Ich möchte wissen, was das für meinen Code und für das Programm, das ich schreibe, bedeutet.
Es wäre sehr nett, wenn Sie, zusammen mit der Erklärung, ein einfaches Beispiel geben könnten
wie diese beiden in Code übersetzen (ich bevorzuge C ++, aber es kann alles einschließlich Pseudocode sein)
Bidirektionale Assoziationen sind von beiden Seiten aus navigierbar. Zum Beispiel, angesichts der folgenden Klassen (der Einfachheit halber angenommen, dass die Assoziation an beiden Enden 0..1 ist)
%Vor% Sie können von einem Parent
zu seinem Kind wechseln und umgekehrt: Der Elternteil weiß um seinen Sohn, das Kind weiß um seinen Elternteil und (falls this.parent!=null
) this.parent.child==this
(anders wäre es nicht) die gleiche Verbindung).
Wenn jedoch kein Zeiger auf Parent
in Child
:
es wäre eine unidirektionale Assoziation: Sie können von einem Elternteil zum anderen wechseln, aber Sie können nicht von einem Kind zum Elternteil zurückkehren.
%Vor%Leider definiert die UML-Spezifikation kein Konzept der "bidirektionalen Assoziation", sondern erwähnt nur "bidirektionale Navigation", wo "navigability" (angezeigt durch einen Pfeil in einem Klassendiagramm) nicht vorhanden ist eine gut definierte Berechnungsbedeutung, wie sie z. B. durch Referenzeigenschaften oder durch Abfragen bereitgestellt werden kann. Die effizienteste Form der "Navigationsfähigkeit", die durch Referenzeigenschaften bereitgestellt wird, wird mit dem UML-Konzept von Assoziationsendbesitz modelliert (angezeigt durch einen Punkt in einem Klassendiagramm) / p>
Bidirektionale Zuordnungen können genau als ein Paar von gegenseitig umgekehrten Referenzeigenschaften definiert werden . Diese Definition beinhaltet zwei Bedingungen:
für this
referenziert ein Kind, this.parent.child == this
, wie in der etwas unvollständigen Antwort von Javier erklärt, aber dazu auch
für this
, das auf ein übergeordnetes Element verweist, this.child.parent == this
.
Sie können mehr darüber lesen und finden viele Klassendiagramme, die Beispiele für bidirektionale Assoziationen in den Lernprogrammen beschreiben. Verwalten bidirektionaler Zuordnungen in Java EE und Verwalten bidirektionaler Zuordnungen in JavaScript .
Tags und Links uml