高凝集
| 説明 | ひとつのモジュールは単一目的であること。 モジュールには粒度があり,関数/ファイル/コンポーネントという粒度があります。 凝集度の尺度は,粒度には関係なく,内部が同一目的(同一カテゴリ)であるかどうかです。 内部の変数で判断できます関数内やファイル内で読み書きしている変数が同種であること。 ファイルの場合は、フィールド変数(クラスの場合は属性)を列挙して、 それが単一目的であれば凝集度が高い、と言えます。 コンポーネントはファイル集合なので,ファイル名が同一カテゴリであれば凝集度は高いです。 凝集度を高めるにはデータフロー分析してみる開発の初期段階で,内部の重要な変数を見つけることができます。 リファクタリングしてみる変数を中心に関数を集める部品化リファクタリングが有効です。 同一目的の変数を集めて,一つのファイルにして,その変数を使っている関数を集める方法です。 関数内部は変更せずに丸ごと移動します。 関数単位のリファクタリングも、変数に着目して,複数のファイルに分割するのですが,デグレードの危険性が伴います。 ファイル単位の凝集度が高くなれば,同じカテゴリのファイルをコンポーネントとすることも容易になります。
変数はファイル内カプセル化変数は非公開とします。 getter/setter/query は使わない。 c言語の場合は変数をstatic宣言して,外部に公開しないことが原則です。
部品化とはヘッダファイルと実装ファイルをペアにして,同じ名称をつけることです。 クラスと同じ粒度になり,最小の管理単位になります。
|
|---|---|
| ポイント |
高凝集同種のデータに対して機能を持つモジュールは凝集度が高くなります。 低凝集異種のデータが混ざっているモジュールは凝集度が低くなります。 典型的な低い凝集度は、 ・入力値と出力値が同居している一筆書きモジュール ・センサー/アクチュエータや動作モードを初期化している初期化モジュール ・コマンド種別により、複数の変数を変更しているディスパッチモジュール データ(変数や制御値)を同種に括り直して、ひとつのモジュールにしましょう。 |
| 備考 | お勧めセミナー凝集度と結合度ソースコードの例で凝集度と結合度を知ることができます。 構造化モデリング静的データフロー分析することで凝集度の高いモジュールを作ることができます。 |
