b00k.jp ~積み上げ式読書ノート~
公開日:
最終更新日:2018/05/19

なぜオブジェクト指向が生まれたのか?プログラミングの進化の歴史から考える。

プログラミング

プログラミングの歴史からオブジェクト指向が生まれた経緯

オブジェクト指向を理解するには、なぜオブジェクト指向が生まれたのかを知るのが一番早い。
そうすることで、オブジェクト指向の各機能がどういった目的で用意されたのかを理解できる。
なぜオブジェクト指向が生まれたかを知る為には、オブジェクト指向が生まれるまでのプログラミング言語の進化を見ていくのが良い。

プログラミング言語は、大ざっぱにいうと以下のような進化を遂げてきた。

機械語

コンピュータが処理する2進数で書かれた生のプログラム。

アセンブラ

機械語の1命令を人間が理解しやすい1文で表現したもの。

高級言語

人間から見て意味のある処理のかたまりを1行のコードで表した。

例えば、アセンブラだとXとYを加算してZに格納するのに、以下のように複数の命令を書く必要があった。

しかし、高級言語であれば以下のように1文で表すことができる。

構造化プログラミング

わかりやすいプログラミングを書くために、わかりやすい構造にするという思想。
順次進行、条件分岐(if)、繰り返し(for)の3つの構造で表現する。
スパゲティ化の原因である、GOTOを廃止したことから、GOTOレスプログラミングとも呼ばれる。

サブルーチンの独立性の向上

グローバル変数を参照していることが原因。
ローカル変数と引数の値渡しによって、これを防いだ。

ローカル変数とは、サブルーチンの内部だけで使用される変数のこと。

値渡しとは、呼び出し元の変数をサブルーチンのローカル変数にコピーすること。
これにより、サブルーチンで値を変更しても、その変更はサブルーチン内でとどまり、呼び出し元には影響を与えない。

ハードの性能向上により、「性能<保守性、可読性」を重視するようになった。

ハードの性能が向上し、性能を出すためにトリッキー(可読性の低い)ロジックを書くよりも、読みやすいことが重要になった。
その際に、以下の2つの課題が残った。

グローバル変数問題

処理全体を通して保持しておきたい変数はグローバル変数に保持するしかなかった。
ローカル変数は、その関数が終わると消えてしまう。
しかし、グローバル変数はどこからでも参照できるため、値の変化を追うのが困難。
可読性の低下の原因となる。

低い再利用性

再利用の単位がサブルーチンだけであったため。(今のようにクラスやライブラリを再利用するということはできなかった。)
また、グローバル変数を参照していることにより、サブルーチンの独立性を保つことが難しかった。
(他の処理によってグローバル変数が変更されてしまうと、それに引きずられてサブルーチンの挙動が変わってしまう。)

OOPはこれらの問題を解決する必要から生み出された。
そのための具体的な機能と使い方については、 オブジェクト指向 プログラミングを楽にする3つの機能をわかりやすく説明 にて説明する。

カテゴリー: IT, プログラミング
タグ   :


広告

オススメ記事


PAGE TOP ↑