A part-whole association is an association that represents a relationship between a part type and a whole type. Its instances are part-whole relationships between two objects where one of them is a part of the other.
An aggregation is a special form of a part-whole association, where the parts of a whole can
be shared with other wholes. For instance, we can model an aggregation between the classes
Course, as shown in the following diagram, since a
course is part of a degree program and a course can be shared among two or more degree programs
(e.g. an engineering degree could share a C programming course with a computer science
However, the concept of an aggregation with shareable parts doesn't mean much, really, so it does not have any implications on the implementation and many developers therefore prefer not to use the white diamond in their class diagrams, but just model a plain association instead. The UML spec says: "Precise semantics of shared aggregation varies by application area and modeler".
The multiplicity of an aggregation's association end at the whole side may be any number (*) because a part may belong to, or shared among, any number of wholes.