応用情報技術者過去問題 平成23年特別 午後問8
⇄問題文と設問を画面2分割で開く⇱問題PDF問8 情報システム開発
ゴルフ用ナビゲーションシステムのオブジェクト指向設計に関する次の記述を読んで,設問1~3に答えよ。
S社は,ゴルフ用の携帯型GPSナビゲーションシステム(以下,GPSナビという)を製品化することになり,そのソフトウェアをオブジェクト指向によって設計することにした。
ゴルフ場は番号の付けられた複数のホールから成る。各ホールには,グリーンと呼ばれる区域があり,ボールを入れる穴(カップ)があけられている。プレーヤは,カップにボールを入れた後,次のホールに進む(ホールの移動)。なお,本問では,プレーヤがカップにボールを入れる前に他のホールに立ち入ることは,考えなくてよいものとする。
GPSナビは,GPSによって現在位置を測定する機能を備え,さらに,ゴルフ場の位置に関する各種のデータ(位置関係データ)をもつ。プレーヤは始めに,GPSナビに登録されているゴルフ場の中から,現在いるゴルフ場を選択する。プレーヤは,ボールを打つときに位置登録ボタンを押して,その時点の現在位置を最新登録位置として登録することができる。位置登録ボタンが押されるたび,最新登録位置はその時点の現在位置に更新される。GPSナビは,次の項目を自動的に認識又は計算し,所持するプレーヤに示す。
現在いるホールのレイアウトとそこでの現在位置を画面表示する機能を,GPSナビに追加することになった。そこで,処理効率を考慮して,次のような処理方式に変更するととにした。
レイアウトを表示するためのクラス"表示2"を追加し,その属性としてレイアウト表示データを設ける。"現在状態"の操作"現在状態問合せ"は,属性を最新に更新するための"更新"と,属性を返す"状態問合せ"に分割する。また,"タイマ"からの関連の参照先を"現在状態"に変更し,さらに,既存のものと逆方向の関連を二つ追加する。
処理方式の変更に伴い,図3のクラス図は図6のように,図4のタイマによる表示更新のシーケンス図は図7のように,それぞれ変更する。
S社は,ゴルフ用の携帯型GPSナビゲーションシステム(以下,GPSナビという)を製品化することになり,そのソフトウェアをオブジェクト指向によって設計することにした。
ゴルフ場は番号の付けられた複数のホールから成る。各ホールには,グリーンと呼ばれる区域があり,ボールを入れる穴(カップ)があけられている。プレーヤは,カップにボールを入れた後,次のホールに進む(ホールの移動)。なお,本問では,プレーヤがカップにボールを入れる前に他のホールに立ち入ることは,考えなくてよいものとする。
GPSナビは,GPSによって現在位置を測定する機能を備え,さらに,ゴルフ場の位置に関する各種のデータ(位置関係データ)をもつ。プレーヤは始めに,GPSナビに登録されているゴルフ場の中から,現在いるゴルフ場を選択する。プレーヤは,ボールを打つときに位置登録ボタンを押して,その時点の現在位置を最新登録位置として登録することができる。位置登録ボタンが押されるたび,最新登録位置はその時点の現在位置に更新される。GPSナビは,次の項目を自動的に認識又は計算し,所持するプレーヤに示す。
- 現在いるホールの番号(現在位置と位置関係データによって認識)
- 現在位置からそのホールのグリーンの中央(グリーン位置)までの距離(残距離)
- 最新登録位置から現在位置までの距離(飛距離)
現在いるホールのレイアウトとそこでの現在位置を画面表示する機能を,GPSナビに追加することになった。そこで,処理効率を考慮して,次のような処理方式に変更するととにした。
レイアウトを表示するためのクラス"表示2"を追加し,その属性としてレイアウト表示データを設ける。"現在状態"の操作"現在状態問合せ"は,属性を最新に更新するための"更新"と,属性を返す"状態問合せ"に分割する。また,"タイマ"からの関連の参照先を"現在状態"に変更し,さらに,既存のものと逆方向の関連を二つ追加する。
処理方式の変更に伴い,図3のクラス図は図6のように,図4のタイマによる表示更新のシーケンス図は図7のように,それぞれ変更する。
設問1
図3中のa,bに入れる適切な属性名,及び図4中のcに入れる適切な字句を,それぞれ本文中にある字句を用いて答えよ。
解答入力欄
- a:
- b:
- c:
解答例・解答の要点
- a:グリーン位置
- b:最新登録位置
- c:ホールの移動
解説
〔a、bについて〕
クラス図は、1番上にクラス名、2番目に属性、3番目に操作の名前を入れます。図3のクラス図の[a]、[b]には、現在状態クラスに必要な属性を入れる必要があります。"表示"クラスは、現在状態クラスの「現在状態問合せ」という操作を呼び出し、GPSナビの画面に情報を表示します。GPSナビの画面には、ゴルフ場名、ホール番号、残距離、飛距離が表示されます。ゴルフ場名とホール番号は、現在状態クラスの属性として既に書かれているので、残距離と飛距離を求めるための属性が必要になります。図2より、残距離と飛距離は、最新登録位置と現在位置とグリーン位置から求めることができます。現在位置は既に現在状態クラスの属性として書かれているので、残る[a]、[b]には、「最新登録位置」と「グリーン位置」が入ります。∴a、b=グリーン位置、最新登録位置(順不同)
〔cについて〕
図4にあるaltフラグメントは、シーケンス図において「選択」を表す時に使用します。ある条件が満たされているときに実行する処理を点線の上側に、満たされていないときに実行する処理を点線の下側に、それぞれ記述します。
図4を見ると、ゴルフ場クラスにホール問合せを行った後、[cあり]の場合のみ、グリーン位置を問い合わせています。つまり、ホール問合せの結果によりグリーン位置問合せを行うかどうかが変わるということです。グリーン位置を更新する必要があるのは、プレーヤが次のホールに進んだ場合です。よって、[c]には「ホールの移動」が入ります。∴c=ホールの移動
クラス図は、1番上にクラス名、2番目に属性、3番目に操作の名前を入れます。図3のクラス図の[a]、[b]には、現在状態クラスに必要な属性を入れる必要があります。"表示"クラスは、現在状態クラスの「現在状態問合せ」という操作を呼び出し、GPSナビの画面に情報を表示します。GPSナビの画面には、ゴルフ場名、ホール番号、残距離、飛距離が表示されます。ゴルフ場名とホール番号は、現在状態クラスの属性として既に書かれているので、残距離と飛距離を求めるための属性が必要になります。図2より、残距離と飛距離は、最新登録位置と現在位置とグリーン位置から求めることができます。現在位置は既に現在状態クラスの属性として書かれているので、残る[a]、[b]には、「最新登録位置」と「グリーン位置」が入ります。∴a、b=グリーン位置、最新登録位置(順不同)
〔cについて〕
図4にあるaltフラグメントは、シーケンス図において「選択」を表す時に使用します。ある条件が満たされているときに実行する処理を点線の上側に、満たされていないときに実行する処理を点線の下側に、それぞれ記述します。
図4を見ると、ゴルフ場クラスにホール問合せを行った後、[cあり]の場合のみ、グリーン位置を問い合わせています。つまり、ホール問合せの結果によりグリーン位置問合せを行うかどうかが変わるということです。グリーン位置を更新する必要があるのは、プレーヤが次のホールに進んだ場合です。よって、[c]には「ホールの移動」が入ります。∴c=ホールの移動
設問2
図5中のアには二つのメッセージが入る。それらについて,解答欄にメッセージの矢印線とメッセージ名を記入せよ。ただし,矢印との区別は不要であり,メッセージの戻り線は省略し,メッセージ名は相当する操作名とせよ。
解答入力欄
- o:(図表で回答する問題のため解答入力欄はありません。)
解答例・解答の要点
- o:
解説
図5は「プレーヤによる位置登録」のシーケンス図です。問題文の中から該当する箇所を探すと、「プレーヤは,ボールを打つときに位置登録ボタンを押して,その時点の現在位置を最新登録位置として登録することができる。位置登録ボタンが押されるたび、最新登録位置はその時点の現在位置に更新される」と記載されています。
前半部分は、図3のクラス図を参考にすると、位置登録ボタンクラスから現在状態クラスの「現在位置登録」という操作を呼び出すことを指すとわかります。設問2の問題文に「メッセージ名は相当する操作名とせよ」と記載されています。よって、「:位置登録ボタン」から「: 現在状態」に、「現在位置登録」というメッセージ名の矢印を引くことになります。
後半部分は、その時点の現在位置を取得する、つまり、現在状態クラスがGPSクラスの「現在位置問合せ」という操作を呼び出すことを指します。そのため、「:現在状態」から「:GPS」に、「現在位置問合せ」というメッセージの矢印を引くことになります。
ちなみに、この設問では区別不要でしたが、スミ付きの矢印は同期メッセージ、スミなしの矢印は非同期メッセージを表します。
前半部分は、図3のクラス図を参考にすると、位置登録ボタンクラスから現在状態クラスの「現在位置登録」という操作を呼び出すことを指すとわかります。設問2の問題文に「メッセージ名は相当する操作名とせよ」と記載されています。よって、「:位置登録ボタン」から「: 現在状態」に、「現在位置登録」というメッセージ名の矢印を引くことになります。
後半部分は、その時点の現在位置を取得する、つまり、現在状態クラスがGPSクラスの「現在位置問合せ」という操作を呼び出すことを指します。そのため、「:現在状態」から「:GPS」に、「現在位置問合せ」というメッセージの矢印を引くことになります。
ちなみに、この設問では区別不要でしたが、スミ付きの矢印は同期メッセージ、スミなしの矢印は非同期メッセージを表します。
設問3
機能追加を行って処理方式を変更する場合について,(1),(2)に答えよ。
- 図7中のイには,クラス内呼出しとクラス"表示2"に関するメッセージを除くと,二つのメッセージが入る。それらについて,設問2と同様に,解答欄に記入せよ。
- 表示のために"GPS"や"ゴルフ場"を参照する頻度は,機能追加前に比べて,何倍になるか。解答群の中から選び記号で答えよ。
解答群
- 1/4倍
- 1/2倍
- 1倍
- 2倍
- 4倍
解答入力欄
- (図表で回答する問題のため解答入力欄はありません。)
解答例・解答の要点
- ウ
解説
- 機能追加では、ホールのレイアウトを表示するための「表示2」が追加されます。もし問題文に記載されているような処理方式の変更をしなかった場合、下図のように表示と表示2で同様の処理を2回することになり、GPSクラスやゴルフ場クラスへの問合せ回数が2倍になるため、処理効率が下がってしまいます。そこで、表示クラスや表示2クラスから現在状態クラスの「現在状態問合せ」という操作を呼び出すのではなく、タイマクラスから直接、現在状態クラスの「更新」という操作を呼び出すように変更しているのです。この変更に伴い、画面表示を更新するときは、現在状態クラスが表示クラスの「更新」という操作を呼び出すようにします。表示クラスは、現在位置などの情報を得るために、現在状態クラスの「状態問合せ」という操作を呼び出します。
解答には不要ですが、表示2も表示と同様です。現在状態クラスが表示2クラスの「更新」を呼び出し、表示2クラスは現在状態クラスの「状態問合せ」を呼び出します。 - (1)の解説にある通り、処理方式を変更したおかげで、"GPS"や"ゴルフ場"を参照する頻度は、機能追加前と変わらずタイマ処理ごとに1回です。したがって、「ウ:1倍」が正解です。
∴ウ:1倍