LastUpdate : 2009/2/13

特定非営利活動法人 UML モデリング推進協議会

UML モデリング技能認定試験
L3

サンプル問題解答
モデリング問題-解答２（組込み系）※本書の一部または全部を無断で複写、複製、転載、テープ化、ファイル化することを禁じます。
※UML、Unified Modeling Language は OMG（Object ManagementGroup）の商標です。

Copyright©2009 UMT

LastUpdate : 2009/2/13

設問 1
正解(1)、(2)、(4)、(5)
解説
間違いを含むステートマシン図を題材に、誤り/抜け/モレを発見する能力を確認する設問です。

アイドリング中
コイン投入

景品投下動作中

右移動指示待ち

右ボタン押しentry/右ボタン点滅開始
exit/右ボタン消灯

復帰移動中

右移動中
右端スイッチON entry/右ボタン点灯開始およ

左移動中
entry/左右モータ逆回転開始
exit/左右モータ停止
左端スイッチON

手前移動中
entry/前後モータ逆回転開始
exit/前後モータ停止
手前端スイッチON

after(30秒)

び左右モータ正回転開始
exit/左右モータ停止および右ボタン消灯

奥移動指示待ち

右ボタン放しentry/奥ボタン点滅開始
exit/奥ボタン消灯

奥ボタン押し奥移動中
after(30秒) 奥スイッチON entry/奥ボタン点灯開始およ

クレーン動作中

び前後モータ正回転開始
exit/前後モータ停止および奥ボタン消灯
奥ボタン放し図 1 妥当なステートマシン図の一例(1) は「右移動中」状態から「奥移動指示待ち」状態への「右端スイッチ ON」イベントをトリガとする遷移が抜けてしまっているために起こりえます。
(2) は「奥移動中」状態から「クレーン動作中」状態への「奥端スイッチ ON」イベントをトリガとする遷移が抜けてしまっているために起こりえます。
(4)は「右移動指示待ち」状態の「exit/右ボタン消灯」がない(または、「右移動指示待ち」状態から「奥移動指示待ち」状態への「after(30 秒)」をトリガとする遷移に「/右ボタン消灯」アクションがない)、また、「奥移動指示待ち」状態の「exit/奥ボタン消灯」がない(または、「奥移動指示待ち」状態から「クレーン動作中」状態への「after(30 秒)」をトリガとする遷移に「/奥ボタン消灯」アクションがない)ために、{右|奥}のボタンを 30 秒以上押さずにいた場合は「アイドリング中」状態に戻っても点滅したままになる可能性があります。
-2–
Copyright©2009 UMTP

LastUpdate : 2009/2/13(5) について、設問のステートマシン図では「復帰移動中」の直交状態内部からそれぞれ「景品投下動作中」へ直接遷移が出ているため、「手前端スイッチ ON」か「左端スイッチ ON」のどちらか先に起こったイベントに反応して自動的に「左移動中」と「手前移動中」の両方の状態から抜けてしまうために起こりえます。

設問 2
正解
a.
b.
c.
d.
e.
f.

(2)
(5)
(1)
(3)
(6)
(7)

解説
責務が集中しているクラスを分解する能力、および、本質的なクラスを発見する能力を問う設問です。詳細は 図 2 をご覧ください。
右10..1移動指示機構

ボタン- 状態 : ボタン状態 = OFF

奥

0..1+ 状態取得():ボタン状態

10..1- 状態 : ランプ状態 = 消灯
- 点滅周期 : 時間[0..1]

0..1- ランプ点滅周期 : 時間
+ 状態変更通知(直前の状態:ゲーム状態,現在の状態:ゲーム状態)

0..1

ランプ

右状態通知機構+ 点灯開始()+ 点滅開始(周期:時間)+ 消灯()

奥

0..1アーム開閉機構

クレーン・ゲーム機

クレーン- 状態 : ゲーム状態 = アイドリング中- 移動指示待ち時間 : 時間 = 30秒+ コイン投入()+ 右移動開始指示受付()+ 右移動停止指示受付()+ 右端到達通知()+ 奥移動開始指示受付()+ 奥移動停止指示受付()+ 奥端到達通知()# ゲーム制御()# 状態変更(新状態:ゲーム状態)

0..1

1 - 開閉速度 : 速度
- 開閉時間 : 時間

+ 右移動開始()+ 右移動停止()
1 + 奥移動開始()+ 奥移動停止()+ クレーン動作実行()+ 復帰移動実行()+ 景品投下動作実行()+ 終点到達通知(発信元:水平移動機構)+ 始点到達通知(発信元:水平移動機構)

0..1+ 開く()
+ 閉じる()

1モータ

垂直移動機構0..1

1 - 昇降速度 : 速度
- 昇降時間 : 時間

- 状態 : モータ状態 = 停止
- 速度 : 回転数 = 0

0..1
1+ 下降()+ 上昇()

0..1

0..1

0..1

0..1

左右水平移動機構

1- 移動速度 : 速度
1

コイン投入口前後《enumeration》
ゲーム状態
アイドリング中
右移動指示待ち
右移動中
奥移動指示待ち
奥移動中
クレーン動作中
復帰移動中
景品投下動作中《enumeration》
スイッチ状態《enumeration》
ボタン状態

ONOFFONOFF《enumeration》
ランプ状態《enumeration》
モータ状態

消灯点滅
点灯

停止
正回転
逆回転

図 2 解答のクラス図-3–Copyright©2009 UMTP

+ 正回転開始(速度:回転数)+ 逆回転開始(速度:回転数)+ 停止()+ 終点方向移動開始()+ 始点方向移動開始()+ 移動停止()+ 終点まで移動()+ 始点まで移動()

0..1

0..1

0..1

1 始点端

1 終点端

マイクロ・スイッチ- 状態 : スイッチ状態 = OFF+ 状態取得():スイッチ状態

LastUpdate : 2009/2/13

設問 3
正解
a.
b.
c.
d.
e.
f.

(7)
(6)
(3)
(7)
(7)
(5)

解説
各クラスの責務に応じた属性/操作の分割/割当ができるかどうかを確認する設問です。各クラスへのメソッドの割当については 図 2 のクラス図をご覧ください。なお、想定したシーケンスは 図 3 ,図 4 , 図 5 , 図 6 , 図 7 のとおりです。
：コイン投入口：クレーン・ゲーム機：状態通知機構右：ランプ：移動指示機構：クレーン

左右：水平移動機構

左右：モータ

終点端：マイク
ロ・スイッチ

コイン投入()
ゲーム制御()
状態変更(右移動指示待ち)
状態変更通知(アイドリング中,右移動指示待ち)
終点(右端)に到達したケース。本来は並列処理ですが、ここでは省略して表記しています。

点滅開始(点滅周期)
右移動開始指示受付()
右移動開始()

終点方向移動開始()
正回転開始(回転数)
状態変更(右移動中)
状態変更通知(右移動指示待ち,右移動中)
点灯開始()

loop

状態取得()[終点方向移動中&&スイッチ状態==OFF]

スイッチ状態 = 状態取得(-):スイッチ状態

終点到達通知(左右)右端到達通知()右移動停止()

移動停止()

停止()

図 3 想定したシーケンス(アイドリング中→右移動指示待ち→右移動中)-4–
Copyright©2009 UMTP

LastUpdate : 2009/2/13：クレーン・ゲーム機：状態通知機構

右：ランプ：移動指示機構

奥：ランプ：クレーン前後：水平移動機構

前後：モータ

終点端：マイク
ロ・スイッチ

状態変更(奥移動指示待ち)
状態変更通知(右移動中,奥移動指示待ち)
消灯()

終点(奥端)に到達する前にボタンが放されたケース。本来は並列処理ですが、ここでは省略して表記しています。

点滅開始(点滅周期)
奥移動開始指示受付()
奥移動開始()

終点方向移動開始()
正回転開始(回転数)
状態変更(奥移動中)

loop

状態変更通知(奥移動指示待ち,奥移動中)
点灯開始()

状態取得()[終点方向移動中&&スイッチ状態==OFF]

スイッチ状態 = 状態取得(-):スイッチ状態

奥移動停止指示受付()
奥移動停止()

移動停止()

停止()

状態変更(クレーン動作中)
状態変更通知(奥移動中,クレーン動作中)
消灯()

図 4 想定したシーケンス(奥移動指示待ち→奥移動中)：クレーン・ゲーム機：状態通知機構
クレーン動作実行()：アーム開閉
機構

：クレーン

開く()

開閉：モータ：垂直移動機構

昇降：モータ

正回転開始(回転数)

待ち(開閉時間)停止()
下降()

正回転開始(回転数)

待ち(昇降時間)
停止()
閉じる()

逆回転開始(回転数)

待ち(開閉時間)停止()
上昇()

逆回転開始(回転数)

待ち(昇降時間)停止()

状態変更(復帰移動中)
状態変更通知(クレーン動作中,復帰移動中)

図 5 想定したシーケンス(クレーン動作中)-5–
Copyright©2009 UMTP

LastUpdate : 2009/2/13：クレーン・ゲーム機：状態通知機構

左右：水平移動機構：クレーン

始点端：マイク
ロ・スイッチ

左右：モータ

前後：水平移動機構

前後：モータ

始点端：マイク
ロ・スイッチ

復帰移動実行()
始点まで移動()par

逆回転開始(回転数)loop

状態取得()[ スイッチ状態== OFF ]スイッチ状態 = 状態取得(-):スイッチ状態
停止()
始点まで移動()逆回転開始(回転数)loop

状態取得()[ スイッチ状態== OFF ]スイッチ状態 = 状態取得(-):スイッチ状態
停止()

状態変更(景品投下動作中)
状態変更通知(復帰移動中,景品投下動作中)

図 6 想定したシーケンス(復帰移動中)：クレーン・ゲーム機：状態通知機構：アーム開閉機構：クレーン

景品投下動作実行()開く()

開閉：モータ

正回転開始(回転数)

待ち(開閉時間)
停止()
閉じる()
逆回転開始(回転数)

待ち(開閉時間)停止()

状態変更(アイドリング中)
状態変更通知(景品投下動作中,アイドリング中)

図 7 想定したシーケンス(景品投下動作中→アイドリング中)-6–
Copyright©2009 UMTP