メイヤー オブジェクト指向入門読書ノート1
オブジェクト指向入門 第2版 原則・コンセプト (IT Architect’Archive クラシックモダン・コンピューティング)
- 作者: バートランド・メイヤー,酒匂寛
- 出版社/メーカー: 翔泳社
- 発売日: 2007/01/10
- メディア: 単行本(ソフトカバー)
- 購入: 11人 クリック: 307回
- この商品を含むブログ (132件) を見る
会社に転がっていたのでとりあえず一時間読みました。設計とソフトウェア工学の本?という印象です。
p10「1.2.5 互換性」までよんだ。続きはp10「1.2.6 効率性」から
第一章ソフトウェアの品質
ソフトウェア工学=品質の高いソフトウェアを生産
ソフトウェア品質=いくつかの要因の組み合わせ
- 本章の目標:組み合わせの分析と課題の発見、解決策を探るための方向づけ
1.1外的品質要因と内的品質要因
われわれがソフトウェアに望むこと
- 速い
- 信頼性がたかい
- 使いやすい
- 読みやすい
- モジュール性が高い
- よく構造化されている
外的品質要因(external factor)
- ユーザーが認識できる要素
- 速い
- 使いやすい
- ユーザーが認識できる要素
内的品質要因(internal factor)
- 外的品質要因以外(コードに現れるもの)
最終的には外的品質要因を達成するのが目標
- そのためには内的品質要因が鍵
1.2 外的品質要因
以下の要因は外的品質要因の中で最も重要な要因であり、オブジェクト指向ソフトウェア構築の中心的使命である
1.2.1 正確さ
定義
正確さとは仕様によって定義されている通りに仕事を実行するソフトウェア製品の能力である。
仕様を満たしていないソフトウェアはどれほど早くても無意味
仕様は前提条件依存
- 多層的アプリーチ、個々の層は下位の層に依存する
- アプリ
- コンパイラ
- OS
- ハード
- (下に行くほど低レイヤー)
- 多層的アプリーチ、個々の層は下位の層に依存する
低レイヤー(例:コンパイラ)を盲目的に信用してはいけない。
- 分離して考える
- コンパイラの正確さ
- 言語の意味論上でのプログラムの正確さ
- (下位レイヤーが正しいことが保証された上で)あるレイヤーが正しいことと、下位レイヤーが正しいことは個別に保証する必要がある
- 分離して考える
正確さを保証する方法
- 従来的アプローチ:確認
- テスト
- デバッグ
- 本書で採用するアプローチ:保証
- 型付け
- 表明(Assertion)
- 本書で採用しない(がより高度な)アプローチ:証明
- 証明(疑問:形式手法とかのことか?)
- 従来的アプローチ:確認
※(確認、保証がそれぞれテスト・デバッグ、型付・表明に対応ついているかは微妙。文脈上はそう読める)
本書は完全な形式化を目指すものではない
1.2.2 頑丈さ(robustness)
定義
頑丈さとは異常な条件に対して適切に対応するソフトウェアシステムの能力である
頑丈さは正確さを保管する
- 頑丈さ:仕様に明記されていないものに対する振る舞い
正確性より曖昧
- そもそも曖昧なもの
- 明確に定義できる場合はその定義が仕様の一部になり正確さに属する
- そもそも曖昧なもの
通常と異常の違い
- 通常:仕様の中で考慮されている(望ましい、という意味ではない)
- 異常:それ以外
頑丈さの役割:=仕様に明記されていないケースからシステムの破壊を守る
- 気配りのグレードダウン(graceful degradation)
- 適切なエラーメッセージを出し、実行をきれいに終了させる
- 気配りのグレードダウン(graceful degradation)
例外処理は12章で掘り下げる
1.2.3 拡張性(extendibility)
定義
拡張性とは仕様の変更に対するソフト上ぁ製品の適応のしやすさである。
ソフトウェアの適応領域は常に変化する可能性がある
- 法改正
- 会社買収
- 物理敵対系のモデル化方法?
- 疑問:科学分野で新たな発見がでることか?
伝統的なソフトウェア工学の手法は変化を十分に考慮していない
- 理想的なサイクルを前提
- 1.要求の凍結
- 2.設計
- 3.実現
- 解決すべき問題が変化しないという前提をおいている
- 理想的なサイクルを前提
現代:ソフトウェア工学技術が(昔より)整った
基本的なソフトウェア光学技術が整ったいま、この「変わる」という中心的な問題を認識し、対処することが重要になってきた。
1.2.4 再利用性(reusability)
定義
再利用性とは多数多様なアプリケーションの構築に使うことのできるソフトウェア要素の能力である。
- 4章で掘り下げる
1.2.5 互換性(compatibility)
定義
互換性とはソフトウェア要素の、他のソフト上ぁ要素との組み合わせやすさである
各ソフトウェアはそれぞれ異なる前提条件を最小しているために、相互作用に問題が生じることが多い
- 例:OSの互換性の内ファイル形式
互換性欠如の悲劇的な例(AMR Corporation 1992)
- https://en.wikipedia.org/wiki/Confirm_Project
- 日本語の情報がない
- 1億ドル規模の損害
- 多分API仕様?IF仕様みたいなものをろくに定義せずに開発を進めたと思われる
互換性の良い例
より発展的:エンティティに対して標準化されたアクセスプロトコルを定義する。