ソフトウェアアーキテクチャ博物館 AtMuseum 

解法パターン解説


高凝集

説明

ひとつのモジュールは単一目的であること。

モジュールには粒度があり,関数/ファイル/コンポーネントという粒度があります。

凝集度の尺度は,粒度には関係なく,内部が同一目的(同一カテゴリ)であるかどうかです。

内部の変数で判断できます

関数内やファイル内で読み書きしている変数が同種であること。

ファイルの場合は、フィールド変数(クラスの場合は属性)を列挙して、

それが単一目的であれば凝集度が高い、と言えます。

コンポーネントはファイル集合なので,ファイル名が同一カテゴリであれば凝集度は高いです。

凝集度を高めるには

データフロー分析してみる

開発の初期段階で,内部の重要な変数を見つけることができます。

リファクタリングしてみる

変数を中心に関数を集める部品化リファクタリングが有効です。

同一目的の変数を集めて,一つのファイルにして,その変数を使っている関数を集める方法です。

関数内部は変更せずに丸ごと移動します。

関数単位のリファクタリングも、変数に着目して,複数のファイルに分割するのですが,デグレードの危険性が伴います。

ファイル単位の凝集度が高くなれば,同じカテゴリのファイルをコンポーネントとすることも容易になります。

 

変数はファイル内カプセル化

変数は非公開とします。

getter/setter/query は使わない。

c言語の場合は変数をstatic宣言して,外部に公開しないことが原則です。

 

部品化とは

ヘッダファイルと実装ファイルをペアにして,同じ名称をつけることです。

クラスと同じ粒度になり,最小の管理単位になります。

 

ポイント

高凝集

同種のデータに対して機能を持つモジュールは凝集度が高くなります。

低凝集

異種のデータが混ざっているモジュールは凝集度が低くなります。

典型的な低い凝集度は、

・入力値と出力値が同居している一筆書きモジュール

・センサー/アクチュエータや動作モードを初期化している初期化モジュール

・コマンド種別により、複数の変数を変更しているディスパッチモジュール

データ(変数や制御値)を同種に括り直して、ひとつのモジュールにしましょう。

備考

お勧めセミナー

凝集度と結合度

ソースコードの例で凝集度と結合度を知ることができます。

構造化モデリング静的

データフロー分析することで凝集度の高いモジュールを作ることができます。