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