Understanding Association, Aggregation, and Composition in Object-Oriented Programming

Tuanh.netTuanh.net
4 min read

1. What is Association?

Association represents a relationship where objects of one class are linked to objects of another class. This relationship can be one-to-one, one-to-many, or many-to-many. Association is the most general form of relationship and doesn’t imply ownership or lifecycle dependency between the objects.

1.1 One-to-One Association

In a one-to-one association, each object of a class is associated with exactly one object of another class. For example, a Person class and a Passport class where each person has exactly one passport.

Image

public class Person {
private Passport passport;

public Person(Passport passport) {
this.passport = passport;
}

public Passport getPassport() {
return passport;
}
}

public class Passport {
private String number;

public Passport(String number) {
this.number = number;
}

public String getNumber() {
return number;
}
}

Demo:

public class Main {
public static void main(String[] args) {
Passport passport = new Passport("123456789");
Person person = new Person(passport);

System.out.println("Passport Number: " + person.getPassport().getNumber());
}
}

Result:

Passport Number: 123456789

1.2 One-to-Many Association

In a one-to-many association, an object of one class is associated with multiple objects of another class. For example, a Teacher class and a Student class where one teacher can have multiple students.

Image

Example:

import java.util.ArrayList;
import java.util.List;

public class Teacher {
private List<Student> students = new ArrayList<>();

public void addStudent(Student student) {
students.add(student);
}

public List<Student> getStudents() {
return students;
}
}

public class Student {
private String name;

public Student(String name) {
this.name = name;
}

public String getName() {
return name;
}
}

Demo:

public class Main {
public static void main(String[] args) {
Teacher teacher = new Teacher();
teacher.addStudent(new Student("John"));
teacher.addStudent(new Student("Jane"));

for (Student student : teacher.getStudents()) {
System.out.println("Student Name: " + student.getName());
}
}
}

Result:

Student Name: John
Student Name: Jane

2. What is Aggregation?

Aggregation is a special form of association with a whole-part relationship where the child can exist independently of the parent. This signifies a weaker relationship than composition, meaning the lifecycle of the child object is not dependent on the parent.

2.1 Example of Aggregation

Consider a Library and Book classes. A library can have multiple books, but books can exist without the library.

Example:

import java.util.ArrayList;
import java.util.List;

public class Library {
private List<Book> books = new ArrayList<>();

public void addBook(Book book) {
books.add(book);
}

public List<Book> getBooks() {
return books;
}
}

public class Book {
private String title;

public Book(String title) {
this.title = title;
}

public String getTitle() {
return title;
}
}

Demo:

public class Main {
public static void main(String[] args) {
Library library = new Library();
library.addBook(new Book("The Catcher in the Rye"));
library.addBook(new Book("To Kill a Mockingbird"));

for (Book book : library.getBooks()) {
System.out.println("Book Title: " + book.getTitle());
}
}
}

Result:

Book Title: The Catcher in the Rye
Book Title: To Kill a Mockingbird

3. What is Composition?

Composition is a form of association where the child’s lifecycle is dependent on the parent’s lifecycle. If the parent object is destroyed, the child objects are also destroyed. This implies a strong relationship and ownership.

3.1 Example of Composition

Consider a House and Room classes where a house contains rooms. Rooms cannot exist without a house.

Example:

import java.util.ArrayList;
import java.util.List;

public class House {
private List<Room> rooms = new ArrayList<>();

public House() {
rooms.add(new Room("Living Room"));
rooms.add(new Room("Bedroom"));
}

public List<Room> getRooms() {
return rooms;
}

private class Room {
private String name;

public Room(String name) {
this.name = name;
}

public String getName() {
return name;
}
}
}

Demo:

public class Main {
public static void main(String[] args) {
House house = new House();

for (House.Room room : house.getRooms()) {
System.out.println("Room Name: " + room.getName());
}
}
}

Result:

Room Name: Living Room
Room Name: Bedroom

4. Conclusion

In summary, understanding the differences between Association, Aggregation, and Composition is essential for designing effective object-oriented systems. Each relationship type reflects different levels of dependency and ownership, helping you model real-world scenarios accurately.

If you have any questions or need further clarification, feel free to comment below!

Read more at : Understanding Association, Aggregation, and Composition in Object-Oriented Programming

0
Subscribe to my newsletter

Read articles from Tuanh.net directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Tuanh.net
Tuanh.net