Association, Aggregation, and Composition
In object-oriented design, classes can have different types of relationships with each other. Three common types of relationships are association, aggregation, and composition.
Association
Association represents a relationship between two classes where each class has an independent existence and there is no ownership between them. It can be a one-to-one, one-to-many, or many-to-many relationship.
For example, let's consider the relationship between a Person class and a Company class. Multiple persons can be associated with a company, and a person can be associated with multiple companies. In this case, the Person and Company classes are associated with each other.
To illustrate this association in Java, we can have a Person class with a name attribute and a Company class with a list of employees. The Company class can have methods to hire employees and print the names of the employees:
1```java
2class Person {
3
4 private String name;
5
6 public Person(String name) {
7 this.name = name;
8 }
9
10 public String getName() {
11 return name;
12 }
13}
14
15class Company {
16
17 private String name;
18 private List<Person> employees;
19
20 public Company(String name) {
21 this.name = name;
22 this.employees = new ArrayList<>();
23 }
24
25 public void hireEmployee(Person person) {
26 employees.add(person);
27 }
28
29 public void printEmployees() {
30 for (Person employee : employees) {
31 System.out.println(employee.getName());
32 }
33 }
34}
35
36public class Main {
37 public static void main(String[] args) {
38 Person person1 = new Person("Alice");
39 Person person2 = new Person("Bob");
40 Person person3 = new Person("Charlie");
41
42 Company company = new Company("ABC Corp");
43 company.hireEmployee(person1);
44 company.hireEmployee(person2);
45 company.hireEmployee(person3);
46
47 company.printEmployees();
48 }
49}xxxxxxxxxx}class Person { private String name; public Person(String name) { this.name = name; } public String getName() { return name; }}class Company { private String name; private List<Person> employees; public Company(String name) { this.name = name; this.employees = new ArrayList<>(); } public void hireEmployee(Person person) { employees.add(person); } public void printEmployees() { for (Person employee : employees) {


