凝集度は高いですか?

設計品質としての「高凝集・疎結合」を意識することで、保守しやすいプログラムになります。

「凝集度」は「モジュール強度」とも呼ばれています。

■良い設計品質

「ひとつのモジュール(関数やファイル)は、単一目的であること」です。

 

凝集度は高い⇔低いという尺度で論じられ、書籍などでは7段階での解説をよく見かけます。

下の図にある通り、1.機能的、2.逐次的、3.通信的、4.手順的、5.一次的、6.論理的、7.偶発的、というような7段階です。(書籍により、言い回しがとこなります)

重要なのは、7段階のレベルを覚えることではなく、凝集度の本質を理解することです。

「ひとつのデータでの機能の集まり」が凝集度が高く、「複数のデータがひとつのモジュールに入っている」のは凝集度が低い、という構図です。(前回コラムの「リファクタリング」ともつながります。リファクタリングすることで凝集度が高まります)

低い凝集度の典型例は、

4.手順的

 例えば、ひとつのモジュール内にセンサーからの入力値とアクチュエータへの出力値が存在している場合です。「一筆書き」とも呼んでいます。

5.一時的

 あるタイミングでの処理を、ひとつのモジュール内部で行うと凝集度は低くなります。

例えば、初期化モジュール、が典型例です。初期化モジュールで、センサーを初期化して、状態変数を初期化して、アクチュエータを初期化して・・・、と列挙すると、凝集度が低くなります。「筐体のカバーが空いた」というイベントに対処するモジュールも同様です。もセンサーを止めて、状態変数を止めて、・・・。「調停モジュール」なんていう名称になると、ほぼそれは「一時的凝集度」と言えるでしょう。何をしているか分からないモジュールになってしまいます。

 

「凝集度」を知らずに、良い設計はできないでしょう。

周りのメンバーが誰も知らなかった、というプロジェクトは、ほぼ混とんとしているのではないでしょうか。

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

スパム対策のため計算式を埋めてください *

スパム対策上、日本語が含まれない投稿は無視されます。

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL