While I think I understand aggregation
and composition
, I am having difficulties understanding bi-directional
and uni-directional
association.
I've read that with bi-directional
association, both classes know about
each other and with uni-directional
association only one of the classes is aware
of the relationship. However this explanation seems too abstract for me and I would
like to know what this in particular means for my code and for the program I am writing.
It would be very nice if you could, along with explanation, provide a simple example
of how these two translate to code (I prefer c++, but it can be anything including pseudocode)
相关问题
- System sequence diagram - Can system request input
- Does Visual Studio 2010 Professional support UML m
- Can a [GoF]-ConcreteSubject override the notify me
- How to represent enumeration classes with methods
- How to specify “one at a time” in UML?
相关文章
- Code Iris plugin on Android Studio
- Designing a sequence diagram for an auction system
- Game engine design choice [closed]
- state transition with different guard condition
- Resources for learning how to better read code
- Relationships in a UML class diagram
- How do you convert a document in UML 1.3 - XMI 1.1
- UML help C# Design Principles
Bi-directional associations are navigable from both ends. For instance, given the following classes (for simplicity, suppose that the association is 0..1 in both ends)
you can go from a
Parent
to its child, and vice-versa: the parent knows about its child, the child knows about its parent, and (ifthis.parent!=null
)this.parent.child==this
(othewise it would not be the same association).However, if there were no pointer to
Parent
inChild
:it would be an uni-directional association: you can go from parent to child, but you cannot go back from children to parent.
Unfortunately, the UML specification does not define any concept of "bidirectional association", but only mentions "bidirectional navigability" where "navigability" (indicated with an arrow in a class diagram) does not have a well-defined computational meaning as it can be provided, e.g., by reference properties or by queries. The most efficient form of "navigability", provided by reference properties, is modeled with the UML concept of association end ownership (indicated with a dot in a class diagram).
Bidirectional associations can be precisely defined as a pair of mutually inverse reference properties. This definition implies two conditions:
for
this
referencing a child,this.parent.child == this
, as explained in the somewhat incomplete answer of Javier, but in addition alsofor
this
referencing a parent,this.child.parent == this
.You can read more about this, and find many class diagrams describing examples of bidirectional associations in the tutorials Managing Bidirectional Associations in Java EE and Managing Bidirectional Associations in JavaScript.