LastUpdate : 2009/02/13

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

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

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

Copyright©2009 UMTP

LastUpdate : 2009/2/13

問題
ゲーム・センターなどに配備されるクレーン・ゲーム機の制御ソフトウェアを開発しています。クレーン・ゲームは、アームの付いたクレーンをボタンで操作して、ガラス・ケースの中に入っているぬいぐるみなどの景品を掴み出して獲得することを狙うゲームです。
現在開発中のクレーン・ゲーム機の筐体の概略立体図を 図 1 に、概略三面図を 図 2 に示します。
左右モータ
前後モータ

奥端マイク
ロ・スイッチ

右端マイクロ・スイッチ
前後レール

クレーン
左右レール
手前端マイクロ・スイッチ
左端マイクロ・スイッチ

景品投下口
奥ボタン
コイン投入口右ボタン

右

景品取出口

奥左右

前後左手前
図 1 開発中のクレーン・ゲーム機の筐体の概略立体図-2–Copyright©2009 UMTP

LastUpdate : 2009/2/13

前後モータ(正回転:奥,逆回転:手前)
支柱
クレーン

奥端マイク
ロ・スイッチアーム

景品投下口

左右モータ(正回転:右,逆回転:左)

前後レール
手前端マイク
ロ・スイッチ左端マイク
ロ・スイッチ右端マイク
ロ・スイッチ
強化ガラス張り左右レール
コイン投入口右ボタン

奥ボタン※ 右ボタンと奥ボタンにはそれぞれランプが埋め込まれ一体化している。

平面図(真上から見下ろした図)
上部カバー

クレーン
強化ガラス張り

クレーン
アーム

アーム
景品

支柱

景品

景品投下口

景品取出口

正面図

側面図

図 2 開発中のクレーン・ゲーム機の筐体の概略三面図「前後レール」には「クレーン」「前後モータ」などが組み込まれており、「前後モータ」を正/逆回転させると「クレーン」が「前後レール」上を前後方向(奥/手前方向)にスライドします。「前後レール」
全体は「左右レール」の上に乗っていて、「左右モータ」を正/逆回転させると「前後レール」全体が「左右レール」上を左右方向にスライドします。また、「奥端」「手前端」「右端」「左端」の 4 つのマイクロ・スイッチが配置されており、これらのスイッチが ON になることによって「クレーン」や「前後レール」が前後左右それぞれの端に到達したことを検出することができます。
表 1 にクレーン・ゲーム機での一回のプレイ時の制御の流れを示します。

-3–
Copyright©2009 UMTP

LastUpdate : 2009/2/13

表 1 クレーン・ゲーム機での一回のプレイ時の制御の流れ
#イメージ

平面図

[1]

平面図

[2]

平面図

[3]

[4]

[5]

正面図
(上部)

備考
この状態では「左端」スイッチと「手前端」スイッチがON になっています。

プレイヤーがコインを投入すると「右ボタン」が点滅を始めます。プレイヤーが「右ボタン」を押すと、押している間だけ「右ボタン」が点灯状態になり「前後レール」全体が右側にスライドします。
ボタンを放すと「右ボタン」が消灯し、「前後レール」の移動が停止して[3]の状態に移ります。
次に、「奥ボタン」が点滅を始めます。プレイヤーが「奥ボタン」を押すと、押している間だけ「奥ボタン」が点灯状態になり「クレーン」が奥側にスライドします。ボタンを放すと「奥ボタン」が消灯し、「クレーン」の移動が停止して[4]の状態に移ります。
「クレーン」に内蔵されている「開閉モータ」によって「アーム」がゆっくり開かれます。

30 秒以上「右ボタン」が押されなかった場合、および、「前後レール」が「右端」に達した場合、「右ボタン」を消灯し「前後レール」を停止した後、自動的に[3]の状態に移ります。

「クレーン」に内蔵されている「昇降モータ」によって、「クレーン」がゆっくり降下します。

正面図
(上部)

-4–
Copyright©2009 UMTP

解説
アイドリング状態(プレイしていない時)では、「クレーン」は「景品投下口」の真上の位置にあります(「左端」かつ「手前端」の位置で、この位置を「ホーム・ポジション」と呼びます)。

30 秒以上「奥ボタン」が押されなかった場合、および、「クレーン」が「奥端」に達した
場合、「奥ボタン」を消灯し「クレーン」を停止した
後、自動的に[4]の状態に移ります。

LastUpdate : 2009/2/13

#

[6]

[7]

イメージ

正面図
(上部)

正面図
(上部)

[8]

[10]

「クレーン」に内蔵されている「昇降モータ」によって、「クレーン」がゆっくり上昇します。

このとき、景品がアームに掴まれて一緒に上がることがあります。
景品が掴めていなくても以降の動作は変わりません。

「クレーン」が「ホーム・ポジション」に到達したら、「クレーン」に内蔵されている「開閉モータ」によって「アーム」がゆっくり開かれます。

正面図
(上部)

最後に、「クレーン」に内蔵されている「開閉モータ」によって「アーム」がゆっくり閉じられます。

正面図
(上部)

-5–
Copyright©2009 UMTP

備考

「クレーン」が上昇しきったら、「左右モータ」と「前後モータ」を同時に逆回転させ、「クレーン」の位置を「ホーム・ポジション」まで戻します。

平面図

[9]

解説
「クレーン」に内蔵されている「開閉モータ」によって「アーム」がゆっくり閉じられます。

この時、アームに景品が掴まれていたら、その景品は「景品投下口」に落下して「景品取出口」からゲットすることができます。
「アーム」が閉じ終わったら[1]のアイドリング状態に戻ります。

LastUpdate : 2009/2/13

設問 1
分析の手始めとして、クレーン・ゲーム機全体の動作状態を理解するために、新人の山田さんにステートマシン図を描いてもらいました(図 3)。…ですが、このステートマシン図にはちょっと怪しそうな部分がいくつかあるように思えます。

アイドリング中

景品投下動作中

コイン投入

右移動指示待ち

手前端スイッチON
左端スイッチON右ボタン押し

entry/右ボタン点滅開始
右移動中
after(30秒)

復帰移動中
左移動中
entry/左右モータ逆回転開始
exit/左右モータ停止

entry/右ボタン点灯開始および左右モータ正回転開始
exit/左右モータ停止および右ボタン消灯
右ボタン放し奥移動指示待ちentry/奥ボタン点滅開始

手前移動中

奥ボタン押し奥移動中

entry/前後モータ逆回転開始
exit/前後モータ停止

after(30秒)

entry/奥ボタン点灯開始および前後モータ正回転開始
exit/前後モータ停止および奥ボタン消灯

クレーン動作中

奥ボタン放し図 3 クレーン・ゲーム機のステートマシン図(一部)※ 図中の「クレーン動作中」状態は 表 1 の[4]～[7]に相当する動作中であることを、「景品投下動作中」は 表 1 の[9]～[10]に相当する動作中であることを、それぞれ示しています。このステートマシン図では「クレーン動作中」および「景品投下動作中」の内部の状態遷移までは記述しません(省略されています)。
※ ボタンやスイッチのチャタリング(端子が接触するかしないかの微妙な位置にある場合にボタンの ON/OFF 状態が高速に切り替わる現象)対策などはここでは扱いません。
このステートマシン図のとおりにクレーン・ゲーム機が開発されたとしたら起こるであろうと予測される状況を、以下の選択肢の中からすべて選択してください。
(1)「前後レール」が右端に到達しても「左右モータ」が停止されない。

(2)「クレーン」が奥端に到達しても「前後モータ」が停止されない。

(3)「復帰移動中」では必ず左移動が完了してから手前移動が始まる。
-6–

Copyright©2009 UMTP

LastUpdate : 2009/2/13(4)「アイドリング中」の状態に戻ったのに「右ボタン」または「奥ボタン」(あるいはその両方)が点滅し続けている可能性がある。

(5)「クレーン」の位置が「ホーム・ポジション」に戻りきらないうちに「アーム」の開閉が始まってしまい、せっかく掴んだ景品が途中で落とされてしまう。

(6)「景品投下動作中」に「右ボタン」を押しっぱなしにすると、コインを投入しないでもう一回ゲームをプレイすることができてしまう。

(7)「右移動中」の状態の時、「右ボタン」を放す前に「奥ボタン」を押すと「クレーン」が斜め(右奥方向)に移動する。

設問 2
新人の山田さんに分析レベルのクラス図も描いてもらったところ、非常に素直かつ大胆なクラス図が作成されました(図 4)。今後の成長が楽しみです。
クレーン・ゲーム機- 状態 : ゲーム機状態 = アイドリング中- ランプ点滅周期 : 時間
- 左右移動速度 : 速度
- 前後移動速度 : 速度
- 開閉速度 : 速度
- 開閉時間 : 時間
- 昇降速度 : 速度
- 昇降時間 : 時間
- ボタン待ち時間 : 時間 = 30秒+ コイン投入()# ゲーム制御()# 状態変更(新状態:ゲーム機状態)
・・・

0..1

手前端 1

0..1

奥端 1

0..1

左端 1 - 状態 : スイッチ状態 = OFF

0..1

右端 1 + 状態取得():スイッチ状態

0..1

マイクロ・スイッチ

右ボタン1

ボタン0..1- 状態 : ボタン状態 = OFF
奥ボタン
1 + 状態取得():ボタン状態

0..1

右ランプ

ランプ

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

奥ランプ + 点灯開始()
1 + 点滅開始(周期:時間)+ 消灯()

0..1

左右 1

0..1

前後 1

0..1

開閉 1

0..10..1

モータ- 状態 : モータ状態 = 停止
- 速度 : 回転数+ 正回転開始(速度:回転数)
昇降 1+ 逆回転開始(速度:回転数)+ 停止()
コイン投入口1《enumeration》
ゲーム状態
アイドリング中
右移動指示待ち
右移動中
奥移動指示待ち
奥移動中
クレーン動作中
復帰移動中
景品投下動作中《enumeration》
スイッチ状態ONOFF《enumeration》
ボタン状態
ONOFF
《enumeration》
ランプ状態
消灯点滅
点灯

コイン投入口《enumeration》
モータ状態
停止
正回転逆回転図 4 最初のクラス図…ただ、図 4 のような構造では「クレーン・ゲーム機」クラスが細かい制御まで一手に担っているため、このまま設計/実装と進めてしまうと、類似した製品開発にクラスの一部を再利用したり、クレーンの移動/昇降メカニズムが変わったりした場合など不利になりそうに思われます。

-7–Copyright©2009 UMTP

LastUpdate : 2009/2/13

そこで、以下のような事項について考慮しながら、新人の山田さんと一緒に分析モデルの洗練を進めてみました。
●
●
●
●
●

現在「クレーン・ゲーム機」が担っている責務をいくつかのクラスに分担/整理する。
「クレーン・ゲーム機」を構成する各部品の仕様が変わっても、「クレーン・ゲーム機」自体はその変更の影響を受けにくいような構造にしたい。
「アーム」の開閉/「クレーン」の昇降については、「開閉モータ」/「昇降モータ」をそれぞれ一定速度で一定時間動作させることによって実行する。
一定時間の「待ち」については「タイマー」のようなユーティリティ・クラスを利用することによって、どの「クラス」のインスタンスでも実行できるものと想定する。
現在開発中の機種の後継機では、「ボタン」付近に小さな液晶画面が追加され、「ランプ」の点灯/点滅に加えてその液晶画面でも「クレーン・ゲーム機」の現在の状態に応じた様々な表示を行うという仕様になる可能性が高い。

図 5 に役割が分解されたクラス図を示します。
右11(a)

0..1

奥10..1

ボタン- 状態 : ボタン状態 = OFF+ 状態取得():ボタン状態

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

0..1

1 + 点灯開始()

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

0..1

クレーン・ゲーム機

アイドリング中
右移動指示待ち
右移動中
奥移動指示待ち
奥移動中
クレーン動作中
復帰移動中
景品投下動作中

0..1
1
モータ

0..1+ コイン投入()# ゲーム制御()# 状態変更(新状態:ゲーム状態)
・・・

1(d)

0..1
0..1

10..1

左右 1前後 11(e)0..1コイン投入口《enumeration》
スイッチ状態《enumeration》
ボタン状態

ONOFFON
OFF0..1

始点端 1(f)0..10..1
終点端 1

マイクロ・スイッチ- 状態 : スイッチ状態 = OFF+ 状態取得():スイッチ状態-8–+ 正回転開始(速度:回転数)+ 逆回転開始(速度:回転数)+ 停止()
1

図 5 役割が分解されたクラス図

Copyright©2009 UMTP

- 状態 : モータ状態 = 停止
1 - 速度 : 回転数 = 00..10..1《enumeration》
ゲーム状態

奥 + 点滅開始(周期:時間)+ 消灯()

(c)

10..1

ランプ

1

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

消灯点滅
点灯

停止
正回転逆回転LastUpdate : 2009/2/13

図 5 中の ( a ) ～ ( f ) のそれぞれにもっとも良くあてはまると思われるクラス名を以下の選択肢から選択してください。
※ 選択肢の中にはどこにも当てはまらないものも含まれています。
選択肢：
(1)

アーム開閉機構(2)

移動指示機構(3)

クレーン(4)

左右レール

(5)

状態通知機構(6)

垂直移動機構(7)

水平移動機構

(8)

前後レール

設問 3
図 5 のクラス図を前提に、以下の ( a ) ～ ( f ) の属性/操作を定義するのに適切だと思われるク
ラスを選択肢の中からそれぞれひとつずつ選択してください。
※ 解答欄 1 つに対して 1 つの選択肢があてはまりますが、選択肢の中には複数の解答欄に当てはまるものもあります。
※ 選択肢の中にはどこにも当てはまらないものも含まれています。
a.
b.
c.

d.

e.
f.

移動速度 : 速度
昇降時間 : 時間 、 昇降速度 : 速度
クレーン動作実行()※ 「アーム開く→クレーン下降→アーム閉じる→クレーン上昇」 までの一連の動作を実行するメソッド。動作が完了するまでリターンしない。
始点まで移動()※ 始点端に達するまで始点方向への移動動作を実行する。動作が完了するまでリターンしない。
終点方向移動開始()※ 終点方向への移動を開始する。
状態変更通知(直前の状態:ゲーム状態, 現在の状態:ゲーム状態)※ 現在のゲーム状態が変わったという通知を受け付けるメソッド。

選択肢：
(1)

アーム開閉機構(2)

移動指示機構

(3)

クレーン

(4)

左右レール

(5)

状態通知機構-9–

Copyright©2009 UMTP

LastUpdate : 2009/2/13(6)

垂直移動機構(7)

水平移動機構(8)

前後レール- 10 –
Copyright©2009 UMTP