誰にも見えないブログ

雑なメモ。まとまってない文章等

メイヤー オブジェクト指向入門読書ノート1

オブジェクト指向入門 第2版 原則・コンセプト (IT Architect’Archive クラシックモダン・コンピューティング)

オブジェクト指向入門 第2版 原則・コンセプト (IT Architect’Archive クラシックモダン・コンピューティング)

会社に転がっていたのでとりあえず一時間読みました。設計とソフトウェア工学の本?という印象です。

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)
      • 適切なエラーメッセージを出し、実行をきれいに終了させる
  • 例外処理は12章で掘り下げる

1.2.3 拡張性(extendibility)

定義

拡張性とは仕様の変更に対するソフト上ぁ製品の適応のしやすさである。

  • ソフトウェアの適応領域は常に変化する可能性がある

    • 法改正
    • 会社買収
    • 物理敵対系のモデル化方法?
      • 疑問:科学分野で新たな発見がでることか?
  • 伝統的なソフトウェア工学の手法は変化を十分に考慮していない

    • 理想的なサイクルを前提
      • 1.要求の凍結
      • 2.設計
      • 3.実現
    • 解決すべき問題が変化しないという前提をおいている
  • 現代:ソフトウェア工学技術が(昔より)整った

基本的なソフトウェア光学技術が整ったいま、この「変わる」という中心的な問題を認識し、対処することが重要になってきた。

  • 以下のような「変わる」をサポートすることがオブジェクト指向技術の基本的な目標

    • 要求の変更
    • 要求の理解の変化
    • アルゴリズムの変更
    • データ表現の変更
    • 実装方法の変更
  • 拡張性を向上させる重要な原則

    • 設計の単純さ
    • 非集中化(decentralization)
      • モジュールの自治性を高め、単純な変更の影響の波及をなるべく小さく抑える

1.2.4 再利用性(reusability)

定義

再利用性とは多数多様なアプリケーションの構築に使うことのできるソフトウェア要素の能力である。

  • 4章で掘り下げる

1.2.5 互換性(compatibility)

定義

互換性とはソフトウェア要素の、他のソフト上ぁ要素との組み合わせやすさである

  • 各ソフトウェアはそれぞれ異なる前提条件を最小しているために、相互作用に問題が生じることが多い

    • 例:OSの互換性の内ファイル形式
  • 互換性欠如の悲劇的な例(AMR Corporation 1992)

  • 互換性の良い例

    • UNIXでなるべくasciiファイルを使う努力
    • Lispではデータ構造をリスト(二分木)で表現していること
    • OS内ではGUIがある程度法則性を持っている
  • より発展的:エンティティに対して標準化されたアクセスプロトコルを定義する。