オブジェクト指向ができるまでの歴史

オブジェクト指向ができるまでの歴史
なぜオブジェクト指向以前の歴史を知る必要があるのか

 

オブジェクト指向を早く理解する近道になるからです!!
オブジェクト指向を理解する上でなぜオブジェクト指向ができたのか(歴史)を知る必要はありませんが、
オブジェクト指向以前のプログラミング技術でなにができて、どこに問題で、どこが限界なのかを知る事でより理解が深まりより早く理解できるでしょう。

機械語

1940年代では、プログラマ自身が機械語を使って一行一行プログラムを書かなければなりませんでした。
16進数表現(例)
A100010
8B160210

 

アセンブリ言語
そこで非効率なプログラミングを改善するためにアセンブリ言語が登場
このアセンブリ言語の登場で格段に分かりやすくなりました。
しかしアセンブリ言語によるプログラミングでは命令を少しでも間違えるとプログラムが暴走するという欠点が…
アセンブリ(例)
ADD AX, DX
MOV Z, AX

 

高級言語
より親しみやすい表現形式でプログラミングを書くために高級言語が開発されました。
(例)
Z=X+Y

 

アセンブリ言語と比べて高級言語の分かりやすさは明らかになりました。
高級言語の登場は、1950代~
Cobolさんなんかは1960年だそうです!!
高級言語の登場により、プログラミングの生産性は向上

 

しかし、それ以上にコンピュータの普及と発展の方が爆発的に進んだため
NATO(北大西洋条約機構)の国際会議では
20世紀末には、世界の総人口がプログラマになっても、増大するソフトウェアの需要に追いついていないという危機が宣言されました。

 

これをソフトウェアの危機といいます。
このソフトウェアの危機に対応するべくして様々なアイディアが提案されその中でも当時注目を集めたのは、
構造化プログラミングです。

 

構造化プログラミングとは
正しく動作するプログラミングを作成するには、分かりやすい構造にすることが重要だと
オランダ人の学者が提唱
プログラミングをわかりずらくしているGOTO文を廃止して
ロジックを3つの構造だけにすることにしました。
1順次進行
2条件分岐 if, else
3繰り返し for,case文

GOTO文 手続き列中の指定された場所(任意のラベルで指定される)に無条件にジャンプ(分岐)する命令

 

順次進行、条件分岐、繰り返しこの3つを合わせて基本3構造と呼びます。

 

また構造化プログラミングはGOTO文の廃止を主張したことにより、
GOTOレスプログラミングと呼びます。

 

GOTOレスプログラミングともうひとつこの当時、プログラムを保守を強くするために工夫されたのが、サブルーチンの独自性を高めることです。

 

サブルーチンの独自性を高める方法として、メインルーチンとサブルーチンで共有する情報をすくなくすることです。
複数のサブルーチンが共有した変数のことをグローバル変数と呼びます。

 

しかしグローバル変数には、プログラム全体のどこからでもアクセス可能で、数百、数千のサブルーチンを含む大規模なアプリケーションにおいて、デバック時に変数の不正が発見するとすべてのコードを調べなければならず非常に膨大な時間がかかります。
この問題を避けるために

1.ローカル変数

2.引数の機能

この2つの仕組みが考案されました。

ローカル変数とは

サブルーチンの中だけで使用する変数のことです。
引数の値渡しとは?
サブルーチンに引数として情報を渡す時に、呼び出し側が参照している変数を直接使わず、値をコピーして渡す仕組みです。
これは、サブルーチン側で受け取った引数の値に変更を加えても呼び出し側が参照している変数に影響はありません。

まとめ

機械語 コンピュータが直接解釈する機械語(2進数・16進数で記述)
アセンブリ言語 機械語を記号で記述
高級言語  より親しみやすい表現形式で書かれたプログラミング
構造化言語 基本3構造、GOTOレス、サブルーチンの独自性の強化
しかし、構造化プログラミングでは解決できない問題がありました。
グローバル変数問題
ローカル変数は、サブルーチンの呼び出しが終わると消えてしまう一時的な変数です。
サブルーチンの実行期間を超えて保持するにはグローバル変数として使用せざるおえません。
グローバル変数を変更するときは、それに影響するサブルーチにも影響するということになります。
再利用の難しさ
構造化言語で再利用できるのはサブルーチンでした。
しかしアプリケーションの規模が膨大するとサブルーチンでの再利用だと対応ができなくなりました。

 

構造化言語のおかげでできあがったプログラムの理解のしやすさや修正がしやすくなりましたが、再利用のしやすさとしては不十分でした。

 

そこで登場したのがOOP(オブジェクト指向プログラミング)です。
OOP(オブジェクト指向プログラミング)についてはまた改めて投稿したと思います。