<輪読会>オブジェクト指向でなぜつくるのか - 第3章 OOPを理解する近道はプログラミング言語の歴史にあり -

輪読会メンバー

  • Izumi Haruya

github.com

  • Sekine Yutaro

github.com

  • Abe Kaisei

github.com

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

OOPは必然性を持って登場した

  • 機械語から構造化プログラミングまでの進化の歴史を振り返る
  • なぜOOPが必要になったか

1940年代~

黎明期には機械語でプログラムを書いていた

このときコンピュータは、2進数で書いた機械語しか解釈できなかった

以下は算術計算を実行する命令であり、これを見ても直感的にわからないので、一部の物凄く優秀なプログラマしか扱えなかった

// 16進数
A10010
01D0

1950年代~

プログラミング言語の最初の一歩はアセンブリ

  • 人が解釈しやすいような記述方法
// アセンブリ言語

MOV  AX, Y
MOV  DX, Y

上記はコンパイルするアセンブラという別のプログラムを読み込ませて機械語を生成していた また、命令をほんの少し間違えるとプログラムが暴走する懸念があった

1950年代 ~ 1960年代

高級言語の発明でプログラムはより人間に近づいた

  • 高級言語になるとかなり人間が読みやすくなった
// FORTRAN
Z=X+Y

1970年代 ~

分かりやすさを重視する構造化プログラミング

構造化プログラミングにも課題があった(メモリ、CPU速度) 上記のような問題は、ハードウェアの改善とともに問題も改善していった

19XX年代(その後) ~

サブルーチンの独立性を高めて保守に強くする

・ グローバル変数をいかに減らすか
・ 上記が多いと影響範囲が大きいので、変更コストが莫大にかかった
・ ビルドして、エラーハンドリングしようとしてもビルドに1日以上かかって現実的でなかった
  • 問題を避けるための2つの仕組み
    • ローカル変数(サブルーチンの中だけで使用される変数)
    • 引数の値を渡す

上記をうまく使用することでサブルーチンの独立性を高めることが可能になった!!

GOTOレスプログラミングを実現する構造化言語

  • 構造化言語(GOTOレスプログラミング言語)が登場した

    上記の中でC言語が1番注目された

    • ビット演算やメモリ領域を効率的に使用するためのポインタなどの細かな機能があった
    • 関数ライブラリで組み上げるようにした
    • 上記のことが理由で既存の言語コンパイラを改良しなくてもよくなった

進化の方向は保守性と再利用性を重視に変化した

  • 生産性向上
    • 命令を簡単に表現するための進化
      • 高級言語までの進化では、命令の「高級化」による表現力の向上
  • 保守性向上
    • プログラムをわかりやすくするための進化
      • 構造化言語における進化では、基本三構造
  • 品質向上
    • 制約をつけて複雑さを避ける為ための進化
      • 構造化言語における進化では、GOTOレスプログラミング
  • 再利用促進
    • 重複ロジックを排除して、部品化と再利用を促進するための進化
      • 高級言語までの進化では、サブルーチン
      • 構造化言語における進化では、サブルーチンの独立性強化

ここまでのプログラミング言語の残された課題はグローバル変数問題と貧弱な再利用

  • グローバル変数問題
    • 現状のローカル変数の仕組みでは、サブルーチンを跨ぐ処理ができなかった(ローカル変数はサブルーチンの呼び出しが終わると消えてしまう一時的なものだった)
    • 上記を解決するには、グローバル変数に頼るしかない現状だった
  • 貧弱な再利用
    • ライブラリが充実していなかった
    • ライブラリにないものを実現しようとしたらサブルーチンで実現しなければならなかった

参考書籍

オブジェクト指向でなぜつくるのか 第3版 知っておきたいOOP、設計、アジャイル開発の基礎知識 | 平澤 章 |本 | 通販 - Amazon.co.jp