読み込み中...
先行公開中:2026年11月から一部が有料になります(無料プランはそのまま使えます)。詳しく ›
読み込み中...
ダッシュボードの設計に関する次の記述を読んで,設問に答えよ。
出典:令和6年度 春期 応用情報技術者試験 午後 問8
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 クラス図
この図の中に空欄 b・c があります
| 種類 | グラフの構成要素 | 説明 |
|---|---|---|
| 棒グラフ | 横軸の項目,集計対象の項目,分類 | 横軸の項目について,任意の値の範囲で区切り,集計対象の項目の値を縦棒で表現する。縦棒の値は,分類ごとに色分けし,それらを積み上げて表示する。 |
| 円グラフ | 集計対象の項目,分類 | 集計対象の項目について,分類ごとに集計して,その割合を扇形の面積で表現する。 扇形は分類ごとに色分けして表示する。 |
| 折れ線グラフ | 横軸の項目,集計対象の項目,分類 | 横軸の項目について,任意の値の範囲で区切り,集計対象の項目の値の推移を折れ線で表現する。折れ線は分類ごとに分けて表示する。 |
| クラス | 説明 |
|---|---|
| Controller | プログラムの流れを制御するクラス。データベースが更新されたときに,更新されたテーブル名の配列を引数にして,dbUpdatedメソッドを呼び出す。 |
| DAO | データベースにアクセスするためのクラス。 |
| Subject | データの更新をViewオブジェクトに通知するクラス。通知先は,addObserverメソッドで登録する。notifyObserversメソッドは,登録された全ての通知先のnotifyメソッドを呼び出す。 |
| View | ダッシュボードに一つのグラフを表示するクラス。グラフの軸や集計対象の項目の情報を,集計項目オブジェクトの配列で保持している。notifyメソッドは,画面表示更新メソッドを呼び出す。画面表示更新メソッドは,対象に関する集計を行い,画面の表示を更新する。 |
| 集計処理 | グラフを表示する際に必要になる,各種の集計の処理を実装したクラス。 |
例えば,“時間帯ごと商品分類ごとの売上金額”のグラフを新たに画面上に表示する場合を考える。グラフの種類は棒グラフなので,棒グラフ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メソッドのそれぞれについて,呼出しの②仕様を変更する。
集計処理クラスの処理で絞込条件を考慮して集計し,画面を更新する。
画面の操作が行われたら,Viewオブジェクトが絞込条件オブジェクトを生成し,ControllerオブジェクトのsetFilterメソッドを呼び出す。その後,全てのViewオブジェクトの画面表示更新メソッドを呼び出すことで,機能を実現する。
設計レビューを実施したところ,次の点が指摘された。
販売管理システムが,データベースに販売実績のレコードを連続で追加すると,ダッシュボードが過負荷になるおそれがある。
一つのViewオブジェクトはfので,1回の販売実績の登録で,表示の更新が複数回発生してしまう。
そこで,Viewクラスの属性に“更新フラグ”を追加し,notifyメソッドでは画面表示更新メソッドを呼び出すのではなく,“更新フラグ”を立てるようにした。また,“更新フラグ”を立てる処理とは別に,定期的に画面表示更新メソッドを呼び出す仕組みを用意し,“更新フラグ”が立っている場合だけ画面の更新処理を実行してから“更新フラグ”を降ろすようにした。
本文中の a に入れる適切な字句を答えよ。
0 字
読み込み中…
図3中の b , c に入れる適切なクラス間の関係又は多重度を答え,クラス図を完成させよ。なお,表記は図3の凡例に倣うこと。
0 字
読み込み中…
本文中の下線①について,関係するSubjectオブジェクトのクラス名を図3中から選び全て答えよ。
0 字
読み込み中…
本文中の d , e に入れる適切な字句を答えよ。
0 字
読み込み中…
本文中の下線②について,仕様変更の内容を30字以内で答えよ。
0 / 30 字
読み込み中…
本文中の f に入れる適切な字句を,30字以内で答えよ。
0 / 30 字
読み込み中…