構成
第1章 オブジェクト指向はソフトウエア開発を楽にする技術
第2章 オブジェクト指向と現実世界は似て非なるもの
第3章 OOP を理解する近道はプログラミング言語の歴史にあり
第4章 OOP は無駄を省いて
第5章 メモリの仕組みの理解はプログラマのたしなみ
第6章 OOP がもたらしたソフトウエアとアイデアの再利用
第7章 汎用の整理術に化けたオブジェクト指向
第8章 UML は形のないソフトウエアを見る道具
第9章 現実世界とソフトウエアのギャップを埋めるモデリング
第10章 擬人化して役割分担させるオブジェクト指向設計
第11章 オブジェクト指向から生まれたアジャイル開発
第12章 オブジェクト指向を使いこなそう
補章 関数型言語でなぜつくるのか
メモ
歴史
- 黎明期には機械語でプログラムを書いていた
- アセンブリ言語の登場
- 無機質な機械語を人間が理解しやすい記号に置き換えて表現し、プログラミングの効率向上を試みた
- しかし命令を少し間違えただけでもプログラムが暴走してしまう等の問題があった
- 高級言語の発明
以上のような経緯で、ソフトウエア危機に対応するため、さまざまなアイディアや新しい言語が提案された。
進化の方向は保守性と再利用性重視へ
- 高級言語までの進化では「コンピュータにやらせたい仕事をいかに簡単に、かつ人間に親しみやすい方法で表現するか」を追求してきたが、それだけではソフトウエア危機を救えなかった。
- 次の構造化言語(Pascal、C言語 etc.)への進化は「保守性を向上させるための進化」
- 背景は、プログラムの寿命が最初の想定よりも長くなったこと。
- コンピュータ登場当初は、毎回ゼロからプログラムを作り直していた。
- しかしソフトウエアに対する要求がどんどん膨らみ、プログラムの規模が大きくなってくると毎回全てを作り直すのでは間に合わなくなった。
- そのため、出来上がったプログラムに修正を加えながら対応するケースが増加した。
構造化言語では解決できない問題を打破したのが OOP(Object-Oriented Programming)だった
OOP への進化まとめ
- 〜高級言語
- 命令の高級化による表現力向上およびサブルーチンによる重複ロジック排除を実現した
- 〜構造化言語
- プログラムを保守するための機能を強化し、サブルーチンの独立性を高める仕組みなどが導入された
- 〜OOP
- 品質向上のために制約をつけて複雑さを避ける機能を用意した。加えて部品化や再利用の機能を大幅強化した
OOP は決して従来のプログラミング技術を置き換えるものではなく、以前のものを基盤として欠点を補い、品質が高く、保守しやすく、再利用しやすいソフトウエアを作るために考案されたものである。
デザインパターン
優れた設計のアイディアを、後から再利用できるように名前をつけて文書化したもの。
再利用部品群とデザインパターンの、発展の流れ
OOP によって汎用性の高いソフトウエア部品群の再利用と、アイディアやノウハウの再利用の2つの再利用技術がもたらされた。
優れたソフトウエアを手早く作るためのアジャイル宣言
- ウォーターフォール型開発プロセスの限界に対応するため、XP やスクラムなど軽量な反復型開発手法がたくさん登場した。そしてこれらをひっくるめて「アジャイル開発手法」と名づけて推進しようとする動きが起きた。
- 2001年にこれらの開発手法の提唱者や推進者たちが、共同でアジャイルソフトウエア開発宣言をまとめた。
アジャイル開発
- 現在この言葉は、XP やスクラムをはじめとする軽量な反復型開発手法の総称として使われるようになっている。
- アジャイル開発を円滑に進めるための代表的なプラクティス
- テスト駆動開発(TDD)
- リファクタリング
- 継続的インテグレーション(CI)
アジャイル開発はオブジェクト指向から生まれた
- 結論、反復型開発プロセスやアジャイル開発のプラクティスはオブジェクト指向のコンセプトとは特に関係がないし、プログラミング言語の仕組みを前提とした技術でもない。
- にも関わらず、XP やリファクタリング、TDD はしばしばオブジェクト指向の一部として扱われる。
- 理由の1つ目は、反復型開発プロセスやプラクティスとオブジェクト指向の相性が良いこと
- 過去の開発環境が貧弱だった時代は、ソフトウエアの変更にかかるコストが大きかった
- そのため、システムを納期までに完成させるには早い段階で要求を確定させることが重要だった
- 現代は、開発技術の発展および開発ツールの整備やマシン能力向上によって、プログラミングやテストの生産性が大きく向上した
- こうした進歩によって、反復型開発プロセス、中でもプログラミングを中心とする XP が可能になった
- 2つ目は、反復型開発プロセスやプラクティスを提唱しているほとんどの人が、オブジェクト指向に深い関わりを持っていること