8. Что такое ассоциация, агрегация и композиция?

8. Что такое ассоциация, агрегация и композиция?

UNKNOWN

Ассоциация, агрегация и композиция — это три типа отношений между классами в объектно-ориентированном программировании (ООП). Давайте разберем каждый из них простым языком и приведем примеры на Java.

Ассоциация

Ассоциация — это общее отношение между двумя классами, которое показывает, что объекты одного класса могут взаимодействовать с объектами другого класса. Это слабая связь, и оба объекта могут существовать независимо друг от друга.

Пример ассоциации

Представим, что у нас есть классы Teacher и Student. Учитель может обучать студентов, а студент может учиться у нескольких учителей. Но ни один из объектов не владеет другим.

public class Teacher {
    private String name;

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

    public String getName() {
        return name;
    }
}

public class Student {
    private String name;

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

    public String getName() {
        return name;
    }

    public void learnFrom(Teacher teacher) {
        System.out.println(this.name + " is learning from " + teacher.getName());
    }
}

public class Main {
    public static void main(String[] args) {
        Teacher teacher = new Teacher("Mr. Smith");
        Student student = new Student("Alice");
        student.learnFrom(teacher); // Alice is learning from Mr. Smith
    }
}

Агрегация

Агрегация — это более сильное отношение, чем ассоциация. Она обозначает отношение "часть-целое" или "has-a". Объекты могут существовать независимо друг от друга, но один из объектов является частью другого.

Пример агрегации

Представим, что у нас есть класс Library и класс Book. Библиотека состоит из книг, но книги могут существовать независимо от библиотеки.

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

public class Book {
    private String title;

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

    public String getTitle() {
        return title;
    }
}

public class Library {
    private List<Book> books;

    public Library() {
        this.books = new ArrayList<>();
    }

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

    public void showBooks() {
        for (Book book : books) {
            System.out.println(book.getTitle());
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Library library = new Library();
        Book book1 = new Book("1984");
        Book book2 = new Book("Brave New World");

        library.addBook(book1);
        library.addBook(book2);

        library.showBooks(); // 1984, Brave New World
    }
}

Композиция

Композиция — это самый сильный тип отношения. Она также обозначает отношение "часть-целое", но при этом части не могут существовать независимо от целого. Если целое уничтожается, то и части также уничтожаются.

Пример композиции

Представим, что у нас есть класс House и класс Room. Комнаты не могут существовать без дома, если дом разрушен, то и комнаты тоже перестанут существовать.

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

public class Room {
    private String name;

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

    public String getName() {
        return name;
    }
}

public class House {
    private List<Room> rooms;

    public House() {
        this.rooms = new ArrayList<>();
    }

    public void addRoom(String name) {
        Room room = new Room(name);
        rooms.add(room);
    }

    public void showRooms() {
        for (Room room : rooms) {
            System.out.println(room.getName());
        }
    }
}

public class Main {
    public static void main(String[] args) {
        House house = new House();
        house.addRoom("Living Room");
        house.addRoom("Bedroom");

        house.showRooms(); // Living Room, Bedroom
    }
}

Ключевые различия

  • Ассоциация: Связь слабая, объекты могут существовать независимо друг от друга.
  • Агрегация: Связь "часть-целое", объекты могут существовать независимо друг от друга.
  • Композиция: Связь "часть-целое", объекты не могут существовать независимо друг от друга.

Эти отношения помогают моделировать реальные связи между объектами в программе, делая ее структуру более понятной и логичной.


Предыдущий вопрос: 7. Что такое полиморфизм? Пример

Следующий вопрос: 9. Расскажите про раннее (статическое) и позднее (динамическое) связывание.

Все вопросы по теме:список

Все темы:список

Вопросы/замечания/предложения/нашли ошибку:напишите мне

Report Page