モジュール、凝集度、結合度

モジュール

ソフトウェアは複雑だ。すぐ人間に管理できなくなる。 言い換えると、仕様変更があったとき、どこを変更すればいいのか、すぐわからなくなる。 そうならないために、プログラムを分割して複雑さを低く保つという考えがある。分割したひとつひとつをモジュールと呼ぶ。どういうふうにモジュールを区切ればいいかの指標として、結合度と凝集度という考え方がある。

凝集度

モジュール内の要素がすくないほど複雑度は減る。とはいえ、ひたすら細かく別モジュールに分けるべきではない。管理の手間がむしろ増える。関わりの強い要素をうまくひとつのモジュールとして切り出すべきだ。モジュール内の要素の関わりの強さを凝集度と呼ぶ。 じつは、すべての入出力操作をひとつにまとめたモジュールというのは、凝集度が低い。論理的な関係よりも、機能の関連度で評価するべきだからだ。そういう意味で、オブジェクト指向の多くのクラスは凝集度が低い。各メソッドで凝集度を高くなるように意識すべきだ。 ひとつの機能を実行するためにすべての命令が関連しているモジュールは、凝集度が高い。たとえば、秒速を時速に変換するメソッドだ。

結合度

モジュール内の変更が他のモジュールに影響を及ぼさないように注意すべきだ。他のモジュールへの影響しやすさのことを結合度と呼ぶ。結合度は低いほうが良い。 たとえば、あるモジュールが他のモジュールの内部を直接参照する実装は結合度が高く、避けるべきだ。 結合度が低い(=良い)状態とは、入力データと出力データをやり取りする形でモジュールが結合しているという状態だ。モジュール内を変更しても、入出力形式が同じなら、ほかのモジュールへの影響はない。