Javaって何ですか?

Javaを使ったことがある人も、初めて名前を聞いた人も、まずはJavaがどんなものなのかをざっと見てみましょう。

[Programing on Javaへ]


動くJavaを見てみよう

はじめに、Javaとはどんなものかを説明しましょう。

Javaは、基本的にはC,C++,Pascalなどと同じ、汎用のプログラミング言語です。違っているのは、Javaがはじめからインターネットを通じて使われることを前提に設計されているということです。つまりJavaのプログラムは、ネットワークを通してネットスケープなどのWWWブラウザで読み込んで、ブラウザの中で実行させることができます(このようなプログラムをアプレットといいます)。

もちろん、Javaのプログラムを(ネットスケープなどのブラウザの中でなく)単独で実行することもできます。このようなプログラムをアプリケーションといいます。

つまり、Javaのプログラムには大きく分けて2通りの種類があるということです。

Javaプログラムの種類
アプレット Webブラウザの中で実行できる。ネットワークを通じてダウンロードして自動的に実行可能。
アプリケーション 独立したプログラムとして実行可能。ただし、ブラウザ内での実行はできない。

下に、Javaのアプレットとして作った簡単なお絵描きプログラムを載せます。

ここにアプレットが表示されるはずなのですが・・・

これがちゃんと動けば、あなたのブラウザはJavaをきちんとサポートしています。Javaを使えば、この程度のプログラムならば150行弱で簡単にできてしまいます(ソースコードはこちらに載せますが、今は分からなくても結構です)。ちなみにこのアプレットはアプリケーションとしても動作できるように作られています。

とにかく、「Javaを使うとインターネットのホームページ上にプログラムを貼り付けて動かすことができる」ということが分かってもらえたでしょうか?

[ページの先頭] [Programing on Javaへ]


Windows95/NTとMacintoshとWorkstationと・・・

世の中にはいろいろな種類のコンピュータが存在しています。でも、その中で皆さんに身近でメジャーなマシンといえば、

の3つでしょう。Javaのプログラムは、

これらのどのマシンでも同じように動く

のです。これは驚異的な能力です。普通、ウィンドウズのプログラムはマックでは動きませんし、ましてやワークステーションで動くことなどありません。しかしJavaではこれが可能なのです(とSunは宣伝していますが、実際は全く同じように動くというわけにはいかないのが現実ですが・・・)。

どうしてこのようなことができるのでしょう?

普通のプログラム(C,C++などで書かれた)は、ソースコードをコンパイルして実行コードを生成します。この実行コードは、コンピュータのCPUによって直接解釈して実行できる機械語コードですから、コンピュータが変わればCPUも変わってしまうため、そのまま実行することができなくなります。これがウィンドウズのプログラムはマックで動かない最大の理由です。

Javaは、ソースコードをコンパイルしてバイトコードという特別なコードを生成します。バイトコードは現存するどのCPUの命令コードとも違って、Javaの開発チームが独自に設計したコードです。したがってこのままではどのコンピュータでも実行できません。そこで開発者チームは、バイトコードを解釈して実行する仮想的なマシンを考えました。これをJava仮想マシン(Virtual Mchine,VM)といいます。仮想マシンだけをいろいろなコンピュータ用に作って準備しておけば、バイトコードはまったく変更なしに、いろいろなコンピュータでJavaのプログラムを実行することができます。このようにして、Javaはマシンの壁を取り除いてさまざまなコンピュータで同様に動作するプログラミング環境を作り上げることに成功しました。この結果、WWWのページをどのコンピュータで見ているかに関係なく、Javaのアプレットを動かすことができるのです。

もちろん、いいことばかりではありません。

仮想マシンを使うと、マシンの違いを吸収することはできますが、その反面、遅くなります。ネイティブなC++の実行プログラムと比較すると10倍から20倍、下手すると100倍くらい遅くなるようです(正確に計ったわけではありません。感じです)。これは、バイトコードを解釈しながら実行するわけですから仕方ありません。ですから、計算ばかりを繰り返し行うようなシミュレーションプログラムにはJavaはあまり向いていないようです。しかし、普通のJavaプログラムは人間と対話しながら処理を進めるものが大半でしょう。このようなプログラムの場合、人間が入力にもたもたしている時間が処理の大部分を占めるので、Javaの処理の遅さなど問題ならないくらいになります。また、最近のJavaの仮想マシンにはジャストインタイム(Just In Time,JIT)コンパイラという機能がついています。これは、いったん実行したバイトコードを機械語コードに変換したままとっておくことによって、2回目からは解釈しないで実行できるようにするテクニックで、これを使えばC++のネイティブプログラムと比べても遜色ないくらいの性能になるようです。

さらに、最近ではJavaのバイトコードをネイティブな機械語コードとして実行するようなJavaチップと呼ばれるCPUの開発も進んでいるようで、これが現れると、スピードの問題はまったくなくなることでしょう。

[ページの先頭] [Programing on Javaへ]


オプジェクト指向プログラミング

もう一つのJavaの特徴は、完全なオブジェクト指向プログラミング言語であるということです。

オブジェクト指向とは現在のところ最も進んだプログラミング手法で、オブジェクト(日本語で言うと「もの」)を中心としてプログラムを考えようとする考え方です。「もの」を中心にするといっても分かりづらいので、例をあげて説明しましょう(ここで述べる例は、概念的なものです。もっと詳しいオブジェクト指向については、そのうち説明します)。

あなたは今、ウィンドウシステム環境でプログラムを作っているとしましょう。一般に、ウィンドウシステムでのプログラムにはウィンドウが必要です。そこであなたのプログラムにもウィンドウを出す必要があります。さらに、ウィンドウにはボタンが1つあって、それを押すとウィンドウは閉じて、プログラムは終了するようにしたいとします。

このような場合は、Javaにあらかじめ用意されているフレーム(Frame)というオブジェクトを使います。Javaのフレームは、一般に言うウィンドウを表すためのクラスで、普通のウィンドウが備えている機能(タイトルバーをドラッグすると移動するとか、サイズをマウスで変更できるとか)をすべて備えています。したがってこのフレームオブジェクトを使うことで簡単にウィンドウを作り出すことができます。

また、このウィンドウにボタンを置くには、やはりJavaに準備されているボタン(Button)オブジェクトを使い、フレームに貼り付けます。ボタンは「押す」ことができ、押されたことをフレームに伝えます。押されたことを伝えられたフレームは、自分自身を閉じて、プログラムを終了させます。

この例では、フレームとボタンという2つのオブジェクトが出てきました。フレームはウィンドウとしての役割を知っており、つくられた直後からウィンドウとして機能します。ボタンも同様です。

このように、自分自身の役目を知っているオブジェクトを組み合わせてプログラムを組みたてていく手法が、オブジェクト指向プログラミングといえます(簡単に言えば)。

[ページの先頭] [Programing on Javaへ]