Aggregation and composition connection and properties are unintuitive, (plus navigability arrows are ugly). (#276)
When adding a generalization link to a class diagram (class derivation arrow) the process is perfectly intuitive. You first click on the derived class, then drag and release over the base class. This requires almost no thought whatsoever since the action required to create the link follows the conceptual relationship between the entities involved. By this I mean that the generalization arrow points _from_ the derived class, _to_ the base class, and the action required to create the link follows the same direction.
When it comes to the aggregation and composition links though the situation is reversed and as a consequence rather counterintuitive.
In the case of aggregation and composition the 'owning' class has a reference to the 'owned' class. From an OOP perspective this relationship should ideally be 'one-way' and not circular. Before a circular relationship would even be contemplated alternatives like eventing back to the parent or a callback interface would normally be considered.
So the action of creating the agg or comp link is primarily one of the owning class referencing the owned class, but unlike with generalization the link has to be created in the reverse direction from the owned class back to the owner.
In addition if you then access the link properties to add a navigability arrow to the link, the owned class is represented as the 'start role' for the link. Despite having used the software on and off for a few months now I get this wrong almost every time.
Suggestions:
1) Make it so that aggregation and composition links are added from the owning class to the owner.
2) In the link properties reverse the roles so that the owner class is the startpoint and the owned class is the endpoint.
3) Make it so that these links have one-way navigability by default, from owner to owned.
4) Finally. Provide an option for rendering the navigability arrows much smaller. Currently they are massive, larger even than the generalization arrows, but whereas the generalization arrow is a solid filled arrow the navigability one is just a simple line drawn arrow, it has no need to be so massive and looks rather ugly as a consequence, especially if you have a dense diagram.
Dusan Rodina - softwareideas.net 1 September 2013 22:26:25
Thank you for this useful notice.
Neutrino 16 July 2013 15:22:10
Suggestion 1 should read:
1) Make it so that aggregation and composition links are added from the owning class to the _owned_.