Aggregation and Association

An aggregation link means A-PART-OF. However people often use it incorrectly (in order to be lazy). Links are supposed to have information content and tell the reader how classes related and why classes are there. I often have students use all inheritance and aggregation since everything is either inherited or part of the whole program.

Well, aggregation as A-PART-OF is not supposed to be a "cover-all". It is supposed to be used where you have a major component and the attached classes really are of no consequence to the application EXCEPT that they are a part-of an important piece. Like a chair leg to a chair, or an exit button on a GUI.

Association is what it says, the link states the association between objects. Like a GUI is the View to an applications Model in a Model/View/Controller architecture. So a link between the application and the GUI may have say Model/View. Interfaces would be the Controllers for the GUIs. These words (Model/View/Controller) MEAN something to people reading them and thus they instantly understand the architectural design just because of the association link words.

In a sense, all aggregations are basically associations since the association between them is that one is a-part-of the other. None-the-less, this does not tell the reader anything useful so it is generally a better idea to forget about aggregation and use associations and inheritance instead.