rhanda | 元銀行員エンジニアの日記

実務未経験からWeb系受託開発企業に転職したひよっこエンジニアが覚えたことや日々の感情を残すブログ

『オブジェクト指向でなぜつくるのか 知っておきたいOOP、設計、アジャイル開発の基礎知識』を読んだメモ

構成

第1章 オブジェクト指向はソフトウエア開発を楽にする技術
第2章 オブジェクト指向と現実世界は似て非なるもの
第3章 OOP を理解する近道はプログラミング言語の歴史にあり
第4章 OOP は無駄を省いて
第5章 メモリの仕組みの理解はプログラマのたしなみ
第6章 OOP がもたらしたソフトウエアとアイデアの再利用
第7章 汎用の整理術に化けたオブジェクト指向
第8章 UML は形のないソフトウエアを見る道具
第9章 現実世界とソフトウエアのギャップを埋めるモデリング
第10章 擬人化して役割分担させるオブジェクト指向設計
第11章 オブジェクト指向から生まれたアジャイル開発
第12章 オブジェクト指向を使いこなそう
補章 関数型言語でなぜつくるのか

学んだこと

歴史

  • 黎明期には機械語でプログラムを書いていた
    • 1940年代、プログラマは自身が機械語を使って1行1行コードを書いていた
    • 当時のコンピュータは巨大で、コンピュータの前にそれを収納する建物の建設から始めたという話があるほどだったため、機械語で地道に書いても間に合った
  • アセンブリ言語の登場
    • 無機質な機械語を人間が理解しやすい記号に置き換えて表現し、プログラミングの効率向上を試みた
    • しかし命令を少し間違えただけでもプログラムが暴走してしまう等の問題があった
  • 高級言語の発明
    • 命令を一つ一つ記述するのではなく、より人間にわかりやすい形式で表現
    • 1957年に FORTMAN、1960年に COBOL が登場
    • プログラミングの生産性や品質が向上も、それ以上にコンピュータの普及と発展の進行が爆発的であったため、生産性向上ニーズは収まらず
      • 1960年代後半には NATO の国際会議で「20世紀末には世界の総人口がプログラマになっても、増大するソフトウエアへの需要に追いつかない」というソフトウエア危機が宣言されたほど

以上のような経緯で、ソフトウエア危機に対応するため、さまざまなアイディアや新しい言語が提案された。

進化の方向は保守性と再利用性重視へ

  • 高級言語までの進化では「コンピュータにやらせたい仕事をいかに簡単に、かつ人間に親しみやすい方法で表現するか」を追求してきたが、それだけではソフトウエア危機を救えなかった。
  • 次の構造化言語(PascalC言語 etc.)への進化は「保守性を向上させるための進化
  • 背景は、プログラムの寿命が最初の想定よりも長くなったこと。
  • コンピュータ登場当初は、毎回ゼロからプログラムを作り直していた。
  • しかしソフトウエアに対する要求がどんどん膨らみ、プログラムの規模が大きくなってくると毎回全てを作り直すのでは間に合わなくなった。
  • そのため、出来上がったプログラムに修正を加えながら対応するケースが増加した。

構造化言語では解決できない問題を打破したのが OOP(Object-Oriented Programming)だった

OOP への進化まとめ

  • 高級言語
    • 命令の高級化による表現力向上およびサブルーチンによる重複ロジック排除を実現した
  • 〜構造化言語
    • プログラムを保守するための機能を強化し、サブルーチンの独立性を高める仕組みなどが導入された
  • OOP
    • 品質向上のために制約をつけて複雑さを避ける機能を用意した。加えて部品化や再利用の機能を大幅強化した

OOP は決して従来のプログラミング技術を置き換えるものではなく、以前のものを基盤として欠点を補い、品質が高く、保守しやすく、再利用しやすいソフトウエアを作るために考案されたものである。

デザインパターン

優れた設計のアイディアを、後から再利用できるように名前をつけて文書化したもの。

再利用部品群とデザインパターンの、発展の流れ

OOP によって汎用性の高いソフトウエア部品群の再利用と、アイディアやノウハウの再利用の2つの再利用技術がもたらされた。

  1. OOP を利用して再利用部品群が作られる
  2. 再利用部品群に共通して現れる設計のアイディアを抽出したデザインパターンが登場
  3. 再利用部品群を作るために、デザインパターンを利用

優れたソフトウエアを手早く作るためのアジャイル宣言

  • ウォーターフォール開発プロセスの限界に対応するため、XP やスクラムなど軽量な反復型開発手法がたくさん登場した。そしてこれらをひっくるめて「アジャイル開発手法」と名づけて推進しようとする動きが起きた。
    • アジャイルagile)」は機敏・敏捷を意味する言葉
    • 無駄な作業を省き、優れたソフトウエアを手早く作ることを主眼に置くためにその名がつけられた
  • 2001年にこれらの開発手法の提唱者や推進者たちが、共同でアジャイルソフトウエア開発宣言をまとめた。

アジャイル開発

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

このように、アジャイル開発はオブジェクト指向に直接関係ないとはいえ、実際には結びつきがある