00:00:00ここでは、Java言語が情報技術のどのような歴史の中で生まれたのか、と言うこととJava言語がどのように発展してきているかについてまとめています。Web)とJava言語プログラミング言語とインターネットに関する年表ここでは、Java言語がどのような歴史の中で生まれたのかを年代で把握するためにプログラミング言語とインターネットに関する簡単な年表を示します。Java言語はオブジェクト指向言語とインターネットの発展の中で生まれ、またそれらの情報技術と深い関わりを持ちながら発展してきている言語であり、それらの歴史を示すことがJava言語の歴史を把握する上で有効であると考えられるからです。言語は、オブジェクト指向プログラミング言語です。Eiffelなど様々な言語があります。私なりに、オブジェクト指向言語の特徴を一言で言うとすれば、プログラムモジュールの再利用を行うのに優れた言語だといえます。オブジェクト指向言語であるJava言語もこの特徴を持っています。その結果がJava言語の優れたAPIなどに現れていると考えられます。ところで、そもそもプログラミング言語とは何なのでしょう。それは「ある手続き的な処理を記述する言語」だと言えます。プログラミング言語は「ある手続き的な処理を効率化する」ために書かれます。平たく言えば、人間がやるには面倒なことをコンピュータにやらせるための言語、人間からコンピュータへの命令の集合、と考えればわかりやすいかと思います。このようなプログラミング言語によって、人間はコンピュータに面倒な仕事をやらせることができます。コンピュータに仕事をやらせるためには、コンピュータの仕組みを理解する必要があります。多くの人々にとってこの仕組みを理解することは困難であり、またコンピュータの仕組みにあわせて一々命令を記述するのも面倒です。そこで、プログラミング言語はより人間に近い形に発展しました。このように発展した言語を高級言語と言い、コンピュータのの命令に一々対応したプログラミング言語を低級言語と言います。人間の言葉に近づいたプログラミング言語によって、多くの人がプログラミングを行うことができるようになりました。プログラミング言語が人間の言葉に近づいただけでは、プログラミングの生産性は満足行くものにはなりませんでした。そこで、多くのプログラマー達は、構造化プログラミング技法と言うプログラミング技法を用いてプログラミングを行うようになりました。構造化プログラミング技法とは処理の流れがわかりやすいようにプログラムを書き、手続き処理を分離(サブルーチン化)し、プログラムの可読性を高める技法です。この技法を採用することで一度書いたプログラムが読みやすくなり、修正や再利用を行いやすくなりました。サブルーチン化した手続き処理を体系化しまとめたプログラムモジュール(ライブラリ)を作成することで一度作成した処理を有効に再利用することができるようになりました。プログラミング言語とはそもそも手続き処理を記述するための言語なので、ライブラリはプログラミング言語のためのプログラムと考えるととらえやすいかもしれません。このように構造化プログラミング技法によってプログラミング言語は非常に生産性の高いものへと発展してきました。ライブラリを有効に使うことで短時間に生産性の高いプログラムを書くことができるようになりました。ライブラリが巨大化しまた、コンピュータの扱う情報量が多くなるにつれて、このようなプログラミング技法にも問題点が見えてきました。その問題点とは、ライブラリによって処理を簡単に記述できるようになっても、管理する情報(データ)が大きくなりプログラマーがそのデータを把握できなく(できたとしてもミスを犯しやすく)なってきたという点です。ライブラリ自体も巨大化しプログラマがそれを把握できなくなってきたと言う問題点もあります。このような問題点を解決すべく現れたプログラミング言語がオブジェクト指向プログラミング言語です。オブジェクト指向言語では情報とその情報に関する処理をまとめて管理することでプログラマが把握しなければならない情報(データ)の量を少なくし、大きなプログラムでも簡単に作成することができるようになっています。ここまでの話の中でオブジェクト指向言語が生まれてきた背景を説明してきましたが、私が冒頭でオブジェクト指向言語は「プログラムモジュールの再利用を行うのに優れた言語」と述べた理由がおわかりでしょうか。これまでの流れの中で、新しいプログラミング言語はそれ以前の言語よりも、楽にプログラムを組むことができるようになってきていると言うことがわかったかと思います。オブジェクト指向でない言語を使っていたプログラマがオブジェクト指向言語に移行して、プログラムの作成に時間がかかるようになったとしたら、それはまだ新しい言語に慣れていないか、オブジェクト指向言語の使い方を間違えているかのどちらかです。次は、オブジェクト指向言語の中でJavaがどのような特徴を持っているかという話題です。C++言語があります。C++はその名前の通りC言語にオブジェクト指向言語の機能を拡張した言語です。いった経緯から、C++ではCのプログラムを含めることができます。そのために情報と処理(データとその操作)がまとまっているというオブジェクト指向の特徴(利点)を無視したプログラムを書くことができてしまうなどの問題点があります。C++はCのプログラマにとっては非常に習得しやすいと言う利点もあります。ところでJavaはよくC++の複雑な機能を除いてシンプルにした言語と言うような表現を聞くことがあります。このような表現は的を得た表現だと思います。C++にあってJavaにない複雑な機能とは、先程述べたCとの高い互換性や多重継承・演算子のオーバーロード・ポインタ演算などが当たるかと思います。確かにこのような機能を使いこなすためにはある程度の習熟が必要で複雑な機能かと思われます。このような機能を省略することで、Javaはより習得しやすい言語となっているわけです。言語は、元々組み込み用の言語として開発されました。今日、Javaはインターネットのためのプログラミング言語として知られています。Javaの高い互換性と安全性が、システムの停止を許さず、異機種間の接続を要求するネットワークシステムのニーズに応えた結果と言えます。WWWとは情報を公開したい人がサーバ上にその情報を登録し、その情報を閲覧しようとする人はブラウザと言うソフトでその内容をインターネットを通じて閲覧すると言うシステムです。このシステムによって個人が簡単に情報を発信できるようになり、またこのシステムがインターネットの爆発的な普及のきっかけになったと考えられています。当初はWWWは情報の公開と閲覧と言う単純な形でしたが、そのシステムは速い速度で進化してきました。閲覧する側が情報の公開側に情報を送ることができるようになったり、閲覧者同士がコミュニケーションをとれる電子掲示板システムが用意されたりしました。これらの技術を発展させブラウザソフトからデータベースを操作することなども行われるようになり、WWWはインターネットの世界だけでなく、組織内のイントラネット上で基幹業務を支えることができるシステムとして注目されるようになります。~このようにWWWが発展する中で、ブラウザのみでデータベースへの操作を行うのは手間がかかり難しいと言う問題も現れるようになってきました。そこで、クライアント側に専用のソフトがあれば使いやすくなり手間も省けると考えられるかもしれませんが、ネットワーク上には様々なマシンやOSが存在します。それぞれのマシンやOS用にたくさんのソフトを開発するには手間がかかります。そこでブラウザにJavaの動作環境を組み込むと言うことが考えられました。これによってブラウザでデータベースにアクセスする事ができ、また優れたインターフェイスを実現することが可能になりました。Javaのプログラムは利用する度にサーバからダウンロードされるのでクライアントのアプリケーションを常に最新のヴァージョンに保つことにも成功しました。Javaのプログラムをアプレットと呼びます。アプレットだけでなくJava言語はWWWサーバの機能も拡張します。前述の通りWWWサーバはその発展の中で、電子掲示板システムやデータベース接続などのために、動的に文書を生成する機能を要求されるようになりました。Interface)などの技術を用いることになります。SSIはWWWサーバに、CGIはOSに依存するため、ネットワーク上では扱いにくいと言う面がありました。そこでWWWサーバに動的に生成した文書を送るシステムとしてサーブレットと言うシステムが考えられました。これによって、WWWサーバやOSに依存することなく、動的に文書を生成するシステムを構築することができるようになりました。動的に生成した複数の文書を一つの文書としてまとめ、閲覧者にとって見やすい形で複数の情報を提供できるポートレットと言う技術も存在します。このシステムはその名前の通りポータルサイト(ユーザがネットサーフィンを開始する起点となるホームページ)を作成するために用いられています。