Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When to use an attribute (property) instead of an association/aggregation/composition when drawing a UML

Okay so I'm a bit confused as to when I should add an attribute to a class vs drawing an association to a class when trying to show a relationship in a UML diagram.

For example let's say I have a DFA class that contains 10 state objects each having a different set of paths to various states in the DFA. Should I draw the composition line from the DFA to the State class or just type all 10 states in the attribute section of the DFA class.

Basically I'm trying to figure out if when a Class A contains (or is composed of) one or more Class Bs, should I draw a line (aggregation, composition,association dependency etc) between them or just put one as an attribute to another.

This article attempts to answer the question but I get confused as soon as he starts talking about the diagrams he drew.

like image 851
thed0ctor Avatar asked Nov 26 '12 02:11

thed0ctor


1 Answers

The article you pointed gives one guideline:

In the years I’ve been working with different modelling teams I’ve found that the rule that works best is to use Associations for Classes and Attributes for DataTypes. A data type is a special kind of classifier, similar to a class. It differs from a class in that instances of a data type are identified only by their value.

I kind of agree with the author, adding another point: your class diagram should be understandable. If you have a diagram with many lines crisscrossing each other the diagram is useless. When this happens you must try to find relations that can be modeled using attributes without loosing too much visual information, and replace them with attributes.

Another thing that you can do with relations and not with attributes is to display bi-directional relations (you can do this with one attribute in each class of the relation, but you loose the semantics of the relation).

like image 68
vainolo Avatar answered Sep 18 '22 17:09

vainolo