ObjectSquare [2004 年 6 月号]

 

[オブジェクト指向と情報処理試験 -2004年 春-]

ココが変だよ? 情報処理試験 -午後-

Prev
Prev.

(ソフトウェア開発技術者:午後T・問1)

A 君は缶飲料自動販売機システムを開発することになった。最初に、簡単なシナリオを記述し、そのシナリオを基として UML のクラス図とシーケンス図を使ってシステムのモデリングを行うことにした。

シナリオ:
缶飲料を購入する顧客は、自動販売機に対して入金口から入金する。入金されたお金は、自動販売機内のレジスタに入れられる。レジスタには、今までの売り上げも含めたお金が蓄えられている。
自動販売機は、入金されるたびに、入金総額をインジケータに表示する。入金総額が缶飲料の価格に達すると、自動販売機は価格に達した缶飲料に対応する購入可能ランプを点灯する。顧客は自分が購入した缶飲料のランプが点灯するまで、自動販売機に入金する。購入したい缶飲料のランプが点灯し、顧客がその缶飲料を購入するためのボタンを押すと、自動販売機は選択された缶飲料を商品口に置き、購入可能ランプを消灯し、インジケータの表示を 0 にする。つり銭がある場合には、レジスタから必要な金額のつり銭を取り出し、返却金口に戻す。

A 君はこのシナリオを基に、初期モデルのクラス図(図 1 )とシーケンス図(図 2 )を作成した。

図1 : 最初のクラス図 図2 : 最初のシーケンス図

設問 1 図 1 のクラス図に、入金総額をインジケータに表示する操作を加えたい。どのクラスに加えるのが適切か。クラス名を答えよ。

(解答+コメント)

入金総額は入金部の属性になっているので、「入金部」。でしょうか?(soda)

「入金部」ですね。(たけ)

問題とは関係ないですが、図1 の多重度がついてないところは、1 ということなんでしょうか。
それとも検討していないということ?
操作や属性を検討する前に多重度をつけましょう。(ぴよ)

設問 2 図 2 中の[ア]、[イ]に入る適切な操作名を答えよ。

(解答+コメント)

シナリオを読むと、ランプの点灯と消灯の話をシーケンス図に書いて欲しい、という出題者の意図が読み取れます。
なので、
  [ア] ランプ点灯()
 [イ] ランプ消灯()
(soda)

[イ]は僕なら「総額通知()」にするけどな。
繰り返し購入できる自販機もあるし、
ランプの点灯、消灯の判断は「缶飲料スロット」に任せればよいのでは?(よ)

設問 3 A 君が図 1 のクラス図を見直したところ、入金部が複数の機能をもっていると考え、各機能ごとにクラスを割り当てることにして図 1 、図 2 を修正した。修正したクラス図とシーケンス図が図 3 、4 である。

図3 : 修正したクラス図 図4 : 修正したシーケンス図

また、図 4 のシーケンス図では、操作に必要な引数を記入することにした。ここで図 4 では、既に自動販売機に 100 円投入されている状態で、更に 100 円投入して 120 円の缶飲料を購入する場合を表しており、必要に応じて、オブジェクト間のメッセージとともに渡される引数も示している。
図 3 、4 中の[ウ]〜[サ]に入る適切な語句を答えよ。

(解答+コメント)

[ウ] 表示(金額)
[エ] 入金通知(金額)
[オ] セッション管理
[カ] インジケータ
[キ] ランプ点灯()
[ク] 120
[ケ] 80
[コ] 0
[サ] ランプ消灯()
(soda)

なんか、シナリオを頭に入れてから、クラス図とシーケンス図を見比べる、以上のコメントできないのですが、とりあえず。

クラス「オ」は、シーケンス図を見ると、操作「入金通知(金額)」「購入通知(金額)」を持っていることが分かります。操作「購入通知(金額)」を持っているクラスは「セッション管理」なので、クラス「オ」=「セッション管理」、操作「エ」=「入金通知(金額)」。

クラス「カ」は、シーケンス図を見ると、クラス「オ=セッション管理」と関連があって、操作「表示(金額)」を持っている。クラス図と見比べると、消去法で、クラス「カ」=「インジケータ」なので、操作「ウ」=「表示(金額)」。

操作「キ」と「サ」は、クラス「缶飲料スロット」の操作で、図2の「ア」と「イ」に相当するのですが…。ここで、「13:総額表示」->「サ」という流れになっているのが微妙ですね。操作「ランプ点灯()」と「ランプ消灯()」はpublicじゃなくなるのでしょうか。

金額「ク」「ケ」「コ」は、単純な、お買い物の金額計算ですね。

こんな感じで大丈夫ですか?
(たけ)

「入金部」はクラス図で「セッション管理」としか関連をもっていないので、
[オ]はすぐにわかりますね。

さて問題、以下の要求を上のモデルに追加してみましょう。
(a) つり銭切れのチェックができること。
(b) 返却レバーで入金した金額が返却できること。
(c) 複数商品の連続購入ができること。

お客様の隠れた要求を導き出すことも大切だと思います。
(よ)


© 2004 OGIS-RI Co., Ltd.
Prev
Prev.