0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

集約とコンポジション

Posted at

はじめに

・集約とコンポジションの違いがよくわからなかったので自分なりに調べて、コードを実装し試してみた

集約

ChatGPTの回答

・集約は、「部分と全体」の関係を表現します。つまり、オブジェクト間の関係が「has-a」の形を取ります。
・集約では、部分オブジェクトがそのまま独立して存在できます。つまり、全体オブジェクトが破棄されても、部分オブジェクトは依然として存在し得ます。

実装例

sample.java
public static void main(String[] args) {
	Tire tire = new Tire();
	Engine engine = new Engine();

	Car car = new Car(tire, engine);

	car = null;

	// carがnullになってもTireクラスとEngineクラスは生きている
	System.out.println(tire);
	System.out.println(engine);
}

class Car {
	private Tire tire;
	private Engine engine;

	public Car(Tire tire, Engine engine) {
		this.tire = tire;
		this.engine = engine;
	}

	// 省略
}

class Tire {
	public void haveTire(string kind) {
		System.out.println("4 Tires")
	}
}

class Engine {
	public void start() {
		System.out.println("Engine Start")
	}
}

全体オブジェクトであるCarクラスを破棄しても、TireクラスやEngineクラスは別でインスタンスを作っているため存在している

コンポジション

ChatGPTの回答

・コンポジションもまた、「部分と全体」の関係を表現しますが、より強い関連性を持ちます。つまり、オブジェクト間の関係が「contains-a」の形を取ります。
・コンポジションでは、部分オブジェクトは全体オブジェクトに依存しており、全体オブジェクトが破棄されると部分オブジェクトも同時に破棄されます。

sample.java
public static void main(String[] args) {
	Car car = new Car();

	car = null;

	// carがnullになってたらTireクラスとEngineクラスは無くなっている
}

class Car {
	private Tire tire;
	private Engine engine;

	public Car() {
		this.tire = new Tire();
		this.engine = new Engine();
	}

	// 省略
}

class Tire {
	public void haveTire(string kind) {
		System.out.println("4 Tires")
	}
}

class Engine {
	public void start() {
		System.out.println("Engine Start")
	}
}

集約とコンポジションの違い

CarクラスがEngineクラスとTireクラスを使っているのは同じ
使っているCarクラスでnullとかになった場合、使われているTireクラスやEngineクラスで生きているかどうかで集約かコンポジションになる

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?