第3回【IT技術系コラム】オブジェクト指向設計原則-(2)パッケージ凝縮度に関する原則
オブジェクト指向設計原則-(2)パッケージ凝縮度に関する原則
今回は、パッケージ凝集度(どのような考え方に基づいてパッケージ(クラスの集合)を整理し、まとめるべきか)について取り上げたいと思います。
前回同様、Robert C. Martin氏が設立したObject Mentor社(http://www.objectmentor.com/)において、これらのアイデアの原文が公開されていますので、ご興味のある方はご一読ください。
(Resources→Published
Articlesページ)
また、書籍(翻訳和書)として下記が出版されており、まとめられています。
- 「アジャイルソフトウェア開発の奥義 (単行本) Robert C. Martin (著), 瀬谷 啓介 (翻訳) 」
- 「アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技 (大型本) Robert C. Martin (著), 瀬谷 啓介 (翻訳)」
今回はこのうち、「パッケージ凝縮度に関する原則」を取り上げます。
- 5つのクラス設計に関する原則(略)
- 3つのパッケージ凝縮度に関する原則
- 再利用・リリース等価の原則(REP:The Reuse/Release Equivalence Principle)
- 閉鎖性共通の原則(CCP:The Common Closure Principle)
- 全再利用の原則(CRP:The Common Reuse Principle)
- 3つのパッケージ結合度に関する原則(略)
2.a 再利用・リリース等価の原則(REP)
THE GRANULE OF REUSE IS THE GRANULE OF RELEASE. ONLY COMPONENTS THAT ARE RELEASED THROUGH A TRACKING SYSTEM CAN BE EFFECTIVELY REUSED. THIS GRANULE IS THE PACKAGE.
再利用の単位はリリースの単位である。トラッキングシステムからリリースされたコンポーネントだけが有効に再利用可能である。この(再利用可能な)単位がパッケージである。
再利用の単位はリリースの単位である。トラッキングシステムからリリースされたコンポーネントだけが有効に再利用可能である。この(再利用可能な)単位がパッケージである。
- 設計の分割、パッケージ化のための指針
- パッケージの内部は、再利用する人達の視点に立ち構造化されるべきだとしています。
- そして、再利用の単位(パッケージ)がリリースの単位よりも小さくなることはないとしています。
- つまり、「(ソフトウェアが)リリースされる」ということは、単に開発者がクラスを製作・存在を主張するだけでは不十分であり、トラッキングシステム(CVS,Subversion等のソースコード管理・変更追尾システム)が整備され、ユーザーが潜在的に必要とするサポート等が満たされた状態でなければならない、ということです。
- 後述の閉鎖性共通の原則(CCP),全再利用の原則(CRP)に従って凝集度を決定すべきですが、この際に「再利用の容易性」と「開発の容易性」のバランスを考慮して決定すべきと考えられます。(しかし、筆者自身の経験則からしても、このバランスは安定的なものではなく、非常に不安定・流動的なものであると考えられます。周辺環境の変化に応じて、適切なタイミングで整理が必要なのではないでしょうか。話がそれますが、会計基準についても、同種の整理・統廃合が随時行われています。)
2.b 閉鎖性共通の原則(CCP)
THE CLASSES IN A PACKAGE SHOULD BE CLOSED TOGETHER AGAINST THE SAME KINDS OF CHANGES. A CHANGE THAT AFFECTS A PACKAGE AFFECTS ALL THE CLASSES IN THAT PACKAGE.
パッケージに含まれるクラスは同種の変更に対して閉じているべきである。パッケージに影響する変更はパッケージ内の全てのクラスに影響を及ぼす。
パッケージに含まれるクラスは同種の変更に対して閉じているべきである。パッケージに影響する変更はパッケージ内の全てのクラスに影響を及ぼす。
- 再利用・リリース等価の原則(REP)を具体的に維持するための原則といえます。
- 前回の「単一責任の原則(SRP)」のパッケージ版といえます。パッケージもまた変更の理由を複数持ってはなりません。
- 物理的・概念的に結合度が強く、常に同一タイミングでの変更を必要とするようなクラス群は、同一のパッケージにまとめることが重要です。
2.c 全再利用の原則(CRP)
THE CLASSES IN A PACKAGE ARE REUSED TOGETHER. IF YOU REUSE ONE OF THE CLASSES IN A PACKAGE, YOU REUSE THEM ALL.
パッケージに含まれるクラスは、すべて一緒に再利用される。パッケージに含まれるいずれかのクラスを再利用するということは、その他のクラスすべても再利用することを意味する。
パッケージに含まれるクラスは、すべて一緒に再利用される。パッケージに含まれるいずれかのクラスを再利用するということは、その他のクラスすべても再利用することを意味する。
- 再利用・リリース等価の原則(REP)を具体的に維持するための原則といえます。
- 一緒に使われる可能性の高い(近接度の高い)クラスは同じパッケージに所属させるようにします。
- 逆の視点でもありますが、CRPは、互いに強い関連性を持たない(一緒に使われる可能性が低い、近接度が低い)クラスを同じパッケージに所属させるべきではないことも示唆しています。つまり、この視点によって、パッケージの純度が保たれ、リリースされたパッケージがユーザーによって合理的に再利用できることになります。
- イテレータとコンテナの関連性が例示されています。これらは常に一緒に再利用される、関連性の強いクラス群なので、同一のパッケージに含めるべきです。
今回は、3つの「パッケージ凝集度に関する原則」を取り上げました。
次回は、「パッケージ結合度に関する原則」について取り上げたいと思います。
プライマル株式会社|コンサルティング事業部










































