書籍 プリンシプルオブプログラミング 第4章 まとめ

4章

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

4.1 凝縮度

モジュールは純粋に

凝縮度:モジュールに含まれる機能の「純粋さ」を表す尺度

凝縮度は7段階の強度に分かれており、段階が高いほど純粋である。

最も強度が高く理想的なモジュールは「機能的強度」であり、以下のような特徴がある

  • モジュール内の全ての命令が1つの機能のために関連している

    • 「 一部だけ変更」というようなことが減り、あったとしても「関わりのあるモジュールとの共通の事情による変更」である可能性が高くなる
    • 結果的に、変更を行なった際の他モジュールへの影響を、最小限に留められる
雑じり気のあるモジュールは脆い

モジュールの凝縮度を高めることで、得られるメリット

  • コードの設計が明確になり、理解しやすくなる
    • 無駄な内容がないため
  • 保守と拡張が容易になる
  • 再利用性やモジュール間の疎結合性が向上
    • 変更によるほかモジュールへの影響が少ない

モジュールの凝縮度を高めるためには、モジュールの関連性は最大化、他モジュールとのの関連性は最小化する必要がある。

4.2 結合度

モジュール間は疎遠に

モジュール間の関係は、疎遠であればあるほど相互の依存性が低くなり、影響を受けにくくなる。 尚、こちらも凝縮度と同様にレベル分けがされており、データ要素だけの受け渡しを行なう「データ結合」の状態を目指す。

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

モジュールの結合度を低く保つ手段

  • データの受け渡しでは、引数を使う
  • 出来るだけグローバル変数を利用しない
  • 渡す値によって返り値が変わらないようにする(一貫性を持たせる)

また、結合先モジュールの質にも注目して、なるべく不安定な要素と関係を持たないようにすること。

4.3 直交性

コードに以下の要素を持たせることで、変更に強くコードを生み出すことが出来る。

独立性

  • 他のコードの要素を無駄に含まないこと

分離性

  • バグや脆弱性を含んでいることが分かった際に、その部分を簡単に分離できる能力 また、「生産性の向上」や「リスク低減」といった恩恵もある。

4.4 可逆性

「今後一切変更しない」という決定は避けるようにして、変更に対し、いつでも後戻りや修正を行えるようににする。 また、ソフトウェアとのやり取りを行なう境界部を関節化することで、変更に対し柔軟に対応できるようになる。

4.5 コードの臭い

コードの中に、理解や修正がしにくい部分(臭い)があると、潜在的なバグの要因になりかねない。そのため、適宜改善していかなければならない。

コードの臭いとなりゆる要因

  • 見づらいコード
  • 長過ぎる、大きくて多いコード
  • 命名に一貫性の無いコード

4.6 技術的負債

問題コードは借金である

コードを書く際は、なるべく「綺麗で読みやすいコード」を書くべきだが、納期が迫っている時などは、「汚いけど動くコード」が優先されるときもある。 但し、汚いコードが残り続けると、その後に作成するコードへの影響もあるため、なるべく早くリファクタリングすること。