クラスにエンティティ参照がある場合、それは集約と呼ばれます。集約は HAS-A 関係を表します。
ある状況を考えてみましょう。Employee オブジェクトには、ID、名前、emailId などの多くの情報が含まれています。これには、次に示すように、市、州、国、郵便番号などの独自の情報を含む、address という名前のオブジェクトがもう 1 つ含まれています。
class Employee{ int id; String name; Address address;//Address is a class ... }
このような場合、Employee はエンティティ参照アドレスを持っているため、関係は Employee HAS-A アドレスになります。
なぜ集約を使用するのでしょうか?
- コードの再利用性のため。
集計の簡単な例
この例では、Circle クラスに Operation クラスの参照を作成しました。
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 関係がない場合には集約によって行うのが最適です。
- 継承は、関連するオブジェクトの存続期間を通じて関係が維持される場合にのみ使用する必要があります。それ以外の場合は、集約が最良の選択です。
意味のある集計例を理解する
この例では、従業員は住所のオブジェクトを持ち、住所オブジェクトには市、州、国などの独自の情報が含まれています。このような場合の関係は、従業員の HAS-A アドレスです。
アドレス.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この例をダウンロードする