【プリンシプルオブプログラミング】視点

 

目次

はじめに

この記事は「プリンシプルオブプログラミング」を読んで自分なりにまとめた学習メモです。 

視点 〜プログラマの観る角度〜

6つの視点

  • 凝集度
  • 結合度
  • 直交性
  • 可逆性
  • コードの臭い
  • 技術的負債

 

凝集度

凝集度とは、モジュールに含まれている機能の純粋さを表す尺度。モジュールを「強さ」を測るもの。

  1. 暗合的強度:モジュール内の要素間に、特別の関係が認められない。暗合とは「偶然に物事が一致する」という意味。
  2. 論理的強度:ある機能を抽象的に捉えてまとめたもの。
  3. 時間的強度:特定の時点(時間)に連続して実行する複数の機能を1つのモジュールにまとめたもの。
  4. 手順的強度:問題を処理するために関係している複数個の機能のうちの、いくつかを実行する。
  5. 連絡的強度:基本的に手順的強度の特性を持つ。異なるのは、モジュール内機能間でデータの受け渡し(連絡)をしたり、同じデータを参照する点。
  6. 情報的強度:特定のデータ構造を扱う複数の機能を、1つのモジュールにまとめたもの。
  7. 機能的強度:モジュール内のすべての命令が1つの役割(機能)を実行するために関連しあっているモジュール。 

【意識すべきこと】

高強度モジュールを目指す。

 

結合度

結合度とは、モジュール同士の関係の密接さを表す尺度。ある結合の「太さ」を測るもの。

  1. 内容結合:あるモジュールと他のモジュールが一部を共有するようなモジュールの結合の仕方。
  2. 共通結合:共通域に定義したデータを、いくつかのモジュールが共同使用するような結合形式。
  3. 外部結合:外部宣言したデータを共有したモジュール間の結合形式。
    • 外部宣言した定義:public宣言された変数など。
  4. 制御結合:呼び出し側のモジュールが、呼び出されるモジュールの制御を指示するデータを、パラメータとして渡す結合形式。
  5. スタンプ結合:共通域にないデータ構造を、2つのモジュールで受け渡しするような結合形態。
  6. データ結合:モジュール間のインタフェースとして、スカラ型のデータ要素だけを、パラメータとして受け渡す結合形式。

【意識すべきこと】

低結合モジュールを目指す。

【その他】

  • ハイブリッド結合:データ状況に応じて複数の意味を持つ状態。
  • 結合の本数と方向:「強さ」「太さ」以外にも「本数」「方向」にも気を配る必要がある。
  • べき等性と安全性
    • べき等性:ある操作を何回行っても結果が同じこと。
    • 安全性::操作対象の状態を変化させないこと。

 

直交性

直交は、幾何学において、グラフの座標軸のように直角に交わる2つの線分の性質。

 

【意識すべきこと】

コードのレイヤー化。

不要な情報は他のモジュールに公開せず、また、他のモジュールの実装を当てにしないコード記述を心がける。 

 

可逆性

可逆とは、ある変化が起こっても、ある条件を加えると元の状態に戻るという性質。

 

【意識すべきこと】

特定技術に依存しない。

変更に耐えうるため、やり直しができるような設計にする。

 

コードの臭い

コードの臭い」とは、コードの中で、理解しにくい、修正しにくい、拡張しにくい、と感じられる部分のこと。この問題点の嫌疑を、不吉な兆候として、怪しいサインとして、「臭い」と呼ぶ。

 

【意識すべきこと】

「コードの臭い」の兆候を把握する。

「どういう状態が悪臭か」「なぜこれが悪臭なのか」を把握する。

  • よく見る
  • 長すぎる
  • 大きすぎる
  • 多すぎる
  • 名前が合わない

 

技術的負債

技術的負債とは、コードにおける「修正しにくい」「理解しにくい」といった、問題のある汚いコード部分のこと。

  • 十分に時間があれば、「時間がかかっても、きれいなコード」を選択すべき 
  • 修正の緊急度が高い場合には、「素早く汚いコード」を選択する場合、それが負債

 

【意識すべきこと】

問題コードを管理する。

素早く返済するのが一番。

返済の時間がなかった場合は、せめて、その本来書くべきであったコードの設計を、ドキュメントに残しておく。