「オブジェクト指向でなぜつくるのか」まとめ

第1章 オブジェクト指向はソフトウエア開発を楽にする技術

第2章 オブジェクト指向と現実世界は似て非なるもの

  • オブジェクト指向を現実世界になぞらえた説明はあくまでも比喩として割り切った上で、「プログラミングのための仕組み」として理解するのがおすすめ

クラスとインスタンス

メソッド

  • メソッドの呼び出し方も現実とは異異なっている
  • オブジェクト指向では、メソッドは指示通りに動く
  • 一方現実世界のモノは、自らの意思で動くこともあれば指示を受けてもその通りに動かないこともある

第3章 OOPを理解する近道はプログラミング言語の歴史にあり

  • プログラミング言語の進化の過程
  • プログラミング言語の表現力は向上したものの、1960年代後半に宣言されたソフトウエア危機を救うことはできなかった
    • ソフトウェア危機->将来的にソフトウェアの供給が需要を満たせなくなるという考え方
  • ソフトウエア危機を乗り越えるため、保守性を向上させることが重要となった
  • また、間違いを起こさないよう「品質の向上」も重視するようになった
    • 複雑なコードは避ける、等

第4章 OOPは無駄を省いて整理整頓するプログラミング技術

OOPの三大要素

クラス

  1. サブルーチンと変数をまとめる
  2. クラス内部だけで使う変数やサブルーチンを隠す
  3. 1つのクラスからインスタンスをたくさん作る

ポリモーフィズム

  • サブルーチンを呼び出す側のインターフェースを統一する
    • 共通のメインルーチンを作る仕組みのこと

継承

  • クラスの共通部分を別クラスにまとめる仕組みのこと
    • これによりコードの重複を削除でき、保守性を上げることができる

クラスを型として利用する

  • 型チェック
  • 静的な型付け
  • 動的な型付け
    • プログラムの実行時にエラーを検出する

進化したOOPの仕組み

  • 現在主流のプログラミング言語JavaC#PythonRubyPHP等)にはさらに進んだ機能がある
    • パッケージ
      • クラスをさらにまとめる
    • 例外
      • メソッドから特別なエラーを返す仕組み、バグを見つけやすくする
      • 無駄を省くことができる
      • 間違いを防止できる
    • ガベージコレクション
      • メモリ利用の効率化

第5章 メモリの仕組みの理解はプログラマのたしなみ

  • プログラムの実行方式
  • スレッド
    • プログラムの実行単位
    • プロセスよりも小さい単位で、1つのプロセスの中に複数存在する
  • メモリ領域
    • 静的領域
      • アプリケーション開始時に確保する
      • グローバル変数、実行コードが格納される
    • ヒープ領域
      • 開始時に一定領域を確保し、必要の都度アプリケーションに割り当てる
    • スタック領域
      • 後入れ先出し方式(LIFO
      • 呼び出したサブルーチンの引数、ローカル変数等

第6章 OOPがもたらしたソフトウエアとアイデアの再利用

第7章 汎用の整理術に化けたオブジェクト指向

上流工程におけるオブジェクト指向の利用

集合論

役割分担

  • オブジェクト指向における「メッセージパッシング」は、インスタンスを指定してそのクラスのメソッドを呼び出す
  • これは、特定の役割を持つもの同士が決められた方法で連絡し合う、役割分担に応用されることになった

この集合論と役割分担は、非常に強力なコンセプトとなった.
これによりオブジェクト指向は、物事を分類して整理する仕組みと役割分担を表現する仕組みを備えた汎用の整理術となった

第8章 UMLは形のないソフトウエアを見る道具

UML:Unified Modeling Language

  • プログラム構造や動作を表現する
  • 汎用の整理術の成果物を表現する
  • オブジェクト指向を表現する

第9章 現実世界とソフトウエアのギャップを埋めるモデリング

  • 業務分析・要件定義・設計の3ステップにより、現実世界とソフトウエアのギャップを埋めるモデリングを行う
  • モデリングとは、「UMLを使ってソフトウエアの機能や内部構造を2次元の図で表現すること」を指す

第10章 擬人化して役割分担させるオブジェクト指向設計

ソフトウェア設計の目標

  • 重複を排除する
    • 機能が重複すると規模が大きくなり修正漏れが増える
  • 部品の独立性を高める
    • 独立性を高めることで保守性や再利用性が高くなる
  • 依存関係を循環させない
    • AがBに、BがCに、CがDに依存している...と言う状態を避ける

第11章 オブジェクト指向から生まれたアジャイル開発

ウォーターフォール開発プロセス

  • 要件定義/設計/プログラミング/テストの作業を1回ずつ実施する
  • 現在よりも開発環境が整っていなかった時代の「ソフトウェアの変更に大きなコストがかかる」ことを前提としている

反復型開発プロセス

  • 要件定義→設計→プログラミング→テストを繰り返し行うことによって、段階的にソフトウエアを作っていく

第12章 オブジェクト指向を使いこなそう

オブジェクト指向の利用自体が目的になってはいけない