GRASPパターン(General Responsibility Assignment Software Patterns)は、オブジェクトへの責務割り当てに関する基本原則をパターンの形式で記述したもの
パターン | 説明 |
---|---|
Expertパターン | 必要な情報を保持しているクラスに責務を割り当てる |
Creatorパターン | インスタンス生成の責務を割り当てる |
High Cohesion | 高凝縮性パターン。意味的に関係の深い機能を一つのオブジェクトに凝縮させるように責務を割り当てる |
Low Coupling | 疎結合性パターン。オブジェクト同士の結合度が低くなるように責務を割り当てる |
Controllerパターン | イベント発生時の責務を割り当てる |
Indirection | 間接化パターン。クラス同士を直接結びつけずに、間接クラスを定義する |
Polymorphism | 多態性パターン。異なる振る舞いを行う同じ操作を定義する |
Pure Fabrication | 純粋架空物パターン。人工的なクラスを生成し、責務を割り当てる |
Variation Protected | バリエーション防御パターン。将来予想されるバリエーションの増加を予想しておく |
Expertパターン
責務の遂行に必要な情報を持っているクラス、すなわち情報エキスパートに責務を割り当てる。
- 合計金額を計算するのは、販売クラスの責務で、小計の計算は販売明細クラスが行う
つまり販売明細クラスが計算した小計を、販売クラスがまとめるようにする。オブジェクトがタスクの遂行のために自分自身の情報を使うため、カプセル化が維持される。これにより、頑健で保守しやすいシステムに繋がる疎結合性を支援する。
必要な情報を持っている複数のクラスに振る舞いが分散されるため、より凝集度が強く、「ライトウエィト」なクラス定義が促進する。このようなクラスは理解しやすく、保守も容易となり、高凝集性を支援する。