オブジェクト指向
なぜシリーズ

備忘録:「オブジェクト指向でなぜつくるのか」3章

前回は「2章について書きます。」と言ったな。あれは嘘だ。

2章は「現実世界をオブジェクト指向の比喩として使うのは色々間違ってるよ。」という内容でした。
が、すでにわかってる内容しかなかったので割愛。

今回は3章をまとめます。
ちなみに、この本では「オブジェクト指向プログラミング」の略語として「OOP」を使っており、タイトルにも出てきますが、個人的にわかりづらいため僕の記事では「オブジェクト指向」として統一します。

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

要するに

  • プログラミング言語改良の歴史(いままでのプログラムではなにができてなにができなかったのか)
  • なんのためにオブジェクト指向が発明されたのか

をまとめる章でした。
ひとつずついきましょう。

プログラミング言語改良の歴史

プログラミングを学んだ方はご存知だと思いますが、そもそもコンピュータは2進数しか理解できません。
かと言ってコンピュータにわかるコードをそのまま書くと今度は人間が理解できない。

ということで人間がわかりやすい文法で書く仕組みを提供してくれるのが「プログラミング言語」であり、それで書いたコードをコンピュータが理解できるように直すのが「コンパイル」です。

つまり、プログラミング言語の進化とは「人間が理解しやすいように改良する」ことでもあります。
可読性が命な訳です。
初期のコンピュータが理解できる「機械語」

A10010
8B160210
01D0
A10410

から「アセンブリ言語」

MOV AX, X
MOV DX, Y
ADD AX, DX
MOV Z, AX

「高級言語」

Z=X+Y

へと改良され、現在見慣れたコードの形になっていきます。
そうすると今度は「一行一行はわかるけど全体の流れが複雑で理解できない」ということになります。
そこで「構造化プログラミング(=GOTOレスプログラミング)」、「サブルーチンの独立性を高める」といったことが提唱されます。

構造化プログラミングについては「GOTO禁止」といえばわかると思います。
大事なのは「独立性を高める」という部分です。

これはどこからでもアクセスできる「グローバル変数」をなくし、思わぬ変更を防ぐためのものです。
また、作業効率をあげるために「再利用の促進」も同時期に生まれました。
これはサブルーチンを使用することで共通の部品を使えるようにするものです。
これらのために「ローカル変数」「値渡し」などの仕組みが生まれました。

この時点で進化の方向性は「独立性を高める」「再利用性を高める」方向にシフトしていきました。

なんのためにオブジェクト指向が発明されたのか

ということでここまでで

  • GOTO文の廃止
  • サブルーチンによる再利用

は実現しました。
しかし、グローバル変数はどうしても共通の変数として持っておきたいときがあったり、サブルーチンだけだと再利用性が足りないという問題が残りました。
これらを解決するのがオブジェクト指向となります。

まとめ

ということでこの章は、言語改良の歴史とオブジェクト指向の必要性の話でした。
実際に何をしたかったのかを意識することで理解がしやすくなったと感じます。
次回は4章をまとめます。