UMLでの依存と集約の違い
UML(Unified Modeling Language)における依存(Dependency)と集約(Aggregation)の違いを説明します。
依存(Dependency)
依存とは
依存は、2つの要素間の関係を表すUMLの関係の一つです。ある要素が他の要素に依存しているときに使用されます。依存は一方的な関係であり、依存する要素が変更された場合、依存される要素にも影響を及ぼす可能性があります。依存関係は、通常、1つの要素が別の要素を使用する場合や、ある要素が別の要素にメッセージを送信する場合に使用されます。
例えば、クラスAがクラスBを使用している場合、クラスAはクラスBに依存しています。この依存関係は、クラスAがクラスBのメソッドを呼び出したり、クラスBのオブジェクトを作成したりする場合に現れるでしょう。
依存のサンプル
// 依存の例
public class ClassA
{
public void MethodA()
{
Console.WriteLine("Method A");
}
}
public class ClassB
{
private ClassA classA;
public ClassB(ClassA a)
{
classA = a;
}
public void MethodB()
{
Console.WriteLine("Method B");
classA.MethodA(); // ClassAに依存している
}
}
public class Program
{
public static void Main(string[] args)
{
ClassA a = new ClassA();
ClassB b = new ClassB(a);
b.MethodB();
}
}
上記のコードでは、ClassBがClassAに依存しています。ClassBのインスタンスを作成する際に、ClassAのインスタンスを引数として渡しています。そして、ClassBのMethodB
メソッド内で、ClassAのMethodA
メソッドを呼び出しています
例えば、車とエンジンの関係を考えてみましょう。車はエンジンを持っており、エンジンは車に搭載されています。この場合、車はエンジンを含んでいると言えます。車が破壊されてもエンジンはまだ存在し続けることができます。
集約
集約とは
集約(Aggregation):は、クラスやオブジェクト間の関係を表すUMLの関係の一つです。集約は、パートと全体の関係を表現します。つまり、一つのオブジェクト(全体)が他のオブジェクト(パート)を含んでいることを示します。集約の特徴は、パートと全体が独立して存在することです。パートは全体から分離して存在できますが、パートが破棄されても全体は存在し続けます。
集約のサンプル
集約は通常、コンポジション(Composition)とも呼ばれ、強い関連性を示す場合に使用されます。つまり、パートと全体のライフサイクルが密接に結びついており、全体が破棄された場合にはパートも破棄されることが想定されます。
// 集約の例
public class Engine
{
public void Start()
{
Console.WriteLine("Engine started");
}
}
public class Car
{
private Engine engine;
public Car()
{
engine = new Engine(); // Engineを集約している
}
public void StartCar()
{
Console.WriteLine("Car started");
engine.Start(); // Engineを集約している
}
}
public class Program
{
public static void Main(string[] args)
{
Car car = new Car();
car.StartCar();
}
}
上記のコードでは、CarがEngineを集約しています。Carのインスタンスを作成するときに、Carのコンストラクタ内でEngineのインスタンスを作成しています。そして、CarのStartCar
メソッド内で、EngineのStart
メソッドを呼び出しています。
これらの例は、依存と集約の基本的な概念を示しています。ただし、実際のプログラムでは、依存性注入(Dependency Injection)やデザインパターンなどの考慮が必要な場合があります
まとめ
以上が依存(Dependency)と集約(Aggregation)の違いです。依存は一方的な関係であり、要素間の関連性を示します。一方、集約はパートと全体の関係を示し、パートが全体から独立して存在できる関係です。
ディスカッション
コメント一覧
まだ、コメントがありません