Skip to main content

Section 8.5 システムの分割

システムにおいても、集合と同様に、分割を定義することを考える。 「相互に関連する」というシステムの定義より、そのままでは分割できないことは明らかである。 もしシステムの中に分割可能な部分が存在すれば、その部分はシステムの他の部分と関連していないため、システムの定義に反している。

Simonは、システム内部の要素間の関連性には強弱があり、互いに強い関連性をもつ部分と、互いに弱い関連性しかもたない部分があることに着目した[55]。 システムSi=(Vi,Ei)(i=1,,n)について、S=S1Snとなるとき、「互いに弱い関連性しかもたない」とは、任意のi,j(=1,,n)についてSiSj(,)が成り立つことである。 SimonはこうしたシステムS準分解可能(nearly decomposable)だといい、S1,,SnS部分システム(subsystem)と呼んだ。 準分解可能なシステムでは、システムを複数の部分システムに分解しても、失われる創発性は無視できるほど小さいものとみなせる。

定義 8.19. システムの準分解.
システムS=(V,E)の隣接行列をE={eij}と定義する。 ここでeijは、関係(vi,vj)の強さを表す非負の実数である。 あるしきい値τをとり、「eijτならeij=0」とみなすことでSS1,,Snに分割できるとする。 このとき、システムSはしきい値τS1,,Sn準分解可能(nearly decomposable)だといい、S=S1Snと表す。 また、S1,,SnS部分システム(subsystem)といい、SiSと表す。

システムの準分解を示した模式図を、図8.20と図8.21に示す。 元のシステム(図8.20)の関係のうち、しきい値以下の強さの関係を無視して準分解したものが図8.21である。 準分解の際に無視した関係は、図8.21では点線で表している。

8.20. 元のシステム
8.21. システムの準分解

システムの準分解の例には、大きく複雑な作業をより小さな作業に分割したWBS(Work Breakdown Structure)や、異なる機能を持つ複数の部門からなる組織の組織図にあたるOBS(Organization Breakdown Structure)などがある。 図8.22にOBSの例として、企業の組織図の例を示す。 WBSやOBSの作成時には、作業の見落としや組織の重複が生じないよう、MECEな分割を行うことが重要である。

8.22. OBSの例(企業の組織図の例)
注釈 8.23. オブジェクト指向.

プログラミングパラダイムの1つであるオブジェクト指向プログラミング(Object-Oriented Programming)は、JavaやPythonなど、現在使われている多くのプログラミング言語で採用されている。 オブジェクト指向では、データや処理からなるオブジェクト(object)をプログラムの基本単位として、オブジェクト間のメッセージング(messaging)により処理を実装する[74]

プログラムでは、基本となる部分をモジュール(module)と呼ぶ。 プログラムの設計にあたっては、プログラムの各部分を、目的により適切なモジュールに準分解することが必要であり、これを関心の分離(separation of concerns)という[75]。 関心の分離に基づく設計を行うことで、各モジュールの機能やモジュール間の依存関係が明確になり、プログラムの保守性が高まるとされる。 プログラムの準分解に用いる仕組みはプログラミング言語毎に異なるが、関数(function)、クラス(class)、ライブラリ(library)、パッケージ(package)などの名称で呼ばれることが多い。

作成されたプログラムにおいて適切な関心の分離が行われたかを判断する基準には、凝集度と結合度がある。 凝集度(cohesion)はモジュール内の関係性の強さ結合度(coupling)はモジュール間の関係性の強さを表す。 凝集度が高く結合度が低いと、関心の分離に基づく実装がなされていると考えられる。