J
Java Машина
@java_mashina247 подп.
73просмотров
29.6%от подписчиков
29 августа 2024 г.
Score: 80
Данный вопрос довольно часто задают во время собеседования на junior разработчика так как, является базовым, фундаментальным. Ассоциация, агрегация и композиция — это три ключевых концепции объектно-ориентированного программирования (ООП), которые описывают отношения между классами. 1⃣ Ассоциация — это общая форма связи между двумя независимыми классами. Она указывает на то, что один объект может использовать функционал другого объекта. Ассоциация предполагает слабую связь, то есть один объект может существовать независимо от другого. class Driver { private String name; public Driver(String name) { this.name = name; } public String getName() { return name; } } class Car { private String model; public Car(String model) { this.model = model; } public String getModel() { return model; } // Ассоциация: метод drive связывает Car с Driver public void drive(Driver driver) { System.out.println(driver.getName() + " водит " + this.model); } } public class Main { public static void main(String[] args) { Driver driver = new Driver("Михаил"); Car car = new Car("Toyota"); car.drive(driver); // Михаил водит Toyota } } В данном примере Driver и Car существуют независимо друг от друга. Но с помощью метода drive мы можем установить ассоциацию между водителем и автомобилем. 2⃣ Агрегация — это более специфичная форма ассоциации. Она описывает отношения "часть-целое", где "часть" может существовать независимо от "целого". Это слабая форма композиции, когда один объект является частью другого, но может существовать отдельно. class Department { private String name; private List<Employee> employees; public Department(String name) { this.name = name; this.employees = new ArrayList<>(); } public void addEmployee(Employee employee) { employees.add(employee); } public void showEmployees() { employees.forEach(e -> System.out.println(e.getName())); } } class Employee { private String name; public Employee(String name) { this.name = name; } public String getName() { return name; } } public class Main { public static void main(String[] args) { Employee emp1 = new Employee("Валерия"); Employee emp2 = new Employee("Александр"); Department department = new Department("HR"); department.addEmployee(emp1); department.addEmployee(emp2); department.showEmployees(); // Валерия, Александр } } Здесь уже Employee и Department связаны отношением агрегации. Department содержит список сотрудников, но сотрудники (Employee) могут существовать независимо от отдела. 3⃣ Композиция — это сильная форма агрегации, когда один объект "состоит из" другого объекта. В отличие от агрегации, части не могут существовать независимо от целого. Когда объект-компонент уничтожается, уничтожаются и его части. class Engine { public Engine() { System.out.println("Двигатель создан"); } public void start() { System.out.println("Двигатель запущен"); } } class Car { private Engine engine; public Car() { this.engine = new Engine(); // Композиция } public void drive() { engine.start(); System.out.println("Машина едет"); } } public class Main { public static void main(String[] args) { Car car = new Car(); car.drive(); // Двигатель создан, Двигатель запущен, Машина едет } } В данном примере класс Car содержит экземпляр Engine. Engine создается и существует только в контексте Car. Если Car будет уничтожен, то и Engine будет уничтожен вместе с ним. Из этого всего следует, что: ✅ Ассоциация — это общее отношение между двумя независимыми классами. ✅ Агрегация — это "часть-целое" отношение, где "часть" может существовать независимо. ✅ Композиция — это "часть-целое" отношение, где "часть" не может существовать отдельно от
73
просмотров
4000
символов
Нет
эмодзи
Нет
медиа

Другие посты @java_mashina

Все посты канала →