オブジェクト指向補足 ?>

オブジェクト指向補足

オブジェクト指向はなぜ誕生したのか?

Javaに限らずですが、技術を学習するときはその技術の表面的なテクニックや応用技術ばかりを学ぶのではなく、技術そのものが誕生した背景や、その技術が世の中にどのような経緯で浸透して、利用されるようになって来たのかを理解することはとても重要です。

Smalltalk(スモールトーク)とSimula(シミュラ)

オブジェクト指向の始まりと言われているプログラミング言語と思想は、SmalltalkとSimulaからスタートしました。これらの技術が登場したのは、なんと1970年代、いまから約45年も前のことです。

アラン・ケイ

オブジェクト指向という言葉を作ったのはアラン・ケイという人物だと言われています。アラン・ケイは「パーソナルコンピュータの父」と呼ばれるい人物です。彼は「未来を予測する最善の方法は、それを発明することだ」という有名な言葉も残しています。現在では当たり前に利用されているパーソナルコンピュータですが、当時のコンピュータというのは高価で大きく、複数人で“共有”するのが当たり前でした。それを万人向けに提供できるように考えていただけでも、すごい人物です。アップルのスティーブ・ジョブズも、このアラン・ケイの思想や研究所を見学した体験から、LisaやMacintoshの構想を思いついたと言われています。

Smalltalk

Smalltalkは、オブジェクト指向の考え方に基づいて作られた環境で、ソフトウェアを作るためのプログラミング言語と、その実行環境を合わせて提供していました。Smalltalkの中では、ウィンドウも数字も文字も、すべてがオブジェクトとして作られています。Smalltalkを使う人は、それらのオブジェクトを組み合わせたり、自分でオブジェクトを作ったりすることで、絵を描いたり、音楽を演奏したり、新しいソフトウェアを作ったりすることが出来るようになっていました。このSmalltalkはアラン・ケイが生み出したものです。

Simula

Simulaは、シミュレーションのために作られたプログラミング言語です。登場はSmalltalk以前でした。Simulaの特徴としてシミュレーション対象を大量に生成する機能がついていました。この機能がオブジェクト指向の性質に基づいていたので、Smalltalkはこの性質などを受け継ぎオブジェクト指向を完成させました。

メジャーになれなかったオブジェクト指向

上記のように、オブジェクト指向自体はかなり早い時期から誕生していましたが、オブジェクト指向を実現できる環境を揃えるための費用は高価であり、オブジェクト指向で作られたソフトウェアの処理速度が遅かった、などの理由から誕生して10年以上もの間、オブジェクト指向は次世代技術だと呼ばれ続けていました。

Javaの誕生

1994年の終わり頃、当時としては衝撃的な内容でJavaが登場しました。当時のソフトウェア開発環境は有償での提供も一般的で、無償の開発環境というだけではなく、当時はJavaにしか実現できなかった、Webページの中にプログラムを埋め込むことも出来ました。現在では何も驚くことはありませんが、当時のプログラマー達にとってはかなり衝撃的な内容だったようです。その当時のウェブサイトでは、レイアウトもシンプルなものばかりで、サイトの内容も文字と静止画だけでした。そんな時代に、Javaを使えばWebページの中に絵が動いたり、マウスに反応するものをページの中に配置できるというのは衝撃的でした。この印象が強すぎて、当時はオブジェクト指向のプログラミング言語という認識ではなく、動くホームページを作るためのプログラミング言語だと誤解されていました。
また、登場した当時は業務システムにはJavaが利用されておらず、処理速度もまだ低速でした。
しかし、21世紀に入り、コンピュータの性能は向上していき、メモリやハードウェアといったコンピュータを支える機器の性能も一緒に向上していきました。Javaはこのコンピュータの進歩の恩恵を大きく受け、処理速度が遅いという問題も解決され、充実したライブラリや開発環境、移植性の高さが注目を浴びました。

また、マイクロソフトが .NET(ドットネット)というオブジェクト指向プログラミング言語を発表したことで、システム開発言語にはオブジェクト指向プログラミング言語が普及していきました。

現在のオブジェクト指向関連技術

オブジェクト指向関連の技術としては、プログラミング言語としてのJava、C++、C#など、表記法(UML)や方法論など、オブジェクト指向でシステム開発をするには必要なものがすべて揃っています。
現在流行しているスクリプト言語では、RubyやPythonもオブジェクト指向で設計されています。オブジェクト指向でのシステム開発はデファクトスタンダードとなっており、誕生して20年経過した今でも、国内ではJavaで構築されたシステムの開発・運用が活発です。

オブジェクト指向が誕生するまでのプログラミングについて

少し話を遡って、プログラミングの歴史にも触れながら、オブジェクト指向が誕生した背景についてみていきましょう。

オブジェクト指向の仕組みは複雑で理解しがたいものです。しかし、オブジェクト指向以前のプログラミング技術では何ができて、どこが限界なのかを把握することによって、オブジェクト指向の思想や仕組みがなぜ誕生したのかが理解できるはずです。

機械語

基本的にコンピュータというものは2進数(2を基数として表現した数値で0と1だけで数を表現する)で書かれた機械語しか解釈することが出来ません。現在ではJavaやC言語、その他の高級言語と言われるプログラミング言語があるため、プログラマが機械語を意識する場面はほとんどありません。しかし、コンピュータが初めて登場した1940年代のころは、プログラマ自身が機械語を使って1行1行プログラムを書いていました。

上記のプログラムは算術計算を実行する命令が書かれたソースコードです。機械語でのプログラミングはとても難解なものであり、ごく限られた一部の人だけがコンピュータを扱う時代でした。

アセンブリ言語

機械語でのプログラミングは非効率であり、それを改善するためにアセンブリ言語が登場しました。アセンブリ言語では、無機質な機械語を人間にわかりやすい記号に置き換えて表現します。先程の機械語のプログラムをアセンブリ言語で書き換えると以下のようになります。

アセンブリ言語を使って書いたプログラムは、それをコンパイルするアセンブラと呼ばれる別のプログラムに読み込ませて機械語を生成し、最終的にコンピュータにプログラムの内容を理解させています。このアセンブリ言語の発明で、プログラムは非常にわかりやすくなり、機械語でのプログラミングに比べると、間違いも減り、後からの修正も楽になりました。しかし、コンピュータの実行命令を1つひとつ指定するプログラミングは非常に煩わしいものでした。

高級言語

アセンブリ言語よりも、より人間に親しみやすい表現形式でプログラムを書くために高級言語が発明されました。高級言語では、コンピュータが理解する命令を1つひとつ記述するのではなく、より人間にわかりやすい形式でプログラムを表現しています。高級言語の先駆けとなった、FORTRANというプログラミング言語で先程のプログラムを書くと以下のようになります。

先程のアセンブリ言語と比べてみても、高級言語のわかりやすさは格段に進化しています。FORTRANで記述したプログラムは数学の計算式とよく似た形式をしていますから、プログラムをまったく書いたことがない一般の人でも理解できる内容だと思います。
FORTRAN(フォートラン)は、1954年にIBMのジョン・バッカスによって考案されています。コンピュータが登場して10年ちょっとで、既にこのような高級言語が発明されたことになるので、コンピュータ業界の技術革新の速さを感じます。

構造化言語

高級言語の登場により、プログラミングの生産性や品質は大きく向上しましたが、それ以上にコンピュータの普及と発展が爆発的に進みました。ソフトウェアの低品質、納期遅れ、予算超過が頻発し、大規模なプログラムを正当に動作するように記述することの困難さが認識されるようになってから、さまざまなアイディアや新しいプログラミング言語が提案されました。その中で、最も注目を集めたのが構造化プログラミングでした。
構造化プログラミングの基本的な考え方は「正しく動作するプログラムを作成するには、わかりやすい構造にすることが重要である」というものです。構造化プログラミングでは、ロジックを順次進行、条件分岐、繰り返しの3つの構造だけで表現することを提唱しました。Java基礎編でも学習したように、構造化プログラミングでは、プログラムの制御を基本的には順次実行で考え、何かの分岐ロジックを組み込みたい時にはif文やcase文、繰り返しロジックではfor文やwhile文を使用して、プログラミングをしていきます。現在主流なプログラミング言語ではこの構造化プログラミングを採用しています。

オブジェクト指向は過去の技術の延長線上に誕生したもの

機械語から高級言語までの発展の背景には、少しでも人間に理解しやすいプログラムでコンピュータを制御できるようにして、プログラムの記述ミスや修正のしやすさを向上させる、という意図がありました。さらに、構造化言語では高級言語で記述されたプログラムの保守性やわかりやすさに重点をおきました。また、構造化プログラミングが浸透した時期には、サブルーチンを使用して同じ処理を一箇所にまとめ、さらにプログラムの可読性を上げるような技術が発達していました。
しかし、これらの技術だけでは大規模化していくシステムの開発効率の向上や、プログラムの保守性を高めることには限界がありました。そこで、これまでの技術の問題点を解決する形でオブジェクト指向の思想が注目を浴び、Javaなどの登場も重なって、オブジェクト指向は普及していきました。