FC2ブログ

記事一覧

平成20年春期基本情報技術者試験午後 問8、JAVA言語

本ページは、平成20年 春期 基本情報技術者試験 午後 問8、JAVA言語の解説です。
問題文、解答、解説の順で掲載しております。

***********************************************************************************************************
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)

***********************************************************************************************************

次の Java プログラムの説明及びプログラムを読んで,設問に答えよ。

〔プログラムの説明〕

 電気ポットの状態遷移を模したプログラムである。この電気ポットは,電源に接続すると休止状態になり,沸騰ボタンが押されると加熱を開始する。沸点に到達すると加熱を終了し,休止状態に戻る。ただし,電気ポットに水がない場合は,沸騰ボタンが 押されても加熱を開始せず,警告を表示する。電気ポットの状態遷移図を図1に示す。
java_03_01.jpg
   図1 電気ポットの状態遷移図

(1) 抽象クラス State は,電気ポットの状態を定義する。
(2) クラス Idle 及びクラスHeating は,それぞれ,休止状態と加熱中状態を示す State のサブクラスである。
(3) クラス ElectricPot は電気ポットを表す。フィールド currentState は ,電気ポットの状態を示す。フィールド content は,水量を示す。メソッド heat は, 沸騰ボタンが押されたときに呼ばれ,電気ポットに水があれば加熱を開始する(電気ポットの状態を加熱中に遷移)。水がない場合は例外を投げる。 メソッド boiled は,水が沸点に到達したときに呼ばれ, 加熱を終了する(電気ポットの状態を休上に遷移)。 メソッド isEmpty は,水がない場合 true,それ以外の場合 false を返す。 メソッド main はテスト用のメインプログラムである。実行結果を図2に示す。

 Idle -> Heating  
Heating -> Idle  
No Water!  
  

図2 メソッド main の実行結果
〔プログラム1〕

public abstract class State {
public static final State IDLE = new Idle();
public static final State HEATING = new Heating();

public void heat(ElectricPot pot) throws Exception {
if ({ a } )
{ b } ;
pot.changeState(HEATING);
}

public void boiled(ElectricPot pot) {
pot.changeState(IDLE);
}

private static class Idle { c } {
public String toString() { return "Idle"; }
}

private static class Heating { c } {
public String toString() { return "Heating"; }
}
}

〔プログラム2〕

public class ElectricPot {
private State currentState = State.IDLE;
private int content;

public ElectricPot(int content) { this.content = content; }
public void setContent(int content) {
this.content = content;
}

public boolean isEmpty() { return (content == 0); }
public void changeState(State newState) {
System.out.println(currentState + " -> " + newState);
currentState = newState;
}

public void heat() throws Exception {
{ d } .heat(this);
}

public void boiled() {
{ d } .boiled(this);
}

public static void main(String[] args) {
try {
ElectricPot pot = new ElectricPot(10);
pot.heat();
pot.boiled();
pot.setContent(0);
pot.heat();
pot.boiled();
} catch (Exception e) {
System.out.plintln(e.getMessage());
}
}
}


設問 プログラム中の{ }に入れる正しい答えを, 解答群の中から選べ。

a に関する解答群

ア isEmpty()       イ !isEmpty()
ウ pot.isEmpty()      エ !pot.isEmpty()
オ pot == null       カ pot != null

b に関する解答群

ア return "No Water!"
イ System.out.println("No Water!")
ウ throw "No Water!"
エ throw new Exception("No Water!")

c に関する解答群

ア extends Exception     イ extends Object
ウ extends State       エ implements Exception
オ implements Object     カ implements State

d に関する解答群

ア currentState       イ State
ウ super           エ this

***********************************************************************************************************
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)

***********************************************************************************************************

********************************************************************************
解答

答 aウ 答 bエ 答 cウ 答 dア

********************************************************************************

解説
public static final State IDLE = new Idle();

publicはアクセス修飾子と呼ばれその他としてprotected、何も指定しない、privateなどがある。これは指定した変数やクラスなどをどの範囲から参照可能かを制御するのに用いられる。
自ファイル他ファイル
自クラスサブクラス他クラスサブクラス他クラス
public
protected×
なし××
private××××

staticは、クラスをインスタンスしなくても、そのクラス、メソッド、変数などを参照可能となる。

finalは上書きされないことを意味している。つまり、これをクラスに用いた場合はサブクラスを定義できないし、メソッドに用いた場合にはオーバーロードできない。

{ a }
問題文よりクラスStateは電気ポットの状態を定義するとある。ただ、それ以上の説明はないのでheatメソッドが何をしているかは問題文からは読み取れない。クラスStateはheatメソッドとboidedメソッドとあり、単語の意味から推測すると加熱した時の処理ではないかと推測できる。

加熱は問題文より水がない場合は加熱をせず、水がある場合は加熱をするということで、これはheatの中の処理と合致するようにみえる。
if ({ a } )
{ b } ;
pot.changeState(HEATING);
よって、if文で水があるかをチェックして、水がなければ{ b }の処理を行い、あればpot.changeState(HEATING)、つまりは温める処理をしているのではないかと推測できる。

aに関する解答群をみると、選択肢アのisEmpty()とあるが、いきなりメソッドを呼び出すためには基本時にそれが自クラス内で定義されたメソッドである必要がある。クラスStateにはisEmpty()というメソッドはないのでアもイも解答ではないことがわかる。

ウのpot.isEmpty()であるが、potは、heatメソッドの引数になっており、引数の型はElectricPotなのでElectricPotクラス内をみるとisEmpty()というメソッドが存在する。さらに、問題文の(3)をみると「メソッド isEmpty は,水がない場合 true,それ以外の場合 false を返す」とある。

よって、isEmpty内の処理は、contentが0の時は水がない場合を、content が0でない時は水がある場合を表している。説明文よりフィールドcontentは水量を表すとあるから、処理の内容とも合致する。よって、解答はウかエとなる。

{ a }のif文内は水がなければ{ b }の処理を行うので、解答はウとなる。

{ b }
問題文より「水がない場合は例外を投げる」とある。bの解答群で例外を投げているのはエだけである。よって、解答はエとなる。

private static class Idle { c }
ここにclassという表記があることから、Idleはクラスであることがわかる。問題文より「クラス Idle 及びクラスHeating は,それぞれ,休止状態と加熱中状態を示す State のサブクラスである。 」とあるので、{ c }の解答はウとなる。

これはStateクラスの中にIdleクラスが定義されており内部クラスと呼ばれるものである。
内部クラスには次のような特徴がある。
・内部クラスから同じクラス内のメンバ変数、メソッドを参照することができる。さらに、メンバ変数、メソッドにprivateアクセスレベルが付与されている場合でも、同じクラス内のため参照することができる。
・メソッド内に内部クラスを宣言することもできる。その場合、その内部クラスはメソッド内でのみ機能する。同じクラスのメンバ変数、メソッドを参照することはできないが、メソッド内のfinal修飾子が付与されているローカル変数は参照できる。

{ d }
heat処理は前段の説明より、Stateクラスのheatメソッドで行われている。よって、dではStateクラスのheatメソッドを呼び出せばよい。StateクラスはElectricPotクラス内では
private State currentState = State.IDLE
と定義されている。よってdの解答はアとなる。

参考文献
内部クラス
http://www.javaroad.jp/java_class15.htm

***********************************************************************************************************
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)

***********************************************************************************************************
関連記事

コメント

コメントの投稿

非公開コメント

adwords

外部リンク

カテゴリーメニュー 改

当社のシステム開発の詳細

当社はaccess-excelでの小規模システム開発を中心に年間に50社以上の開発実績がございます。詳細は06-6599-8890ないしinfo@ai-light.comまで今すぐお問合せください

メールフォーム

こちらからも簡単にメールを送付できます。当社のサービスに関してご質問がございましたら、よろしければ、ご利用ください。直接お電話の場合は06-6599-8890までご連絡ください。

名前:
メール:
件名:
本文:

検索フォーム

広告

最新記事

Lc.ツリーカテゴリー

全記事表示リンク

プロフィール

itkeieinews

Author:itkeieinews
ITと経営ニュースへようこそ!
アイライトIT経営研究会
株式会社アイライト
電話でのお問合せは06-6599-8890
Email:info@ai-light.com

お気に入り

本サイトをそのまま消してしまうと、もう探せなくなってしまうかもしれません。 当社はいずれお役に立てることがあるかと思いますので、よろしければお気に入りにご登録ください。

ブロとも申請フォーム