2002-05-17 発行 v1.00 2002-05-18 修正 v1.10 2002-07-19 修正 v1.11 引用URL変更 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃.&&&& **** %%%%.  JavaScript&Javaで目指そう!基本情報技術者試験  ┃ ┃&&&&&&******%%%%%%  執筆&編集 斎藤末広 suehiro@he.mirai.ne.jp  ┃ ┃'&┃&''*┃*''%┃%'  発行    江口昌宏 jmaga@yscon.co.jp    ┃ ┗━┻━━┻━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ 広告募集:http://www2.odn.ne.jp/~egu33/jmaga/java-maga.html ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓  第15号 2002/05/17  アプレットの基本構造 ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛  プログラムを作成する上での注意事項:  Windows とIE を前提としています。  拡張子を表示するに設定してください。  予告では,「簡単なアルゴリズム」を扱う予定でしたが,変更して,アプレッ トを説明します。 ------------------------------------------------------------------------ ▼ ブラウザで動作する,Java プログラム  今までJマガで扱ってきた Java のプログラムは,javac でコンパイルして, java xxx で実行しました。このように,java xxx と実行するものは,Java の 世界ではアプリケーションといいます。  また,Java で作成したプログラムには,java xxx と実行させずに,IE などの ブラウザを利用して動作させるプログラムもあります。そのような Java のプロ グラムを Java アプレット,略してアプレットといいます。  アプレットを利用するとブラウザで動作するため,インターネットでのやりと りが簡単にできます。また,グラフィックの表示なども簡単に実現できます。  しばらく,アプレットを中心にJマガを進めていきたいと思います。 ------------------------------------------------------------------------ ▼ アプリケーションとアプレット  アプリケーションという用語は,もともと,オペレーティングシステム(OS)の 上で動作するプログラムを指します。Java の世界では,この意味をさらに限定し て OS + JavaVM の上で動作させる Java のプログラムをアプリケーションと呼 んでいます。  JavaVM は,Java Virtual Machine の省略で,Windows や Mac OS の上で動作し, Java が動作する環境を実現します。Java で開発したプログラムからみると, そのコンピュータが,Windows パソコンやマックでは無く,ただ,Java が動作す 同じような仮想機械に見えるため,Java VM と呼ばれます。Java のアプリケー ションは,この JavaVM 上で動作します。  アプレットという用語は,あえて日本語に直すと,小型版アプりケーションで す。アプリケーション+レット(小さいかわいいもの)の造語です。アプレット は,オペレーティングシステム上でインターネットブラウザ(ネットスケープと かインターネットエクスプローラ)を動作させ,さらにその上で動作させます。 Java のVMは,ちょうどブラウザの中に組み込まれた感じになります。  この前の基本情報技術者試験の午前の問題に「Java の仮想マシン(VM)さえ用 意したら,アプレットは動作する」のような記述がありましたが,これは間違い です。アプレットは,ブラウザが必須です。 (javaの世界の)アプルケーションの動作環境     アプリケーション    Java VM  OS ハードウェア アプレットの動作環境     アプレット    ブラウザ(Java VM を内蔵)   OS  ハードウェア ------------------------------------------------------------------------ ▼ アプレットと HTML  アプレットを作成するときに,javac でコンパイルするのは,Java のアプリ ケーションと同じです。ただ,アプレットを動作させるときは,ブラウザを利用 しますので,HTML が必要になります。通常の HTML に タグを利用して 書きます。  以下は,簡単な HTML の例です。 例 j15-01 Hello.htm

 この HTML を表示させると,水平線(
)の下に枠が,横300*縦200 ピクセル の大きさで確保され,その枠の中で,xHelloApplet.class が動作します。  http://www.yscon.co.jp/j/java/jmaga/j15/Hello.htm  で確認できます。 ------------------------------------------------------------------------ ▼ 単純なアプレット  "Hello, World"を表示するアプレットのプログラムは,以下のようになります。 例 j15-02 xHelloApplet.java import java.applet.Applet; import java.awt.Graphics; public class xHelloApplet extends Applet { public void paint(Graphics xg){ xg.drawString("Hello, World",100, 120); } }  これを"Hello, World"と表示するアプリケーションと比較します。 例 j02-01 xHello.java public class xHello { public static void main(String [] xargs){ System.out.println("Hello, World"); } }  ともに x で始まる名称は自分で変更することができます。 ------------------------------------------------------------------------ ▼ アプレットとアプリケーションのプログラムソース上の違い  アプレットを中心にアプリケーションと比較して,解説します。 例 j15-02 xHelloApplet.java a01: import java.applet.Applet; a02: import java.awt.Graphics; a03: a04: public class xHelloApplet extends Applet { a05: public void paint(Graphics xg){ a06: xg.drawString("Hello, World",100, 120); a07: } a08: } 例 j02-01 xHello.java b01: public class xHello { b02: public static void main(String [] xargs){ b03: System.out.println("Hello, World"); b04: } b05: }  説明しやすいように,プログラムのそれぞれの行に番号をいれました。  上がアプレットで,下がアプリケーションです。  両方のプログラムとも,単純に,Hello, World と表示するだけです。 ------------------------------------------------------------------------ ▼ 2つのクラスをimport(輸入)  アプレットの方の最初の2行を見ます。 a01: import java.applet.Applet; a02: import java.awt.Graphics; import は,「輸入」するという意味です。最初の行は,java.appletにある Applet クラスを輸入するという意味です。同じく,その下の import では java.awt に ある Graphics クラスを輸入します。  java.applet.Applet という書き方は,java フォルダにあるappletフォルダに ある,Appletクラスという意味です。  import によって,このプログラムの中で,Applet クラスと Graphicsクラスが が使用可能になります。  Applet クラス,Graphics クラスは,4 行目と5 行目で使用されています。  クラスというのは,Javaのプログラムをコンパイルしてできたものです。 ------------------------------------------------------------------------ ▼ アプレットの親は,Applet クラス  xHelloApplet の 4 行目(a04)を見てみます。 a04: public class xHelloApplet extends Applet {  このプログラム(クラス)を,xHelloApplet という名前にし,Applet クラス を拡張(extends)すると書いてあります。ここで,先ほど import した,Applet クラスを利用しています。  Applet クラスを拡張して,xHelloApplet を作成することになります。このと き,元になる Applet クラスを親,拡張されて出来る xHelloApplet クラスを子 と言います。親から子に拡張されると言うことで,継承という用語も使われます。  では,ここに対応する,アプリケーションの方をみています。 b01: public class xHello {  ここでは,extends がありません。親はいません。(正確には,書いていない 時は,Objectという究極のオブジェクト(クラス)を親としています。)  オブジェクト指向のプログラムの特色として,親のプログラムを拡張して, 子供のプログラムを作成することが出来ます。その場合,基本的な動作は親プロ グラムから譲り受け,親との違いを,その子供のプログラムで書きます。アプリ ケーションの方も,親を持つことが出来ますが,今日のサンプルは,単純な例で すので,単体で動作しています。  なお,最初についている,public は,他から利用できる存在であることを示し ています。publicは,公け,という意味でした。これは,別の号でまた扱います。 ------------------------------------------------------------------------ ▼ アプレットの表示は,paintメソッド  次を見てみます。 a05: public void paint(Graphics xg){  a05 行目は,public ,公開する,void で返す値はない,paint が関数(メソ ッド)の名前,関数に渡す値は,Graphics クラスの分身の xg という意味です。  paintするときには,Graphics の力を借ります。その分身を xg としました。こ の分身 xg がペンを担いで絵や文字を書く感じです。  この行を見ただけでは分かりませんが,この paint という関数(メソッド)は, 親クラスの Applet クラスで特別に定義されている関数(メソッド)です。「画面 に描画するときにはこれをしなさい」という仕事(メソッド)です。子供のクラ スで paint を定義しないで,親に任せておくと,ただの空白が表示されます。  Applet クラスと xHelloApplet クラスの構造は,こんな感じになります。 Applet クラスの中身  (2)表示する必要があれば,paint を実行しなさい。  (4)paint は,特に定義がないときは,白紙を表示 xHelloAppletクラスの中身  (1)基本的に親の動作を実行する。  (3)ただし,paint は,xxxx  xHelloApplet クラスが実行されるときは,(1)が動作して,親である,Applet クラスの指示通りに動きます。(2)で,paint を実行するとあれば,(3)か(4) を 実行しようとしますが,子供の方の記述が優先して,(3)が実行されて,(4)は実 行されません。  親と子に同じ命令があれば,子供の方が優先されます。  アプリケーションの方を見てみましょう。 b02: public static void main(String [] xargs){  main関数(メソッド)がありました。しかし,この main メソッドは,アプレッ トにはありません。Java のプログラムは,実行するときは,まず,main から実 行されます。アプレットに main がないのは,親の Applet クラスの中に main があるか,それにかわるものがあると予想されます。これは,このプログラムを 見ただけでは分かりませんね。xHelloAppletは,Applet を拡張していますので, Applet に main (もしくはこれにかわるもの)があれば,それが実行さるわけ です。たぶんその main (もしくはこれにかわるもの)の中で,paint を実行す るとかかれているのでしょう。  main(もしくはそれに代わるもの) は,Applet クラスに定義してあると予想 されますので,xHelloApplet クラスと Applet クラスはこんな関係ということに なります。 Applet クラスの中身  main(もしくはそれに代わるもの)   (2)表示する必要があれば,paint を実行しなさい。   (4)paint は,特に定義がないときは,白紙を表示 xHelloAppletクラスの中身  (1)基本的に親の動作を実行する。親のmainメソッド(それに代わるもの)を実    行する  (3)ただし,paint は,xxxx ------------------------------------------------------------------------ ▼ アプレットで文字を書くのは,drawStringメソッド a06: xg.drawString("Hello, World",100, 120);  "Hello, World"を 横100,縦120 の位置に描きます。xg.drawString の xg は, a05 public void paint(Graphics xg) のところで,登場した,xg です。  この xg は,Graphics クラスの分身(インスタンス)でした。drawString の具 体的なやり方は,Graphics クラスに書いてあります。  xg が,ペンを担いで,画面に一生懸命,字を書くところを想像して,再度実行 して見て下さい。  確認 → http://www.yscon.co.jp/j/java/jmaga/j15/Hello.htm ------------------------------------------------------------------------ ▼ アプケーションで文字を書くのは,System.out.printlnメソッド  文字が表示されるところのアプリケーション側のプログラムをみましょう。 b03: System.out.println("Hello, World");  これは,System にある out の println メソッドを使って文字列を表示させ るということでした。System と言うのは,最初から基本的に用意されているもの です。特殊な存在ですので,また,いずれ他の号で,扱うことにします。 ------------------------------------------------------------------------ ▼ 2つのクラスを利用,親子関係と友達関係  オブジェクト指向の用語が出てきましたので,確認をします。 例 j15-02 xHelloApplet.java a01: import java.applet.Applet; a02: import java.awt.Graphics; a03: a04: public class xHelloApplet extends Applet { a05: public void paint(Graphics xg){ a06: xg.drawString("Hello, World",100, 120); a07: } a08: }  この xHelloApplet.java は,Applet クラスと Graphics クラスの2つのクラ スを利用して作成しました。  Applet クラスを元にして拡張し,Graphics クラスは分身を定義して,それに 仕事(drawString)をさせました。  このように,一つのクラス(プログラム)の中から他のクラスを利用するやり 方は,二種類あります。  一つは,拡張です。これは,Appletクラスを親として,自分を子供にする関係 となり,専門用語では「継承」といいます。この場合は,親クラスの動作など, そのまま自分のものにします。  もう一つは,仕事の割り振りです。別のクラスに仕事を片付けてもらっていま す。専門用語では,「委譲(いじょう)」といいます。Graphics クラスに, drawStringをしてもらいました。  継承するときに,子供の方を,親のクラスのサブクラスといいます。今回の 例では,xHelloApplet クラスは,Appletクラスのサブクラスと言われます。  継承は,縦(親子)の関係,委譲は,横(友達)の関係と私は言っています。  継承すると,子供のクラスだけを見てもプログラムの動作が分かりません。  今回の例では, Applet クラスの中身  mainは   (2)表示する必要があれば,paint を実行しなさい。   (4)paint は,特に定義がないときは,白紙を表示 xHelloAppletクラスの中身  (1)基本的に親の動作を実行する。親のmainメソッドを実行する  (3)ただし,paint は,xxxx でした。  継承した場合,親クラスの動作を知っていないと逆にプログラムが理解しがた くなります。アプレットが難しく感じるのは,この Applet クラスで何をしてい るかがよく分からないところにあります。  次回は,アプレットが難しく感じるところを重点的に解説していきたいと思い ます。 ------------------------------------------------------------------------ ▼ 次号の予定  アプレットに登場した要素をまた,解説します。今回の号に復習になります。  感想は,斎藤まで,suehiro@he.mirai.ne.jp  広告等のお問い合わせ:jmaga@yscon.co.jp ------------------------------------------------------------------------ ▼ 誤字・脱字等の修正,プログラムの修正など,以下の場所で確認できます。 過去の修正版等  http://www.yscon.co.jp/j/java/jmaga/ 登録・削除および広告の案内  http://www2.odn.ne.jp/~egu33/jmaga/java-maga.html ------------------------------------------------------------------------ ▼ 著作権について  このメールマガジンで公開しているプログラムソースは,著作権を当方スタッ フが所有しますが,商用を含めて,再利用,改変,発表を制限しません。  本文に関しては,斎藤末広が著作権を所有します。再利用に関しては,承諾を 必要とします。 広告募集 http://www2.odn.ne.jp/~egu33/jmaga/java-maga.html ------------------------------------------------------------------------ ▼アンケート(以下を返信してください)  この号のJマガは役立ったあるいは勉強になりましたか? 該当するものだけ残してください。 5: 大いに,YES 4: YES 3: 普通 2: NO 1: 大いに,NO その他感想・要望等