Java アグリゲーション vs コンポジション
 
Java では、アグリゲーションとコンポジションは密接に関連する 2つの概念です。 Composition はクラス間の密接な関連付けですが、集約は弱い関連付けです。
Java での合成
コンポジションとは、基本クラス オブジェクトが別の派生クラス オブジェクトを所有し、派生クラス オブジェクトが基本クラスなしでは存在できない場合です。
たとえば、Human を作成すると、いくつかのサブクラスがあります: 手、脚、心臓です。 人間 オブジェクトが死ぬと、そのすべてのサブパーツは意味のある存在を失います。
Java での集計
集約とは、基本クラス オブジェクトとその派生クラス オブジェクトが独立して存在できる場合です。 たとえば、Player 基底クラスを作成し、そこから Team クラスを派生させた場合、Player オブジェクトが破棄されてもチームは存続します。
同様に、Team が解散した場合、Player は存続し、別のチームに参加できます。
構成と集計
| 構成 | 集計 | 
|---|---|
| PART-OF関係または特別なHAS A関係 | HAS A関係 | 
| 一方向の依存関係 | 双方向の依存関係 | 
| 関連の強いタイプ | 弱いタイプの関連付け | 
| 子は親クラスに依存しています | 子は親クラスに依存しない | 
| UML ダイアグラム表現は黒いひし形です | UML ダイアグラム表現は白いひし形です | 
Java でコンポジションを操作する
import java.io.*;
import java.util.*;
class Job {
  private int pay;
  private int id;
  public int getWage() {
    return pay;
  }
  public void setWage(int pay) {
    this.pay = pay;
  }
  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
}
class Person {
  private Job job;
  public Person() {
    this.job = new Job();
    job.setWage(650);
  }
  public int getWage() {
    return job.getWage();
  }
}
class Main {
  public static void main(String[] args) {
    Person person = new Person();
    int salary = person.getWage();
    System.out.println("The wage of the person for a job: " + salary);
  }
}
出力:
The wage of the person for a job: 650
上記のコードは、2つのクラス間の構成の関係を表示します。 コンポジションは、part-of タイプの関係として分類されます。 上記の場合、wage は job の一部です。
両方のクラスに対して、パラメーター化されたコンストラクター、セッター、およびゲッター関数を定義しました。
Java で集計を操作する
import java.io.*;
import java.util.*;
class Bank {
  private String BankName;
  Bank(String name) {
    BankName = name;
  }
  public String getBankName() {
    return BankName;
  }
}
class Employee {
  private String EmployeeName;
  Employee(String name) {
    EmployeeName = name;
  }
  public String getEmployeeName() {
    return EmployeeName;
  }
}
class Main {
  public static void main(String[] args) {
    Bank bank = new Bank("IMF");
    Employee emp = new Employee("Rob");
    System.out.println(emp.getEmployeeName() + " is an employee of the " + bank.getBankName());
  }
}
出力:
Rob is an employee of the IMF
上記のコードは、2つのクラス間の集計の関係を表示します。 集約は、has-a タイプの関係として分類されます。 上記の場合、bank には Rob という名前の従業員がいます。
両方のクラスに対して、パラメーター化されたコンストラクター、セッター、およびゲッター関数を定義しました。
Musfirah is a student of computer science from the best university in Pakistan. She has a knack for programming and everything related. She is a tech geek who loves to help people as much as possible.
LinkedIn