オブジェクト指向言語は、それ以前のものと全く異なる新しい開発技術ではなく、それ以前のプログラミング技術を基礎として、その欠点を補うための技術。
プログラミング技術の工夫と改良の歴史の中で、必然性を持って登場した技術。
機械語でプログラムを書いていた黎明期
<!--
機械語によるプログラム例
-->
A10010
8B160210
01D0
A10410
コンピュータが初めて登場した1940年代の頃はプログラマ自身が上記のような機械語を使って、1行1行プログラムを書く必要があった。
コンピュータの黎明期はこうした機械語を使いこなせる、ごく限られたスーパープログラマだけがコンピュータを操れる時代だったようです。
※当時のコンピュータは真空管を使って作られており、あまりにも巨大なため、コンピュータを作る前にそれを収納する建物の建設から始めたという話もあり、そんな時代だからこそ、機械語で地道にプログラムを書いても間に合ったのかもしれません。
プログラミング言語としての最初の一歩であるアセンブリ言語
<!--
アセンブリ言語によるプログラム例
-->
MOV AX, X
MOV DX, Y
ADD AX, DX
MOV Z, AX
アセンブリ言語の特徴
- 無機質な機械語を人間が分かりやすい記号に置き換えて表現
- アセンブラと呼ばれる別のプログラムに読み込ませてコンパイルすることで機械語を生成する
- アセンブリ言語の登場のおかげで、プログラムが格段に分かりやすくなった
アセンブリ言語の課題
- 命令をほんの一つでも間違えるとプログラムは暴走してしまう
- 実行命令を一つ一つ指定するのは煩わしい
より人間に親しみやすい高級言語
<!--
高級言語であるFORTANによるプログラム例
-->
Z=X+Y
高級言語の特徴
- より人間に分かりやすい「高級な」形式で表現
- 1957年にFORTAN、1960年にCOBOLが登場
高級言語の課題
- 高級言語の登場により生産性や品質は大きく向上したが、それ以上にコンピュータの普及と発展が爆発的に進み、生産性向上に対するニーズは収まらなかった
※「ソフトウェア危機」:「20世紀末には世界総人口がプログラマになっても、増大するソフトウェアへの需要に追いつかない」と1960年代後半にNATOで宣言された。
分かりやすさを重視した構造化プログラミング
構造化プログラミングとは
- オランダ人学者エドガー・ダイクストラ氏によって提唱
- 「正しく動作するプログラムを作成するためには、分かりやすい構造にすることが重要である」という基本的な考え方
- 具体的な方法として、プログラムを分かりづらくしている元凶であるGOTO文を廃止して、ロジックを順次進行、条件分岐、繰り返しの3つの構造だけで表現することを提唱
時代が進み、ハードウェア能力が進歩したことから、わずかな実効効率の改善は、システム全体から見れば無駄な努力となり、それよりも分かりやすいプログラムを書くことのほうが重要な課題になっていった。
構造化言語の登場
構造化言語とは
- 構造化プログラミング理論に基づくプログラミング言語
- 代表的なものとして、ALGOL、Pascal、C言語がある
- 基本三構造(順次進行、条件分岐、繰り返し)を明示的に記述が可能
- 変数定義を局所化するローカル変数や引数の値渡し機能を提供
- 現在広く使われているJavaやC++、C#などは直径の子孫であり、多くの性質を受け継いでいる
保守性と再利用性を重視したプログラミング言語の進化の歴史
人間に親しみやすいプログラムを書く
機械語〜アセンブリ言語〜高級言語の進化の歴史では、
プログラミング言語の表現力向上、つまり、「コンピュータにやらせたい仕事を、いかに簡単に、かつ人間に親しみやすい方法で表現するか」を追求した進化。
人間に親しみやすいプログラムを書くという目的は、この時代にほぼ達成できた。
一方でそれだけではソフトウェア危機を救うことができなかった。
プログラムの寿命
コンピュータが登場した当初は、毎回0からプログラムを作り直していた。しかしソフトウェアに対する要求が膨れ上がり、毎回全てを作り直していては間に合わなくなっていった。
このため出来上がったプログラムに修正を加えながら対応するケースが増えていった。
その結果プログラムの寿命が伸び、プログラミング言語に求められる機能も変化していった。つまり、プログラムを理解するための機能(保守性向上)や、複雑さを避け間違いを起こさないようにする機能(品質向上)を重視するようになっていった。
また実績のあるプログラムを使い回して全体の生産性を上げること(再利用促進)も重要になっていった。
参照