中間試験の解答と解説


1:Java言語で次の働きをする予約語を答えなさい。

  1. 新しいクラスの定義を行う
    class

  2. 既にあるクラスの情報をプログラムに取り込む
    import

  3. 既にあるクラスを基(親)にしてクラス定義に使う
    extends

  4. さらに別の機能をクラスに追加する
    implements

  5. クラスの外部に公開するデータであることを表す
    public

  6. クラスの内部だけで使用するデータであることを表す
    private

  7. クラスと関係のあるクラスの内部のみで使用するデータであることを表す
    protected

*これは基本問題です。何も見なくてもできるようにして下さい。

2:Java言語のクラスについて答えなさい

  1. 色のデータのクラスの名前
    Color

  2. 画像のデータのクラスの名前
    Image

  3. 図形の表示を扱うクラスの名前
    Graphics

  4. 文字列のデータのクラスの名前
    String

  5. すべてのアプレットの基になるクラスの名前
    Applet

  6. スレッドのコントロールを行うのクラスの名前
    Thread

  7. スレッドの使用を可能にする特別なデータの名前
    Runnable

*これも基本問題です。何も見なくてもできるようにして下さい。

3:Appletクラスと、その内部の関数について答えなさい

  1. Appletが生成される時の初期設定を行う関数名
    init()

  2. Appletの図形の初期状態の表示を行う関数名
    paint()

  3. Appletが画面に現れた時の処理を行う関数名
    start()

  4. Appletが画面から消えた時の処理を行う関数名
    stop()

  5. 音声データを単純に一度だけ再生する関数名
    play()

  6. 画像ファイルから画像データを作成する関数名
    getImage()

  7. Appletが HTML からデータを受け取るための関数名
    getAttribute()

  8. キーボードが押された時に呼び出される関数名
    keyDown()

  9. Appletのキーボード・フォーカスに関係する3つの関数のうち、 新しいクラスの中で内容を変更してはいけないものはどれですか?
    getFocus()

  10. Appletの関数 resize() はどんな処理を行いますか? その機能を説明しなさい。
    アプレットのサイズの設定(変更)を行う

  11. Appletの関数 repaint() はどんな処理を行いますか? その機能を説明しなさい。
    アプレットのグラフィクの描き直しを要求する。 ( update() を呼び出す。でも正解)

  12. Appletにはマウスのイベントを処理する関数が 全部で6個用意されています。 それらの名前と働きをまとめて説明しなさい。


4:次のプログラムを見て、以下の問に答えなさい

 
 1  import browser.Applet;
 2  import awt.Graphics;
 3  import awt.Image;
 4  class AudioImage extends Applet {
 5         private Image backImage = null;
 6         private String audioURL = null;
 7         protected void init() {
 8             String imageSource = getAttribute("image");
 9             if( imageSource == null ) {
10                  imageSource = "/hokusei/staff/fujiki.gif";
11             }
12             backImage = getImage( imageSource );
13             resize( backImage.width, backImage.height );
14             audioURL = getAttribute("sound");
15             if( audioURL == null ) {
16                  audioURL = "/sounds/ah.au";
17             }
18         } 
19         public void paint( Graphics g ) {
20             g.drawImage( backImage, 0, 0 );
21         } 
22         public void mouseDown( int x, int y ) {
23             play( audioURL );
24         } 
25  }
  

  1. コンパイルの結果できるアプレットのファイルは、 何という名前になりますか?
    AudioImage.class
  2. クラスの定義は何行目から何行目までですか?
    4-25行目
  3. データの初期設定を行う関数の定義は、何行目から何行目までですか?
    7-18行目
  4. 画面の表示を行う関数の定義は、何行目から何行目までですか?
    19-21行目
  5. マウスのイベント処理を行う関数の定義は、何行目から何行目までですか?
    22-24行目
  6. このクラスに属さない関数が1つだけ呼び出されています。 その名前を答えなさい。
    g.drawImage()
    *drawImage() はクラスGraphicsに属する関数です。
  7. このアプレットをページに張り付けるための HTML の命令を答えなさい。 ただし、表示させる画像のURLは "myface.gif" 、 再生したい音声のURLは "myvoice.au" とします。
    <APP CLASS="AudioImage" IMAGE="myface.gif" SOUND="myvoice.au">

5:次の条件を満たすようにプログラムを完成させなさい。 (解答は別紙に)
  1. クラス名は UpImage で Applet を親とし、Thread の機能を 使って画像が移動するアニメーションを実現します。
  2. 画像の元のファイルの URLは、HTMLの側からキーワード "IMAGE" によって与えられます。
  3. 指定された URL のファイルを元にイメージを生成します。 URL が指定されない場合は、"/hokusei/staff/fujiki.gif" を使用します。
  4. 画像は下から上へ向かって少しずつずれるように移動させます。
  5. 画面のちらつきを抑えるため、絵の書き換えは関数 update() の 中で行いなさい。
6:Canvas と、それを基にして人物の写真の上にいたずら書きをするクラス Rakugaki の Java言語のプログラムです。
後の問に答えなさい。

 
import browser.Applet;
import awt.Graphics;
import awt.Color;

/**
 マウスの操作で絵を描くことができる Canvas のクラス定義
 */
class Canvas extends Applet {

/**
 描きたい線の両端の座標
 */
       protected int x1=0, y1=0, x2=0, y2=0;

/**
 初期設定を行う。サイズの設定のみ。
 */
       protected void init() {

             resize( 600, 400 );
       }

/**
 アプレットにグラフィックを描く。このアプレットでは、
 update() を書き換えたため、最初の表示の時にだけ呼び出される。
 */
       public void paint( Graphics g ) {

             g.setForeground( Color.white );
             g.paint3DRect( 0, 0, 600, 400, true, true );
       }

/**
 アプレットにグラフィックを描く。repaint() によって呼び出される。
 このアプレットでは通常とは異なり、以前の図形のクリアや、
 paint() の呼び出しを行わない。
 */
       public void update( Graphics g ) {

             g.drawLine( x1, y1, x2, y2 );  // 線を描く
             x1 = x2;
             y1 = y2;
       }

/**
 マウスボタンが押された時に自動的に呼び出される。
 */
       public void mouseDown( int x, int y ) {

             x1 = x;
             y1 = y;
       }

/**
 マウスボタンが押されたまま移動した時に自動的に呼び出される。
 */
       public void mouseDrag( int x, int y ) {

             x2 = x;
             y2 = y;
             repaint();      // update() を呼び出す
       }
}

--------------------------------------------------------------

import Canvas;
import awt.Graphics;
import awt.Image;

/**
 マウスの操作で絵にいたずら書きをする Rakugaki のクラス定義
 */
class Rakugaki extends Canvas {

/**
 背景に使用する画像
 */
       private Image backImage = null;

/**
 初期設定を行う。背景の絵を読み込み、それに合わせてサイズの設定。
 */
       protected void init() {

             String imageSource = getAttribute("image");
             if( imageSource == null ) {
                    imageSource = "/hokusei/staff/fujiki.gif";
             }
             backImage = getImage( imageSource );

             resize( backImage.width, backImage.height );
       }

/**
 アプレットの初期状態としてイメージを表示する。
 */
       public void paint( Graphics g ) {

             g.drawImage( backImage, 0, 0 );
       }
}
 

さて、左の Rakugakiアプレットをさらに改良します。

従来の Rakugakiアプレットの機能をそのまま継承し、 さらに次のような新しい機能を追加してください。

マウスのボタンを押して絵を描き始めると、 写真の人物が「ウッ」と声を発し、 絵を描き終えてマウスのボタンを放すと「ふぅ」と声を出すようにする。

音声データの URLは、それぞれ "/sounds/oh.au" と "/sounds/ah.au" と します。 これらのデータを直接 play() の引数として与えてかまいません。

新しいクラス名は Rakugaki2 とします。

(ヒント:10行程度のとても簡単なプログラムです。)

解答は別紙

7:これからの授業では、 皆さんに新しいアプレットを設計してもらうつもりです。

「こんなアプレットがあったら、WWWのページが楽しくなる。」 というようなアイディアを考えてください。

プログラムをどう作るかは、まだ考える必要はありません。 アイディアを説明するのに、絵や図を使ってもかまいません。

(解答省略)