-
Notifications
You must be signed in to change notification settings - Fork 0
DNET_GRASP
- Craig Larmanが著書「実践UML」で示した。
- オブジェクト指向設計において用いられる、
- クラスやオブジェクトに責務を割り当てる方針を導くパターンや原則
必要な情報を全て持っているクラスに責務を割り当てるべきとする。
- A を密接に使用するクラス B がクラス A の作成に責任を持つべき。
- Factoryオブジェクトを作ってオブジェクトの作成を行わせることで目的を達する。
-
システム全体や、ユースケース・シナリオを表現する
(、UIでない)、クラスにシステムイベントを扱う責務を割り当てる。 -
UI層以上にあって、システムに対する
操作を受け取り調整する(制御する)最初のオブジェクト。
以下を実現するための責務の割り当て方法を決定付けるための尺度である。
- クラス間の依存を小さくする
- 他のクラスの変更の影響を小さくする
- 再利用の可能性を高める
オブジェクトが適切に責務を集中させ、管理・理解が可能な状態を保つための尺度。
-
高凝集性とは、
- ある要素の責務が強く関連しており、またその要素に集中していることを意味する。
- モジュール設計自体はシステムの凝集性を高める活動の例と言える。
-
低凝集性とは、
- 関連のない責務を持ちすぎている場合である。
- 理解が難しく、再利用・維持管理が困難で、変更も行いづらい。
-
ポリモルフィックな操作を持たせることで実現できる。
-
ポリモルフィックな操作は以下で実現できる。
-
アドホック多相(Ad hoc polymorphism)
≒オーバーロード
-
パラメータ多相(Parametric polymorphism)
≒テンプレート・ライブラリや、ジェネリックなど。
-
部分型付け(Subtyping)
部分型多相(subtype polymorphism)
包含多相(inclusion polymorphism)オブジェクト指向言語のポリモーフィズム。
-
-
問題領域に登場する概念を表すクラスではなく、
疎結合や、高凝集性、それらから得られる再利用可能性を
実現するために作られるクラス(情報エキスパートで実現できない場合)。 -
ドメイン駆動設計ではサービスと呼ばれる。
明確な定義が見つからなかったが以下のように書かれている。-
リポジトリ → データ源の切り替え、
ファクトリー → 処理の切り替え、
サービス → その他諸々をぶち込む。 -
完全に振る舞いそのものであり、
無理やりオブジェクトにしたもの。
-
-
二つの要素の中間にオブジェクトを設け
両者の仲介を行う責務を割り当てることで、
二つの要素間の疎結合性(および再利用の可能性)を促進する。 -
Model View Controllerにおいて
- コントローラが
- データ(モデル)と
- 表現(ビュー)の
仲介を行うのはその一例。
-
周辺の要素(オブジェクト、システム、サブシステム)の
- 変動から注目する要素を保護するために、
- 不安定な部分をインタフェースを用いて収束させ、
- ポリモーフィズムを用いてインターフェイスを実装させる。
↓↓↓
- 安定したインターフェースを作成して、
- 結合オブジェクトの変動から保護する。
-
要するに
大幅な設計変更があっても、
安定したインターフェース部分に
変更が及ばないようにする。
- GRASP - Wikipedia
https://ja.wikipedia.org/wiki/GRASP
正誤
- 「大幅な設計変更が合っても、」→「大幅な設計変更があっても、」
移行メモ
- 元 Wiki では見出しそのものが他ページへのリンクになっていた箇所 (「SOLID」「デザイン・パターン」「IoC」「DI」 「IoC、AOP → DI → 依存性反転原則」)は、GitHub Wiki では 見出しからアンカが生成されるため、見出しをプレーン・テキストとし、 リンクは直下の本文に置いた。
- マイクロソフト系技術情報 Wiki(techinfoofmicrosofttech.osscons.jp)への URL リンクは、移行済みの デザイン・パターン / IoC / DI / IoC、AOP → DI → 依存性反転原則 に張り替えた。
Tags: 移行, GRASP, 実践UML, Craig Larman, 責務割り当て, 凝集度, 結合度, 多態性, オブジェクト指向
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。