書籍 プリンシプルオブプログラミング 第4章 まとめ
4章
視点 〜プログラマの観る角度〜
4.1 凝縮度
モジュールは純粋に
凝縮度:モジュールに含まれる機能の「純粋さ」を表す尺度
凝縮度は7段階の強度に分かれており、段階が高いほど純粋である。
最も強度が高く理想的なモジュールは「機能的強度」であり、以下のような特徴がある
モジュール内の全ての命令が1つの機能のために関連している
- 「 一部だけ変更」というようなことが減り、あったとしても「関わりのあるモジュールとの共通の事情による変更」である可能性が高くなる
- 結果的に、変更を行なった際の他モジュールへの影響を、最小限に留められる
雑じり気のあるモジュールは脆い
モジュールの凝縮度を高めることで、得られるメリット
- コードの設計が明確になり、理解しやすくなる
- 無駄な内容がないため
- 保守と拡張が容易になる
- 再利用性やモジュール間の疎結合性が向上
- 変更によるほかモジュールへの影響が少ない
モジュールの凝縮度を高めるためには、モジュール内の関連性は最大化、他モジュールとの間の関連性は最小化する必要がある。
4.2 結合度
モジュール間は疎遠に
モジュール間の関係は、疎遠であればあるほど相互の依存性が低くなり、影響を受けにくくなる。 尚、こちらも凝縮度と同様にレベル分けがされており、データ要素だけの受け渡しを行なう「データ結合」の状態を目指す。
低結合モジュールを目指す
モジュールの結合度を低く保つ手段
- データの受け渡しでは、引数を使う
- 出来るだけグローバル変数を利用しない
- 渡す値によって返り値が変わらないようにする(一貫性を持たせる)
また、結合先モジュールの質にも注目して、なるべく不安定な要素と関係を持たないようにすること。
4.3 直交性
コードに以下の要素を持たせることで、変更に強くコードを生み出すことが出来る。
独立性
- 他のコードの要素を無駄に含まないこと
分離性
- バグや脆弱性を含んでいることが分かった際に、その部分を簡単に分離できる能力 また、「生産性の向上」や「リスク低減」といった恩恵もある。
4.4 可逆性
「今後一切変更しない」という決定は避けるようにして、変更に対し、いつでも後戻りや修正を行えるようににする。 また、ソフトウェアとのやり取りを行なう境界部を関節化することで、変更に対し柔軟に対応できるようになる。
4.5 コードの臭い
コードの中に、理解や修正がしにくい部分(臭い)があると、潜在的なバグの要因になりかねない。そのため、適宜改善していかなければならない。
コードの臭いとなりゆる要因
- 見づらいコード
- 長過ぎる、大きくて多いコード
- 命名に一貫性の無いコード
4.6 技術的負債
問題コードは借金である
コードを書く際は、なるべく「綺麗で読みやすいコード」を書くべきだが、納期が迫っている時などは、「汚いけど動くコード」が優先されるときもある。 但し、汚いコードが残り続けると、その後に作成するコードへの影響もあるため、なるべく早くリファクタリングすること。