応用情報技術者過去問題 平成24年秋期 午後問8
⇄問題文と設問を画面2分割で開く⇱問題PDF問8 情報システム開発
デジタルオーディオプレーヤのオブジェクト指向設計に関する次の記述を読んで,設問1~3に答えよ。
M社は,デジタルオーディオプレーヤを開発している。デジタルオーディオプレーヤを制御するソフトウェアは,UMLを使用して設計している。現行のデジタルオーディオプレーヤのクラス図を図1に示す。
M社では,このデジタルオーディオプレーヤに,音声フォーマットの追加,曲名の表示方法の追加,及び倍速再生の追加を行うことになった。〔音声フォーマットの追加〕
現在の仕様では,再生可能な音声フォーマットは2種類あり,それぞれ固有アルゴリズム1,2で対応している。固有アルゴリズムは音声フォーマットごとに開発する必要がある。
今回の修正では,新たな音声フォーマットを1種類追加して,固有アルゴリズム3で対応することになった。また,再生アルゴリズムクラスとフォーマット識別クラスを追加して,今後更に音声フォーマットを追加するときには,フォーマット識別クラスの修正と固有アルゴリズムクラスの追加だけで対応できるようにした。再生アルゴリズムクラスは,各固有アルゴリズムクラスの抽象クラスとなる。フォーマット識別クラスは,再生に使用する固有アルゴリズムを決定する。
〔曲名の表示方法の追加〕
現在の仕様では,選曲のために曲名などを表示する選曲画面がある。最初にアーティスト一覧を表示し,アーティストを選択するとアルバム一覧を表示する。アルバムを選択すると曲名一覧を表示する。
今回の修正では,ユーザの多様な検索に対応するために,様々な曲情報(アーティスト,アルバム,ジャンル,リリース年)を組み合わせて曲を検索できるようにした。図2に修正後の選曲画面の表示例を示す。 図2の画面を実現するために次のように設計した。各画面をフォルダに相当させた。フォルダの中にはフォルダと曲を格納することができる。そのフォルダの中に更にフォルダと曲を格納することができる。フォルダと曲を同一インタフェースで扱えるように,抽象クラスであるコンポーネントクラスを追加した。また,フォルダクラスとコンポーネントクラスを使用して,フォルダの再帰的なデータ構造を実現した。
〔倍速再生の追加〕
通常再生の他に,2倍速再生と3倍速再生を追加して,三つの再生モードに対応することになった。倍速再生の追加に伴い,再生機能の仕様を次のように整理した。
追加機能に対応して修正したクラス図と再生機能のステートマシン図を,それぞれ図3,図4として作成した。レビューで,ステートマシン図の再生ボタンの状態遷移について,①再生機能の仕様と異なる点を指摘された。
M社は,デジタルオーディオプレーヤを開発している。デジタルオーディオプレーヤを制御するソフトウェアは,UMLを使用して設計している。現行のデジタルオーディオプレーヤのクラス図を図1に示す。
M社では,このデジタルオーディオプレーヤに,音声フォーマットの追加,曲名の表示方法の追加,及び倍速再生の追加を行うことになった。〔音声フォーマットの追加〕
現在の仕様では,再生可能な音声フォーマットは2種類あり,それぞれ固有アルゴリズム1,2で対応している。固有アルゴリズムは音声フォーマットごとに開発する必要がある。
今回の修正では,新たな音声フォーマットを1種類追加して,固有アルゴリズム3で対応することになった。また,再生アルゴリズムクラスとフォーマット識別クラスを追加して,今後更に音声フォーマットを追加するときには,フォーマット識別クラスの修正と固有アルゴリズムクラスの追加だけで対応できるようにした。再生アルゴリズムクラスは,各固有アルゴリズムクラスの抽象クラスとなる。フォーマット識別クラスは,再生に使用する固有アルゴリズムを決定する。
〔曲名の表示方法の追加〕
現在の仕様では,選曲のために曲名などを表示する選曲画面がある。最初にアーティスト一覧を表示し,アーティストを選択するとアルバム一覧を表示する。アルバムを選択すると曲名一覧を表示する。
今回の修正では,ユーザの多様な検索に対応するために,様々な曲情報(アーティスト,アルバム,ジャンル,リリース年)を組み合わせて曲を検索できるようにした。図2に修正後の選曲画面の表示例を示す。 図2の画面を実現するために次のように設計した。各画面をフォルダに相当させた。フォルダの中にはフォルダと曲を格納することができる。そのフォルダの中に更にフォルダと曲を格納することができる。フォルダと曲を同一インタフェースで扱えるように,抽象クラスであるコンポーネントクラスを追加した。また,フォルダクラスとコンポーネントクラスを使用して,フォルダの再帰的なデータ構造を実現した。
〔倍速再生の追加〕
通常再生の他に,2倍速再生と3倍速再生を追加して,三つの再生モードに対応することになった。倍速再生の追加に伴い,再生機能の仕様を次のように整理した。
- 曲名を選択して選曲ボタンを押すと選択済みとなる。選曲ボタンは,停止しているときだけ有効で,繰り返して複数の曲名を選択することができる。また,選択済みの曲名を再選択すると選択解除となる。
- 停止しているときに再生ボタンを押すと再生を開始する。このとき,選択済みの曲がない場合は停止のまま何もしない。再生とは,通常再生,2倍速再生,3倍速再生の総称である。再生を開始するときは,必ず通常再生から開始する。再生しているときに再生ボタンを押しても何もしない。
- 再生しているときにモードボタンを押すたびに,通常再生,2倍速再生,3倍速再生の順番に再生モードが切り替わる。3倍速再生の次は通常再生に戻る。
- 再生しているときに一時停止ボタンを押すと,再生を中断して一時停止となる。一時停止しているときに再生ボタンを押すと,中断したところから通常再生で再開する。一時停止又は停止しているときに一時停止ボタンを押しても何もしない。
- 選択済みの曲全ての再生を終了すると停止となる。
- 停止しているとき以外に停止ボタンを押すと停止となる。停止しているときに停止ボタンを押しても何もしない。
追加機能に対応して修正したクラス図と再生機能のステートマシン図を,それぞれ図3,図4として作成した。レビューで,ステートマシン図の再生ボタンの状態遷移について,①再生機能の仕様と異なる点を指摘された。
設問1
図3について,(1),(2)に答えよ。
- a~cに入れる適切なクラス名を本文又は図1中の字句を用いて答えよ。
- d~fに入れる適切な図を解答群の中から選び,記号で答えよ。解答は,重複して選んでもよい。
d,e,f に関する解答群
解答入力欄
- a:
- b:
- c:
- d:
- e:
- f:
解答例・解答の要点
- a:再生
- b:フォーマット識別
- c:再生アルゴリズム
- d:オ
- e:カ
- f:カ
解説
デジタルオーディオプレーヤのオブジェクト指向設計を題材にUMLに関する基礎理解を問う問題です。
UML(Unified Modeling Language)は、オブジェクト指向開発で用いられる標準表記法群で、オブジェクト間の関連や動作・構成を表現する13種の図表から構成されています。UML2.0の13の図法は表現する対象によって構造図と振る舞い図に分類することができます。
UML(Unified Modeling Language)は、オブジェクト指向開発で用いられる標準表記法群で、オブジェクト間の関連や動作・構成を表現する13種の図表から構成されています。UML2.0の13の図法は表現する対象によって構造図と振る舞い図に分類することができます。
- 構造図
- システムの静的な構造をモデルで表現する。
クラス図,コンポジット構造図,コンポーネント図,配置図,オブジェクト図,パッケージ図 - 振る舞い図
- システムの振る舞いをモデルで表現する。
アクティビティ図,ユースケース図,シーケンス図,インタラクション概念図,コラボレーション図,タイミング図,ステートマシン図
- 空欄[a]から空欄[c]は、問題文からクラス間の関係を読み解き、クラス図に当てはまる各クラス名を答えます。
順番的には[c]がまず確定すると思います。問題文中には「再生アルゴリズムクラスは,各固有アルゴリズムクラスの抽象クラスとなる」とあるので、再生アルゴリズムと各固有アルゴリズムクラスは「汎化-特化」の関係と言えます。UMLのクラス図では「汎化-特化」関係を表すのに特化クラスから汎化クラスに向かって白抜きの△矢印を記述します。[c]は固有アルゴリズム1~3の抽象クラスですので「再生アルゴリズム」クラスとわかります。
[a]と[b]の違いは選曲クラスとの関連の有無です。問題文中には「フォーマット識別クラスは,再生に使用する固有アルゴリズムを決定する」とあり、フォーマット識別クラスは、再生クラスと固有アルゴリズムクラスとの関連は持つものの、選曲クラスとの関連はないことが読み取れます。一方、再生クラスは再生する曲を取得するため選曲クラスとの関連を持つことになります。よって、[b]には「フォーマット識別」クラスが入り、[a]には変更前と同じように「再生」クラスが入ります。
∴a=再生
b=フォーマット識別
c=再生アルゴリズム - 空欄[d]から空欄[f]は、2つのクラスの関係を、クラス図の記述方法によって紐づけます。
まず以下の記述に注目します。
「フォルダと曲を同一インタフェースで扱えるように,抽象クラスであるコンポーネントクラスを追加した」
この記述より、フォルダ・曲とコンポーネントクラスは「汎化-特化」関係であると言えます。よって、「汎化-特化」関係を表すために、曲クラスからコンポーネントクラスに向けた△矢印、フォルダクラスからコンポーネントクラスに向けた△矢印が必要です。したがって、[f]および[d][e]の一方には「カ」のが入ります。
次にフォルダクラスとコンポーネントクラス間に存在するもう1つの関係を考えます。これは次の記述がヒントになっています。
「フォルダの中にはフォルダと曲を格納することができる」
フォルダと曲はコンポーネントとして抽象化されているので、フォルダは複数のコンポーネントを持つことになります。コンポーネントはフォルダの部分ですから、両クラスは「分解-集約」関係にあると言えます。UMLのクラス図で集約を表すには先端がひし形の矢印を使用します。本問では、フォルダクラスが複数のコンポートネントクラスを束ねる形になるので、コンポーネントクラスからフォルダクラスに向けたが適切です。
なお、ひし形を黒く塗りつぶしたも分解-集約を表す関連線ですが、こちらはコンポジション(合成集約)と呼ばれ、上位クラスが下位クラスを独占的に所有している強い集約関係を表します。この場合、上位クラスが削除されると下位クラスも削除されるという関係ですが、本問では曲クラスが複数のフォルダに属するのでコンポジションではありません。
∴d=
e=
f=
※dとeは順不同
設問2
本文中の下線①について,指摘内容を30字以内で述べよ。
解答入力欄
- o:
解答例・解答の要点
- o:再生を開始するときに,通常再生から開始となっていない (26文字)
解説
再生機能について仕様と異なる点を考えます。
問題文中の〔倍速再生の追加〕には、以下の記述があります。
模範解答は「再生を開始するときに,通常再生から開始となっていない」としていますが、「再生ボタンが押された時の、再生モードの状態がわからない」などの解答も考えられます。
∴再生を開始するときに,通常再生から開始となっていない
仕様を正しく反映するためには、再生ボタンイベントが発生したときの矢印を「通常再生」まで引くべきです。
問題文中の〔倍速再生の追加〕には、以下の記述があります。
- 再生を開始するときは、必ず通常再生から開始する。
- 一時停止しているときに再生ボタンを押すと、中断したところから通常再生で再開する。
模範解答は「再生を開始するときに,通常再生から開始となっていない」としていますが、「再生ボタンが押された時の、再生モードの状態がわからない」などの解答も考えられます。
∴再生を開始するときに,通常再生から開始となっていない
仕様を正しく反映するためには、再生ボタンイベントが発生したときの矢印を「通常再生」まで引くべきです。
設問3
図4について凡例に倣い,選曲ボタン,停止ボタン,全曲再生終了のイベントが発生したときの状態遷移をステートマシン図に追加せよ。ここで,設問2の指摘内容は考慮しなくてよい。
解答入力欄
- o:(図表で回答する問題のため解答入力欄はありません。)
解答例・解答の要点
- o:
解説
選曲ボタン、停止ボタン、全曲再生終了のイベントが発生したときの動作については、問題文中で以下のように説明されています。
停止状態のときに選曲ボタンを押すと、曲名を選択して停止状態に戻ります。よって、遷移条件が「選択ボタン」である「停止」から「停止」に向けた矢印が必要です。
〔②について〕
再生状態で全曲再生終了イベントが発生すると、停止状態に遷移します。よって、遷移条件が「全曲再生終了」である「再生」から「停止」に向けた矢印が必要です。
〔③について〕
停止しているとき以外の状態とは「再生」または「一時停止」です。この2つの状態で停止ボタンが押されると、停止状態に遷移します。よって、遷移条件が「停止ボタン」である「再生」から「停止」に向けた矢印と、遷移条件が「停止ボタン」である「一時停止」から「停止」に向けた矢印の2つが必要です。
②と③では「再生」から「停止」に向けた矢印が重複していますので、凡例に従い OR を使って2つのイベントをまとめて記述します。したがって必要な矢印は3本です。
- 選曲ボタンは、停止しているときだけ有効で、繰り返して複数の曲名を選択することができる。
- 選択済みの曲全ての再生を終了すると停止となる。
- 停止しているとき以外に停止ボタンを押すと停止となる。停止しているときに停止ボタンを押しても何もしない。
停止状態のときに選曲ボタンを押すと、曲名を選択して停止状態に戻ります。よって、遷移条件が「選択ボタン」である「停止」から「停止」に向けた矢印が必要です。
〔②について〕
再生状態で全曲再生終了イベントが発生すると、停止状態に遷移します。よって、遷移条件が「全曲再生終了」である「再生」から「停止」に向けた矢印が必要です。
〔③について〕
停止しているとき以外の状態とは「再生」または「一時停止」です。この2つの状態で停止ボタンが押されると、停止状態に遷移します。よって、遷移条件が「停止ボタン」である「再生」から「停止」に向けた矢印と、遷移条件が「停止ボタン」である「一時停止」から「停止」に向けた矢印の2つが必要です。
②と③では「再生」から「停止」に向けた矢印が重複していますので、凡例に従い OR を使って2つのイベントをまとめて記述します。したがって必要な矢印は3本です。