AP 午後 情報システム開発[R6春] (original) (raw)

ダッシュボードの設計に関する次の記述を読んで,設問に答えよ。

Y社は,食品などを販売する店舗を経営する企業である。複数ある店舗では,商品の販売状況や在庫状況に合わせて,割引率を設定したり,店舗間で在庫の移動を行ったりしている。販売に関する情報は販売管理システムで管理しているが,状況をリアルタイムで監視するには不向きであった。そこで,販売状況をリアルタイムで監視できるシステム(以下,ダッシュボードという)を開発することにした。
Y社では,商品ごとに商品分類を設定し,売上金額や販売数の集計に利用している。Y社が扱う情報のデータモデル(抜粋)を図1に,ダッシュボードのイメージ(一部)を図2に示す。


図1 データモデル(抜粋)


図2 ダッシュボードのイメージ(一部)

販売状況や在庫状況はデータベースで管理する。データベースに新たな販売実績が追加されたり,在庫数が更新されたりすると,その内容がダッシュボードに随時反映され,最新の情報が表示される。
Y社は,ダッシュボードの開発をZ社に依頼し,Z社はその設計に取り掛かった。

ダッシュボードのクラスの設計
Z社は,ダッシュボードのクラスの設計を行った。設計したクラス図を図3に表示できるグラフの種類を表1に,主なクラスの説明を表2に示す。Controllerクラスは,システム全体の挙動を制御するクラスである。Viewクラスは,画面にグラフを表示する機能をもつクラスである。グラフには複数の種類があるので,その種類ごとに,Viewクラスを a したクラスを作成する。Subjectクラスは,データベースが更新されたことをViewクラスのオブジェクトに通知するクラスである。図1のデータモデル中のテーブルのうち,ダッシュボードで監視したい情報に関するテーブルのそれぞれについて,Subjectクラスを a したクラスを作成する。以下,Viewクラス,Subjectクラスを a したクラスのオブジェクトを,それぞれViewオブジェクト,Subjectオブジェクトという。


図3 クラス図

表1 表示できるグラフの種類

表2 主なクラスの説明

グラフの新規表示
例えば,“時間帯ごと商品分類ごとの売上金額”のグラフを新たに画面上に表示する場合を考える。グラフの種類は棒グラフなので,棒グラフViewクラスのオブジェクトを作成する。次に,①関係するSubjectオブジェクトのaddObserverメソッドを呼び出す。その後,画面の初期表示のために,画面表示更新メソッドを呼び出す。

グラフの表示内容更新
店舗で商品が販売されると,販売管理システムが,データベースにレコードを追加する。そのとき,ダッシュボードのControllerクラスに実装されているdbUpdatedメソッドが呼び出されるように,システム間の連携が行われている。
Controllerクラスは,dbUpdatedメソッドが呼び出されると,更新されたテーブルに対応するSubjectオブジェクトのnotifyObserversメソッドを呼び出す。notifyObserversメソッドは,そのオブジェクトが属性としてもつ配列viewsに格納されている全てのViewオブジェクトのnotifyメソッドを呼び出す。notifyメソッドは,画面表示更新メソッドを呼び出す。Viewクラスの画面表示更新メソッドは d メソッドなので,例えば,“時間帯ごと商品分類ごとの売上金額”の場合は e クラスに実装されたメソッドを呼び出す。

データのフィルタリング
Y社からの追加の要求で,集計結果をフィルタリングする機能を追加することになった。例えば,“時間帯ごと商品分類ごとの売上金額”のグラフ上で,特定の商品分類の表示箇所をマウスでクリックしたときに,表示されている全てのグラフについて,指定した商品分類で絞り込んだ結果を表示したい。そこで,絞込条件を取り扱うクラスとして絞込条件クラスを導入し,次の改修を加えることで機能を実現することにした。

・絞込条件クラスは,属性として"テーブル名","項目名”,“絞込条件の値”をもつ。例えば,商品分類で絞り込む場合は,テーブル名に“商品マスタ”,項目名に“商品分類コード”,絞込条件の値に“商品分類コードの値”が入る。

・Controllerクラスの属性に絞込条件クラスのオブジェクトを追加し,その属性に条件を設定するためのsetFilterメソッドを追加する。

・Viewオブジェクトが画面の表示を更新する際に,絞込条件のオブジェクトが引き渡されるようにするために,SubjectクラスのnotifyObserversメソッドと,Viewクラスのnotifyメソッドのそれぞれについて,呼出しの2仕様を変更する。

・集計処理クラスの処理で絞込条件を考慮して集計し,画面を更新する。

画面の操作が行われたら,Viewオブジェクトが絞込条件オブジェクトを生成し,ControllerオブジェクトのsetFilterメソッドを呼び出す。その後,全てのViewオブジェクトの画面表示更新メソッドを呼び出すことで,機能を実現する。

過負荷の回避
設計レビューを実施したところ,次の点が指摘された。

・販売管理システムが,データベースに販売実績のレコードを連続で追加すると,ダッシュボードが過負荷になるおそれがある。

・一つのViewオブジェクトは f ので,1回の販売実績の登録で,表示の更新が複数回発生してしまう。

そこで,Viewクラスの属性に“更新フラグ”を追加し,notifyメソッドでは画面表示更新メソッドを呼び出すのではなく,"更新フラグ”を立てるようにした。また,“更新フラグ”を立てる処理とは別に,定期的に画面表示更新メソッドを呼び出す仕組みを用意し,"更新フラグ”が立っている場合だけ画面の更新処理を実行してから“更新フラグ”を降ろすようにした。

設問1 本文中の a に入れる適切な字句を答えよ。

解答・解説

設問2 図3中の b , c に入れる適切なクラス間の関係又は多重度を答え,クラス図を完成させよ。なお,表記は図3の凡例に倣うこと。

解答・解説

設問3 本文中の下線①について,関係するSubjectオブジェクトのクラス名を図3中から選び全て答えよ。

解答・解説

解答例

販売実績Subject,販売明細Subject

解説

設問4 本文中の d , e に入れる適切な字句を答えよ。

解答・解説

設問5 本文中の下線②について仕様変更の内容を30字以内で答えよ。

解答・解説

解答例

絞込条件のオブジェクトをメソッドの引数に設定する

解説

設問6 本文中の f に入れる適切な字句を,30字以内で答えよ。

解答・解説

解答例

複数のSubjectオブジェクトからデータ更新通知を受け取る

解説

IPA公開情報

出題趣旨

アプリケーションの設計を行う際,デザインパターンを参考にすることで,効率よく妥当な設計ができることが多い。また,デザインパターンに沿った設計を行うことで,アプリケーションの設計思想を他者と共有し やすくなる利点もある。
本問では,販売情報をリアルタイムに可視化するダッシュボードの設計を題材として,デザインパターンの一つである Observer パターンを参考にしたクラス設計に関する理解と応用力を問う。

採点講評

問 8 では,販売情報をリアルタイムに可視化するダッシュボードの設計を題材に,デザインパターンの一つである Observer パターンを参考にしたクラス設計について出題した。全体として正答率は平均的であった。
設問 4 の d は,正答率が平均的であった。オブジェクト指向のクラス設計において,抽象化に関する概念は非常に重要なので,関連した語句や UML の表記法についても,よく理解しておいてほしい。
設問 5 は,正答率が平均的であった。クラス間の関連の構造を変更するなど,メソッドの呼出しに関する仕様変更に留まらない解答が散見された。設問をよく読み,求められていることを理解した上で解答してほしい。
設問 6 は,正答率が低かった。クラスからオブジェクトを作成して利用する際の,オブジェクト同士の関係や,関連したオブジェクト間におけるメソッドの呼出しの流れについて,具体的にイメージする能力を身につけてほしい。

同一期問題
  1. 情報セキュリティ
  2. 経営戦略
  3. プログラミング
  4. システムアーキテクチャ
  5. ネットワーク
  6. データベース
  7. 組込みシステム
  8. システム開発
  9. プロジェクトマネジメント
  10. サービスマネジメント
  11. システム監査