2016年12月29日木曜日

[平成26年度秋] 午後 問11解説

[問題文・解答]


平成26年度10月に実施された基本情報技術者試験の午後試験の問題・解答はIPA公式ページからダウンロード出来ます。(以下リンク)

[問題概要]


この問題は、選択問題で問9〜問13のうち1問を選択する必要があります。
出題分野はソフトウェア開発(Java)で、問題の題材は可変オブジェクトとその問題点です。
期間(時間間隔)を表すクラスとその動作検証を行うクラスのJavaプログラムについて問われます。Javaの例外処理やインスタンスについての基礎知識が必要となります。

[設問1]


a,b) プログラム1は、Periodクラスの実装です。P.60(6)に説明があるようにメソッドcontainsは引数で与えられた日時が期間に含まれる場合はtrueを返し、それ以外の場合は期間が空白の場合も含めてfalseを返します。a,bの部分はend<startの場合に引数のtimeがend<time≤startとなるかどうかを判定する部分です。従って、aには≤、bには>が当てはまります。

c) プログラム2はPeriodクラスの動作検証を行うPeriodTestクラスを実装しています。プログラム中のコメントにあるようにメソッドtestConsistencyは、引数で与えられた期間periodの長さと方向が正しいかどうかを、同じく引数で与えられたlengthと比較することで検証します。cの部分は方向を比較している部分であり、PeriodクラスのメソッドisBackwardは終点より始点が前の場合、つまり期間の長さが負になる場合にtrueを返します。従って、メソッドisBackwardとlengthが負かどうかが不整合を起こす場合に例外メッセージを表示するため、cには<が当てはまり、「」が正解です。

d) dのある2行では、コンストラクタの引数にnullを与えた場合に設計通り(P.60(1)に記述)にNullPointerExceptionを投げるかどうかを検証します。

e) のある2行では、コンストラクタの引数に協定世界時(エポック)よりも前の日時を与えた場合に設計通り(P.60(1)に記述)にIllegalArgumentExceptionを投げるかどうかを検証します。

[答] a) ウ b) オ c) イ d) キ e) イ

[設問2]


f) PeriodのメソッドgetStartによって取得された始点が変更された場合に、Periodの持つ始点のインスタンスまで変更されるのを防ぐために、始点のインスタンスをそのまま返すのではなく、複製を返す必要があります。P.78のDataクラスのメソッドcloneを用いればよいのでfは「(Data) start.clonw()」となり、「ア」が正解です。

g) αに追加するプログラムでは、以下の2通りの場合についてperiod作成時に設定した期間が変更されないことを確認します。
・period作成時に使用した始点や終点のインスタンス(start, end)を変更した場合
・getStartやgetEndで取得したperiodの始点や終点のインスタンス(newStart, newEnd)を変更した場合
従って、gにはperiod作成時に設定した期間を入れればよいので「DELTA」が当てはまります。

[答] f) ア g) イ

上記の解説は問題と解答を元に自分なりの考え方を記述しており、間違っている部分もあるかと思いますので、ご了承願います。また、誤りについては正しい考え方をご指摘・ご教授頂けると助かります。


0 件のコメント:

コメントを投稿