The Stable Dependencies Principle (SDP) - OO設計のSDP安定依存原則
2008/06/24 22:42Update
パッケージ間の依存は安定する方向に依存すべきである。パッケージは自分より安定したパッケージを依存すべきである。
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。英語」
本文は“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。英語」
Sponsored Link
- Relative Articles
- Single Responsibility Principle (SRP) - OO設計のSRP単一責任原則 - (2008/06/08 01:34)
- Interface Segregation Principle (ISP) - OO設計のISPインターフェイス分離原則 - (2008/06/08 22:18)
- Liskov Substitution Principle (LSP) - OO設計のLSP リスコフ置換原則 - (2008/06/09 13:18)
- Dependency Inversion Principle (DIP) - OO設計のDIP依存逆転原則 - (2008/06/09 14:56)
- The Acyclic Dependencies Principle (ADP) - OO設計のADP非循環依存原則 - (2008/06/09 17:33)
- The Stable Abstractions Principle (SAP) - OO設計のSAP安定度・抽象度等価原則 - (2008/06/09 17:48)
- The Common Closure Principle (CCP) - OO設計のCCP閉鎖性共通原則 - (2008/06/09 18:04)
- Release Reuse Equivalency Principle (REP) - OO設計のREP再利用・リリース等価原則 - (2008/06/09 18:15)
- The Common Reuse Principle (CRP) - OO設計のCRP全再利用原則 - (2008/06/09 18:24)
- オブジェクト指向設計の原則 概要 - (2008/07/21 22:03)