Aggregation vs Composition
Both represent HAS-A relationships, but they differ in ownership and lifecycle. Aggregation is a weaker relationship where the contained object can exist independently of the container. Composition is stronger ownership where the contained object's lifecycle is conceptually tied to the owner. In modern application design, I use composition when the owner truly controls the component's lifecycle and aggregation when the relationship represents shared or independent objects.
Aggregation: weaker ownership; parts can exist independently.
Composition: stronger ownership and lifecycle relationship.
Both represent HAS-A relationships.
Composition often uses private fields and controlled creation.
Do not confuse composition in OOP with the separate idea of object composition as a general design technique.