bi-direktional und uni-direktionale Assoziationen UML
Während ich glaube, ich verstehe aggregation
und composition
ich habe Schwierigkeiten Verständnis bi-directional
und uni-directional
Vereins.
Ich habe gelesen, dass mit bi-directional
association, beide Klassen kennen
einander und mit uni-directional
Verein nur eine der Klassen ist bekannt
von der Beziehung. Aber diese Erklärung scheint zu Abstrakt für mich und ich möchte
gerne wissen, was dies insbesondere für meinen code und für das Programm, das ich Schreibe.
Es wäre sehr schön, wenn Sie könnte, zusammen mit der Erklärung, ein einfaches Beispiel
wie diese beiden übersetzen von code (ich bevorzuge c++, aber es kann alles sein, einschließlich pseudocode)
- Sie haben einige Beispiele in sourcemaking.com/refactoring/... und etutorials.org/Programming/UML/....
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bi-direktionale Assoziationen sind schiffbar von beiden enden. Zum Beispiel, die folgende Klassen (für Einfachheit nehmen wir an, dass die association 0..1 in beide enden)
kann man von einem
Parent
zu seinem Kind, und Umgekehrt: die Eltern wissen über Ihr Kind, das Kind kennt seinen Vater, und (wennthis.parent!=null
)this.parent.child==this
(othewise wäre es nicht der gleiche Verein).Jedoch, wenn es keine Zeiger auf
Parent
imChild
:wäre es eine uni-direktionale Assoziation: Sie können von den Eltern auf das Kind, aber Sie können nicht zurück, von Kindern zu Eltern.
bi-directional
unduni-directional
Verein, aber jetzt habe ich eine zweite Frage. Bisher dachte ich, dass ein member-Zeiger/Referenz auf die zugehörige Klasse wäre eine Implementierung der aggregation, aber dein code-Beispiel verwendet Zeiger zu. Bedeutet es, dass die aggregation und Assoziation sind umgesetzt in der gleichen Weise in code?Leider die UML-Spezifikation definiert nicht den Begriff der "bidirektionale Assoziation", sondern erwähnt lediglich die "bidirektionale navigierbarkeit" wo "navigierbarkeit" (gekennzeichnet mit einem Pfeil in einem Klassendiagramm) nicht über eine gut definierte rechnerische Bedeutung, wie es kann vorgesehen werden, z.B. durch Bezugnahme auf Eigenschaften oder von Abfragen. Die effizienteste form der "navigierbarkeit", zur Verfügung gestellt von Referenz-Eigenschaften, modelliert mit UML-Konzept der Verein Ende Eigentum (gekennzeichnet mit einem dot in einem Klassendiagramm).
Bidirektionale Assoziationen kann genau definiert werden, wie ein paar gegenseitig inverse Referenz Eigenschaften. Diese definition impliziert zwei Voraussetzungen:
für
this
verweisen auf ein Kind,this.parent.child == this
wie bereits erläutert, in der etwas unvollständige Antwort von Javier, sondern darüber hinaus auchfür
this
verweisen auf eine übergeordnete,this.child.parent == this
.Lesen Sie mehr über dieses und viele Klassendiagramme beschreiben Beispiele von bidirektionalen Assoziationen in den tutorials Verwalten von Bidirektionalen Assoziationen in Java EE und Verwalten von Bidirektionalen Assoziationen in JavaScript.