平成26年春期試験午後問題 問8

問8 情報システム開発

⇱問題PDF
地図を利用するアプリケーションプログラムの設計に関する次の記述を読んで,設問1~3に答えよ。
 K社は,インターネット上でグループウェアを提供しているソフトウェア開発会社である。このグループウェアに利用者同士の待合せを支援する機能(以下,待合せ機能という)を追加することになった。待合せ機能は,タブレットやスマートフォンなど各種の端末で利用する。待合せ機能の画面イメージを図1に,各構成要素の概要を表1に示す。
pm08_1.png
〔クラス図の検討〕
 まず,表1の各要素をクラスにすることを考える。次に,クラス間の関連について検討していく。図1から,地図クラスにその他の要素をもたせるように考える。利用者,待合せ場所及び目印については,アイコンクラスとの類似性に着目し,アイコンクラスの派生クラスとする。検討したクラス図の抜粋を図2に示す。ただし,システム設定値などのクラスは省略している。
pm08_2.png
 図2のレビューを実施したところ,次のような指摘を受けた。
 "属性の型に基本データ型を用いて,その値に暗黙のルールをもたせるような使い方は好ましくない。例えば,地図クラス及びアイコンクラスの幾つかの属性は,その値が正常な範囲の値かどうかのチェックを含め,複数の関連し合う属性を一まとめにした①クラスを用意し,そのクラスに置き換えるとよい。"

〔アイコンクラス及び派生クラスの実装に関する検討〕
 アイコンクラスの操作"選択する"は,その派生クラスを実装する際,同じ名称の操作"選択する"を実装することによって,同じ操作でも派生クラスごとに振る舞いが変わるようにする。派生クラスには,振る舞いごとにクラス内部からだけアクセス可能な操作を用意し,派生クラスに実装する操作"選択する"の中からその操作を呼び出すように実装する。
 例えば,目印クラスの操作"選択する"の中から呼び出される操作を実装すると,"-写真を表示する"となる。同様に,利用者クラスの操作"選択する"の中から呼び出される操作を実装すると,"d"及び"-電話を掛ける画面へ"となる。
 なお,アイコンクラスの三つの派生クラスそれぞれの操作"選択する"は振る舞いが異なり,共通する処理はないので,それぞれの操作"選択する"からアイコンクラスの操作"選択する"は呼び出さない。

〔描画処理の検討〕
 地図上の操作盤から拡大ボタン("+")が押されると,地図の表示領域が再計算され,全ての要素が再描画される。拡大ボタンが押されてから地図の再描画が終わるまでの処理の流れを,シーケンス図として図3に示す。
 なお,操作盤クラスの操作"拡大"はシステムから呼び出される。その結果をシステムが受け,拡大した地図を再描画するために,システムから地図クラスの操作"地図を描く"が呼び出される。地図クラスの操作"地図を描く"の中では,操作"背景を描く"を呼び出した後,地図上の各要素の描画処理を行う。
pm08_3.png

設問1

〔クラス図の検討〕について,(1)~(3)に答えよ。
  • 図2中のabに入れる適切な多重度を答えよ。
  • 図2中のcに入れる適切な属性名を答えよ。
  • 本文中の下線①のクラスの名称を答え,その属性として適切な名称を列挙せよ。

解答例・解答の要点

  • a:1
    b:1
  • c:住所
  • クラス:位置
    属性:位置緯度,位置経度

解説

  • aについて〕
    表1の操作盤の欄に「操作盤は,常に画面の一番手前に,一つだけ表示される」とあります。操作盤が表示されないと操作不能になってしまうので、地図には常に1つの操作盤が表示されていることになります。地図クラスから見た操作盤クラスの多重度は「1」になります。よって、地図クラスのインスタンスが操作盤クラスのインスタンスをメンバー変数として幾つ保持するかというイメージで考えるといいと思います。

    a=1

    bについて〕
    もし1つの操作盤が複数の地図に関連付けられることになると、1つの操作盤の操作が複数の地図に影響することになってしまいます。また地図クラスと操作盤クラスの関連はコンポジションなので、地図クラスのインスタンス関連付けられていない操作盤クラスのインスタンスは存在し得ません。よって、1つの操作盤は、常に1つの地図に関連付けられます。

    b=1

  • cについて〕
    待合せ場所については表1に「名称や住所,URL,待合せ日時を登録する」とあるので、この4つがメンバー変数の候補となります。"URL"と"待合せ日時"は待合せ場所クラスで定義済であり、"名称"は上位クラスであるアイコンクラスで定義済なので、[c]には「住所」が入ります。

    ※下位クラスでは上位クラスとの差分のみを記述するのがオブジェクト指向の原則なので、上位クラスで共通属性として定義済の"名称"を下位クラスで定義することはできません。

    c=住所

  • 基本データ型を用いていること、地図クラスとアイコンクラスに共通する属性、複数の関連する属性という記述から、属性"位置緯度"と"位置経度"についての指摘であることがわかります。

    緯度と経度は2つ合わせて1つの情報という側面があるので、2つの情報をまとめて管理するクラスを作り、値のチェック(緯度であれば-90≦0≦90、経度であれば-180≦0≦180)などを加えた方が堅牢なシステムとなります。クラス名としては"位置"、最低限持つべき属性としては"緯度"と"経度"が適切です。

    ∴クラス:位置
     属性:位置緯度,位置経度

設問2

〔アイコンクラス及び派生クラスの実装に関する検討〕について,(1),(2)に答えよ。
  • 図2及び本文中のdに入れる適切な字句を,図2の凡例に倣って答えよ。
  • アイコンクラスの操作"選択する"は,アイコンクラスの派生クラスの操作"選択する"とは実装が異なる。その違いについて,30字以内で述べよ。

解答例・解答の要点

  • d:-メールを作成する画面へ
  • 操作の定義だけ行われ,実装は行われない (19文字)

解説

  • 表1の利用者の欄には「利用者を選択すると,システム設定値によって,メールを作成する画面又は電話を掛ける画面に遷移する」とあります。

    [d]の下に"-電話を掛ける画面へ"という操作が定義されていることから考えると、もう一方の「メールを作成する画面に遷移する」操作が[d]に入ることがわかります。「-電話を掛ける画面へ」の表記に準じると操作名は"メールを作成する画面へ"となります。

    設問には「図2の凡例に倣って」という条件があるのでこれだけでは足りず、先頭に"+"または"-"を付ける必要があります。問題文では「派生クラスには,振る舞いごとにクラス内部からだけアクセス可能な操作を用意し,派生クラスに実装する操作"選択する"の中からその操作を呼び出すように実装する」とあるので、操作"メールを作成する画面へ"は、直接外部のクラスから呼ばれるのではなく"選択する"内部で呼び出されることがわかります。凡例を見ると「クラス内部からだけ参照可能な属性又は操作」には"-"を付けると記載されています。

    よって、[d]には操作"メールを作成する画面へ"の先頭に"-"を付けた「-メールを作成する画面へ」が入ります。

    d=-メールを作成する画面へ

  • 表1のアイコンの欄で「アイコンを選択することはできない」とあるように、地図上でアイコンクラスの要素が選択された場合に行うことがありません。このため、アイコンクラスの"選択する"は、派生クラスに共通する操作"選択する"の定義だけがなされ、具体的な操作内容が記述されることはありません。一方、派生クラスの"選択する"では派生クラスに応じた内部操作を呼び出す操作を記述する必要があります。

    アイコンクラスの"選択する"を派生クラス"選択する"と比較すると、実装がない、実際の操作内容がない、定義のみが行われているなどの違いがあります。模範解答では「操作の定義だけ行われ,実装は行われない」としています。

    ∴操作の定義だけ行われ,実装は行われない

設問3

〔描画処理の検討〕について,(1),(2)に答えよ。
  • 図3中のeに入れる適切な字句を答えよ。
  • 図3中の f の領域を埋めて,シーケンス図を完成させよ。

解答例・解答の要点

  • e:アイコンリストの大きさ
  • f:pm08_4.png

解説

  • eについて〕
    シーケンス図では以下の書式で繰返し処理を記述できます。
    pm08_5.png
    図3を見ると"アイコンを描く"がループ処理になっています。拡大ボタンが押された場合、地図上の全ての要素を再描画する必要があるので、地図クラスが保持するアイコンごとに"アイコンを描く"操作を呼び出すことになります。地図上のアイコン数は地図クラスの属性"アイコンリスト"のサイズを参照すればわかるので、1から「アイコンリストの大きさ」まで当該処理を繰り返すことになります。

    ∴アイコンリストの大きさ

  • fについて〕
    全アイコンの描画が終わった後、最前面に表示される操作盤を描画しなくてはなりません。地図クラスが保持するアイコンごとに"アイコンを描く"を呼び出したのと同様に、地図クラスが保持する操作盤に対して"操作盤を描く"を呼び出すことになります。"操作盤を描く"は呼出し元に結果(戻り値)を返すので、地図クラスから操作盤クラスへ向けた実線矢印(メッセージは操作盤を描く)と、操作盤クラスから地図クラスに向けた破線矢印の2本が必要です。
    pm08_4.png
模範解答

Pagetop