オブジェクト指向設計


The Stable Dependencies Principle (SDP) - OO設計のSDP安定依存原則

2008/06/24 22:42Update
TAGS: SDP | 安定依存原則 | OOD | オブジェクト指向設計

パッケージ間の依存は安定する方向に依存すべきである。パッケージは自分より安定したパッケージを依存すべきである。

Robert C. Martin氏による有名なオブジェクト指向設計(OOD)の原則“Principles of OOD”があります。

本文は“Principles of OOD”のパッケージの設計原則である安定依存原則:The Stable Dependencies Principle (SDP)について学びます。

SDP安定依存原則は、パッケージ同士の依存方向どちらに依存すべきかを判定する原則です。

概要


The dependencies between packages in a design should be in the direction of the stability of the packages. A package should only depend upon packages that are more stable that it is.
パッケージ間の依存は安定する方向に依存すべきである。パッケージは自分より安定したパッケージを依存すべきである。

Depend in the direction of stability.
安定する方向に依存する

◇ パッケージの依存
パッケージAのクラスはパッケージBのクラスを利用した場合、パッケージAはパッケージBを依存していると言います。

◇ 安定依存原則
「安定」とは、「変化」しないことです。ソフトウェアの「安定したパッケージ」とは、変化しない、または変化する必要がないパッケージのことです。分かりやすい概念ですが、「変化しない」というものそもそも世の中に存在しないでしょう。
では、安定したパッケージとは何ですか?

安定したパッケージは
◇ 自身が依存するパッケージがないこと。即ち、独立していること。
◇ ほかの複数のパッケージから依存されていること。即ち、責任を負っていること。

その通りです、自分を依存する外部パッケージが多ければ多いほど(責任が大きい)、依存される側のパッケージの安定度は高いと考えられます。

不安定なパッケージは
◇ 自身がほかの複数のパッケージに依存していること。即ち、独立していないこと。
◇ 自身に依存している外部パッケージがないこと。即ち、責任を負っていないこと。

パッケージの不安定度は次のフォーミュラから計算できます。
I=Ce/(Ce+Ca)

凡例:
Ce: Efferent Coupling。自身が依存している外部パッケージの数(outgoing dependencies)。
Ca: Afferent Coupling。自身に依存している外部パッケージの数(incoming dependencies)。
I: Instability。不安定度。I∈[0, 1]。

Ce=0(自身が依存している外部パッケージの数がない)の場合、不安定度Iは0になり、最も安定したパッケージであることを表しています。
Ca=0(自身に依存している外部パッケージの数がない)の場合、不安定度Iは1になり、最も不安定なパッケージであることを表しています。

SDP安定依存原則は、パッケージ自身の不安定度Iは、自身が依存するパッケージの不安定度Iより大きいことを求めています。“Depend upon packages whose I metric is lower than yours.”

例:
AはBに依存する場合、
I(A) > I(B)
BはAより安定していることを求めます。

そうでないと、AはBに依存すべきではないことを示しています。

参考資料


Granularity by Robert C. Martin。「PDF。英語」
Principles and Patterns by Robert C. Martin。「PDF。英語」

有关作者
Syboos.jp編集長AJavaやオープンソース情報の執筆、Webサイトの開発や運営全般の業務に携わる。

Sponsored Link


Comments