凝集度は高いですか?
設計品質としての「高凝集・疎結合」を意識することで、保守しやすいプログラムになります。
「凝集度」は「モジュール強度」とも呼ばれています。
■良い設計品質
「ひとつのモジュール(関数やファイル)は、単一目的であること」です。
凝集度は高い⇔低いという尺度で論じられ、書籍などでは7段階での解説をよく見かけます。
下の図にある通り、1.機能的、2.逐次的、3.通信的、4.手順的、5.一次的、6.論理的、7.偶発的、というような7段階です。(書籍により、言い回しがとこなります)
重要なのは、7段階のレベルを覚えることではなく、凝集度の本質を理解することです。
「ひとつのデータでの機能の集まり」が凝集度が高く、「複数のデータがひとつのモジュールに入っている」のは凝集度が低い、という構図です。(前回コラムの「リファクタリング」ともつながります。リファクタリングすることで凝集度が高まります)
低い凝集度の典型例は、
4.手順的
例えば、ひとつのモジュール内にセンサーからの入力値とアクチュエータへの出力値が存在している場合です。「一筆書き」とも呼んでいます。
5.一時的
あるタイミングでの処理を、ひとつのモジュール内部で行うと凝集度は低くなります。
例えば、初期化モジュール、が典型例です。初期化モジュールで、センサーを初期化して、状態変数を初期化して、アクチュエータを初期化して・・・、と列挙すると、凝集度が低くなります。「筐体のカバーが空いた」というイベントに対処するモジュールも同様です。もセンサーを止めて、状態変数を止めて、・・・。「調停モジュール」なんていう名称になると、ほぼそれは「一時的凝集度」と言えるでしょう。何をしているか分からないモジュールになってしまいます。
「凝集度」を知らずに、良い設計はできないでしょう。
周りのメンバーが誰も知らなかった、というプロジェクトは、ほぼ混とんとしているのではないでしょうか。
この投稿へのトラックバック
トラックバックはありません。
- トラックバック URL
この投稿へのコメント