Composition and aggregation
Classes and objects can be related to each other. Inheritance describes an "IS A" relationship. A lion IS AN animal. This relationship is easily expressed using inheritance, where
Animal
would be the parent class and
Lion
would be the child. But not every relationship in the world is properly described this way. For example, a keyboard definitely has some relationship with a computer, but
it isn't a computer. Hands have some relationship with a person, but they are not a person. These cases represent a different type of relationship — not "IS A", but "HAS A". Hands are not a person, but a person HAS hands. A keyboard is not a computer, but a computer HAS A keyboard. "HAS A" relationships can be described in code using
composition and
aggregation. The difference between these concepts lies in the "strictness" of the relationships. Let's take a simple example: We have a
Car
. Every car has an engine. Additionally, every car can carry passengers. What is the fundamental difference between the
Engine engine
and
Passenger[] passengers
fields? If passenger
A
is sitting inside a car, that doesn't mean that passengers
B
and
C
cannot also be in the car. One car can accommodate multiple passengers. What's more, all the passengers may get out of the car, yet it will continue to function smoothly. The relationship between the
Car
class and the
Passenger[] passengers
array is less strict. It is called
aggregation. Here's a good article on this topic:
Relationships between classes (objects). It provides another good example of aggregation. Let's say we have a
Student
class that represents a student, and a
StudentGroup
that represents a group of students. A student can be a member of a physics club, a Star Wars student fan club, or a comedy club.
Composition is a stricter type of relationship. When using composition, an object has another object, but it cannot belong to another object of the same type. The simplest example is a car engine. If a car has an engine, then that engine cannot belong to another car. As you can see, that relationship is much stricter than that of
Car
and
Passengers
.
![Relations between classes. Inheritance, composition and aggregation - 4]()
GO TO FULL VERSION