集約ー分解の関係とは、全体(上位クラス)が部分(下位クラス)で構成される「has-a」(〜を持っている)という関係を指し、オブジェクト指向設計における重要な概念で、「部分は全体の一部である (is-part-of)」という関係性(例:コンピュータはCPUやメモリで構成される)で表現され、コードの再利用性や保守性を高めるために、複雑なクラスをより単純なクラスに分解(集約)する手法です。

画像参照:https://www.momoyama-usagi.com/entry/info-software06
集約
- 概念: 関連する複数のオブジェクトを一つのまとまり(集約ルート)として管理する手法。
- 特徴: 全体と部分の関係(例:
コンピュータはCPUとメモリを「持っている」)で、has-a関係とも呼ばれます。 - 目的: ビジネスルールとデータの整合性を維持し、複雑なシステムを管理しやすくする。
分解
- 概念: 集約とは逆に、一つの大きなクラスや機能を、より小さな、管理しやすい複数のクラスや機能に分割する(集約の逆)こと。
- 特徴: 繰り返される部分を別のクラスに切り出すことで、コードの重複を防ぎ、凝集度を高め、結合度を下げる(疎結合化)効果がある。
具体例
- 集約:
自動車クラスがエンジンクラスやタイヤクラスのインスタンスをメンバー変数として持つ(自動車はエンジンを持っている)。 - 分解:
注文管理システムという大きなクラスを、注文、顧客、商品といった小さなクラスに分解する。
is-a関係(継承)との違い
- 集約/分解(has-a): 部分と全体の関係(例:
車はタイヤを持つ)。 - 汎化/特化(is-a): 継承関係(例:
犬は動物の一種である)。
これらの関係を適切に設計することで、効率的で保守性の高いオブジェクト指向システムを構築できます。

コメント