3ヶ月ぶりに受験対策雑記です。
この3ヶ月間、あまり勉強してないなぁ。
小説にはまったりしてましたから。
さて、いつも問題集ばかり勉強していては飽きてくるので、ちょっと違うことをしようということで、
基本情報技術者試験のjavaの問題、平成20年春問題8を解いてみました。
問題は
基本情報処理技術者試験のホームページからダウンロードできます。
もしかしたら、市販の問題集などからも見ることができるかもしれませんが、amazonで検索したら、あまりjavaに的を絞った書籍は少ないようです。
一番最新の本は2008年03月の基本情報技術者試験合格サポートJAVAという本みたいです。
これ↓
さて、問題解いて答え合わせしたのはいいけれど、解説がないからちょっと困る。
解説読みたいためだけに合格している試験の本を買うのは気が引ける(試験はCOBOLで受けたんですよ、にゃは)。
そんなわけで、自分なりに勝手に解釈し、これを見ている人がいつかコメントやメールで解説してくれるだろうという勝手なことを考え、ちょこっと書いてみようと思います。
まず、
答えとなるソースです。
(ここのブログのレイアウトではタブが表示されないようなので、txtファイルを用意しました)。
問題のプログラムの説明で、「抽象クラスStateは、電気ポットの状態を定義する。」とだけ書いてあります。
Stateクラスを見てみると、static finalなStateクラス型の変数を定義してます。
public static final State IDEL = new Idle();
public static final State HEATING = new Heating();
IDELにnew Idel()、HEATINGにnew Heating()とStateクラスではないオブジェクトを入れてます。
オブジェクトにオブジェクトを入れるときは、自身と同じクラスか、そのサブクラスでないといけないこと。
及びプログラムの説明からIDLEクラス及びHEATINGクラスはStateクラスのサブクラスということが分かります。
よって穴埋めcの問題はStateクラスを継承する意味のウextends Stateとなります。
ElectricPotクラスのheat()メソッドとboiled()メソッドに注目すると、穴埋めd.heat(this)、穴埋めd.boiled(this)となっています。
このthisは自身のオブジェクトを表します。
すなわちElectricPotクラスのオブジェクトです。
それを引数とする、heatメソッド、boiledメソッドを改めて呼び出しています。
これはプログラム1のheat(ElectricPot pot)、boiled(ElectricPot pot)しか見当たらないので、これを呼び出しているはずです。
ということで、穴埋めdはStateクラスを表しているものであることが分かります。
ElectricPotクラスはStateクラスを継承していないのでウではないし、ElectricPotクラスにheat(ElectricPot pot)いうようにheat()メソッドに引数があるものはないので、エでもありません。
また、Stateクラスのheat(ElectricPot pot)メソッドはstaticではないので、選択肢イでもありません。
ということで残ったアが正解。
最後にElectricPotクラスのheat()メソッドでは水がなかったときに例外を投げるという処理がないことから、Stateクラスのheat(ElectricPot pot)で例外を発生させ、スローさせていることがわかります。
そこで穴埋めa,bは例外を投げる条件と例外を投げればいいことになります。
potの水が0のとき例外なので、穴埋めcはpot.content == 0 と同じ意味の処理、ウのpot.isEmpty()となり、例外を投げるときは『throw new 例外』という形なので、選択肢エが正解となります。
見づらくてごめんなさい。
というわけで、次回は平成20年問12を書いてみます。
ただいまこの本を使って勉強中です。
