COLUMN

第3回【IT技術系コラム】オブジェクト指向設計原則-(2)パッケージ凝縮度に関する原則

オブジェクト指向設計原則-(2)パッケージ凝縮度に関する原則

今回は、パッケージ凝集度(どのような考え方に基づいてパッケージ(クラスの集合)を整理し、まとめるべきか)について取り上げたいと思います。

前回同様、Robert C. Martin氏が設立したObject Mentor社(http://www.objectmentor.com/)において、これらのアイデアの原文が公開されていますので、ご興味のある方はご一読ください。 (Resources→Published Articlesページ
また、書籍(翻訳和書)として下記が出版されており、まとめられています。

今回はこのうち、「パッケージ凝縮度に関する原則」を取り上げます。

  1. 5つのクラス設計に関する原則(略)
  2. 3つのパッケージ凝縮度に関する原則
    1. 再利用・リリース等価の原則(REP:The Reuse/Release Equivalence Principle)
    2. 閉鎖性共通の原則(CCP:The Common Closure Principle)
    3. 全再利用の原則(CRP:The Common Reuse Principle)
  3. 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つの「パッケージ凝集度に関する原則」を取り上げました。
次回は、「パッケージ結合度に関する原則」について取り上げたいと思います。

 

 

プライマル株式会社|コンサルティング事業部


Warning: include(/home/1806248425/primal-inc-com/public_html/common/inc/main_inquiry.html) [function.include]: failed to open stream: No such file or directory in /home/1806248425/primal-inc-com/public_html/column/entry/article000085.php on line 171

Warning: include(/home/1806248425/primal-inc-com/public_html/common/inc/main_inquiry.html) [function.include]: failed to open stream: No such file or directory in /home/1806248425/primal-inc-com/public_html/column/entry/article000085.php on line 171

Warning: include() [function.include]: Failed opening '/home/1806248425/primal-inc-com/public_html/common/inc/main_inquiry.html' for inclusion (include_path='.:/usr/share/pear:/usr/share/php') in /home/1806248425/primal-inc-com/public_html/column/entry/article000085.php on line 171