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. Расскажите про раннее (статическое) и позднее (динамическое) связывание.
Все вопросы по теме:список
Все темы:список
Вопросы/замечания/предложения/нашли ошибку:напишите мне