Якщо клас має посилання на сутність, це називається агрегацією. Агрегація представляє відношення HAS-A.
Розглянемо ситуацію: об’єкт Employee містить багато інформації, такої як ідентифікатор, ім’я, ідентифікатор електронної пошти тощо. Він містить ще один об’єкт під назвою адреса, який містить власну інформацію, таку як місто, штат, країна, поштовий індекс тощо, як зазначено нижче.
class Employee{ int id; String name; Address address;//Address is a class ... }
У такому випадку працівник має довідкову адресу сутності, тому зв’язок є адресою працівника HAS-A.
Навіщо використовувати агрегацію?
- Для повторного використання коду.
Простий приклад агрегації
У цьому прикладі ми створили посилання на клас Operation у класі Circle.
class Operation{ int square(int n){ return n*n; } } class Circle{ Operation op;//aggregation double pi=3.14; double area(int radius){ op=new Operation(); int rsquare=op.square(radius);//code reusability (i.e. delegates the method call). return pi*rsquare; } public static void main(String args[]){ Circle c=new Circle(); double result=c.area(5); System.out.println(result); } }Перевірте зараз
Output:78.5
Коли використовувати агрегацію?
- Повторне використання коду також найкраще досягається за допомогою агрегації, коли немає зв’язку є-а.
- Спадкування слід використовувати тільки в тому випадку, якщо зв'язок is-a зберігається протягом усього життя залучених об'єктів; в іншому випадку найкращим вибором є агрегація.
Розуміння значущого прикладу агрегації
У цьому прикладі Employee має об’єкт Address, об’єкт address містить власну інформацію, таку як місто, штат, країна тощо. У такому випадку зв’язок – Employee HAS-A address.
Адреса.java
public class Address { String city,state,country; public Address(String city, String state, String country) { this.city = city; this.state = state; this.country = country; } }
Emp.java
public class Emp { int id; String name; Address address; public Emp(int id, String name,Address address) { this.id = id; this.name = name; this.address=address; } void display(){ System.out.println(id+' '+name); System.out.println(address.city+' '+address.state+' '+address.country); } public static void main(String[] args) { Address address1=new Address('gzb','UP','india'); Address address2=new Address('gno','UP','india'); Emp e=new Emp(111,'varun',address1); Emp e2=new Emp(112,'arun',address2); e.display(); e2.display(); } }Перевірте зараз
Output:111 varun gzb UP india 112 arun gno UP indiaзавантажити цей приклад