【プリンシプルオブプログラミング】視点
目次
はじめに
この記事は「プリンシプルオブプログラミング」を読んで自分なりにまとめた学習メモです。
プリンシプル オブ プログラミング3年目までに身につけたい一生役立つ101の原理原則
- 作者: 上田勲
- 出版社/メーカー: 秀和システム
- 発売日: 2016/03/23
- メディア: 単行本
- この商品を含むブログ (11件) を見る
視点 〜プログラマの観る角度〜
6つの視点
- 凝集度
- 結合度
- 直交性
- 可逆性
- コードの臭い
- 技術的負債
凝集度
凝集度とは、モジュールに含まれている機能の純粋さを表す尺度。モジュールを「強さ」を測るもの。
- 暗合的強度:モジュール内の要素間に、特別の関係が認められない。暗合とは「偶然に物事が一致する」という意味。
- 論理的強度:ある機能を抽象的に捉えてまとめたもの。
- 時間的強度:特定の時点(時間)に連続して実行する複数の機能を1つのモジュールにまとめたもの。
- 手順的強度:問題を処理するために関係している複数個の機能のうちの、いくつかを実行する。
- 連絡的強度:基本的に手順的強度の特性を持つ。異なるのは、モジュール内機能間でデータの受け渡し(連絡)をしたり、同じデータを参照する点。
- 情報的強度:特定のデータ構造を扱う複数の機能を、1つのモジュールにまとめたもの。
- 機能的強度:モジュール内のすべての命令が1つの役割(機能)を実行するために関連しあっているモジュール。
【意識すべきこと】
高強度モジュールを目指す。
結合度
結合度とは、モジュール同士の関係の密接さを表す尺度。ある結合の「太さ」を測るもの。
- 内容結合:あるモジュールと他のモジュールが一部を共有するようなモジュールの結合の仕方。
- 共通結合:共通域に定義したデータを、いくつかのモジュールが共同使用するような結合形式。
- 共通域の定義データ:いわゆる「グローバル変数」のこと。
- 外部結合:外部宣言したデータを共有したモジュール間の結合形式。
- 外部宣言した定義:public宣言された変数など。
- 制御結合:呼び出し側のモジュールが、呼び出されるモジュールの制御を指示するデータを、パラメータとして渡す結合形式。
- スタンプ結合:共通域にないデータ構造を、2つのモジュールで受け渡しするような結合形態。
- データ結合:モジュール間のインタフェースとして、スカラ型のデータ要素だけを、パラメータとして受け渡す結合形式。
【意識すべきこと】
低結合モジュールを目指す。
【その他】
- ハイブリッド結合:データ状況に応じて複数の意味を持つ状態。
- 結合の本数と方向:「強さ」「太さ」以外にも「本数」「方向」にも気を配る必要がある。
- べき等性と安全性
- べき等性:ある操作を何回行っても結果が同じこと。
- 安全性::操作対象の状態を変化させないこと。
直交性
直交は、幾何学において、グラフの座標軸のように直角に交わる2つの線分の性質。
【意識すべきこと】
コードのレイヤー化。
不要な情報は他のモジュールに公開せず、また、他のモジュールの実装を当てにしないコード記述を心がける。
可逆性
可逆とは、ある変化が起こっても、ある条件を加えると元の状態に戻るという性質。
【意識すべきこと】
特定技術に依存しない。
変更に耐えうるため、やり直しができるような設計にする。
コードの臭い
「コードの臭い」とは、コードの中で、理解しにくい、修正しにくい、拡張しにくい、と感じられる部分のこと。この問題点の嫌疑を、不吉な兆候として、怪しいサインとして、「臭い」と呼ぶ。
【意識すべきこと】
「コードの臭い」の兆候を把握する。
「どういう状態が悪臭か」「なぜこれが悪臭なのか」を把握する。
- よく見る
- 長すぎる
- 大きすぎる
- 多すぎる
- 名前が合わない
技術的負債
技術的負債とは、コードにおける「修正しにくい」「理解しにくい」といった、問題のある汚いコード部分のこと。
- 十分に時間があれば、「時間がかかっても、きれいなコード」を選択すべき
- 修正の緊急度が高い場合には、「素早く汚いコード」を選択する場合、それが負債
【意識すべきこと】
問題コードを管理する。
素早く返済するのが一番。
返済の時間がなかった場合は、せめて、その本来書くべきであったコードの設計を、ドキュメントに残しておく。