組込み分野のための
UML モデル解説書

製品編 P002

電子オルゴール

本書は、UML モデルカタログに含まれる「電子オルゴール」のUMTP 組込みモデルの詳細を記述したものです。モデリングの初心者には教科書

モデリング部会や参考書として、モデリングのベテランの方々にはモデルのヒント

2016.5.15 更新

として、ぜひともお手元に置いて活用してください。

Copyright(c)2012-2016 consortium for UML based Modeling Technologies Promotion All Rights Reserved

組込み分野のための UML モデル解説書

UMTP は特定非営利活動法人 UML モデリング推進協議会の登録商標です。その他、本書に記載されている会社名、商品名などは、一般に各社の商標または登録商標です。

2

電子オルゴール目次

はじめに .................................................................................................... 4要求仕様 .................................................................................................... 4
モデル一覧 ............................................................................................... 16
エンティティに着目したモデル ..................................................................... 17
分析モデル ............................................................................................. 19
PIM 設計モデル ....................................................................................... 31
参考文献 .................................................................................................. 63
付録：ユースケース記述 .............................................................................. 64
付録：分析モデルの動的モデル ..................................................................... 89
付録：メニュー構成 .................................................................................. 102
付録：状態遷移表..................................................................................... 110
付録：設計モデルの静的モデル ................................................................... 114
付録：設計モデルの動的モデル ................................................................... 125

3

組込み分野のための UML モデル解説書

はじめに
電子オルゴールは、携帯音楽プレーヤーのような音楽再生装置で、曲やプレイリスト1を再生できます。
オルゴールや音楽再生装置という身近なものを考えていますので、分かりやすいモデルです。
本モデルでは、曲やプレイリスト、再生パラメータをリストにまとめて管理する方式を表現しています。
これは、データをグルーピングして管理する場合の参考になります。また、ユーザーインターフェースに関しては、設計モデルにデザインパターンを適用したモデルを提示しています。こちらは、小型の画面を持つ機器のユーザーインターフェースの設計に用いることができます。

要求仕様
機械式オルゴールは、シリンダやディスク上のピンが、オルゴールの櫛の歯を弾くことによって音楽を奏でます。本カタログで扱う電子オルゴールは、機械式オルゴールの発音操作をソフトウェア制御します。
これにより、(通常の機械式オルゴールは 1 曲の演奏を行いますが)、複数の曲の再生に対応できるオルゴー
ルとなります。
曲を再生する機器には、携帯音楽プレーヤーがあります。電子オルゴールは、携帯音楽プレーヤーと同様のプレイリストにより複数の曲を再生します。プレイリストについて、携帯音楽プレーヤーとほぼ同様です。反面、携帯音楽プレーヤーは、テンポを変更できませんが(再生速度を変更すると可能ですが、音程も変わってしまいます)、電子オルゴールは、音程を変えずに、テンポを変更できます。これは、オルゴールが楽譜としてシリンダを持っており、それを元に演奏することをソフトウェアで再現しているためです。

機械式オルゴールの解説

シリンダ

櫛

ベッドプレート1

プレイリストは、曲や動画を再生する順番に並べたリスト。携帯音楽プレーヤーや PC の音楽再生ソフトウェアでは、プレイリス
トを使用して、好みの順番で曲や動画を再生することができる。

はじめに

4

電子オルゴール

シリンダ

オルゴールにとっての「楽譜」。櫛を弾くためのピンが打ち込まれている。シリンダが回転することにより櫛を弾くことで発音する。

櫛(くし)

発音するための金属板(「歯」)が並んでいる。歯の長さにより音程が決まる。

ベッドプレート

鋳物でできた土台。櫛が弾かれた際の音をボックスに伝える。

ボックス

通常は木製の箱。ベッドプレートの振動を反響させる共鳴装置として機能する。

ハードウェア仕様
1. 小型の木製の箱である（発音装置との組み合わせでオルゴールを再現できるもの）
2. 駆動
 バッテリで駆動すること
 AC アダプタ接続により駆動すること
3. インターフェース
 小型液晶ディスプレイ
 上/下/左/右/中央の 5 個のキー
 SD-Card
4. 音源方式
 ウェーブテーブル SW シンセ

電子オルゴールの基本的な機能
1. プレイリストに曲を登録し、プレイリスト内の曲を再生していくことができます。
2. 調律2、リヴァーブ3、音量の設定を「曲調」として登録しておくことができます。

2

調律は、音階(ドレミファソラシド)の音の高さ(周波数)の決め方。現在、1 オクターブを 12 等分した 12 平均律が一般的であるが、純正律、ミーントーンなど、色々な方式が存在する。
3
リヴァーブは、音の響き方。英語 reverberation(残響)より。同じ楽器の音でも、コンサートホールの響きや小さな部屋の響きなど、環境により音が異なる。この場合は、演算処理によりコンサートホールや小さな部屋の残響を再現することを示す。

5

組込み分野のための UML モデル解説書

ユースケース
本カタログモデルのユースケースを示します。図 1 はユースケースをカテゴリ分けしたパッケージ、図
2 以降が個々のユースケースになります。

電子オルゴールのユースケースのパッケージ
uc 要求
電子オルゴール
再生

プレイ リスト編集

曲管理
ユーザ
曲調編集

その他

図1

電子オルゴールのユースケース
uc 再生
電子オルゴール
UC01：再生プレイリストを選択する

ユーザ

UC04：再生曲を選択する

UC02：プレイ リ
ストを再生する

UC05：曲を再生
する

図2

要求仕様

6

UC03：プレイ リ
ストの再生を停止する

UC06：曲の再生を停止する

電子オルゴールuc プレイ リスト編集
電子オルゴール
UC07：プレイ リストの一覧を見る

ユーザ

UC11：プレイ リストの曲の一覧を見る

UC08：プレイ リストを登録する

UC09：プレイ リ
ストを削除する

UC12：プレイ リ
ストに曲を登録する

UC13：プレイ リ
ストから曲を削除する

UC10：プレイ リ
ストの名前を変更する

図3

uc 曲管理電子オルゴール
UC14：曲の一覧
を見る

UC15：SDカードの曲の一覧を見る

UC16：SDカード
から曲を登録する

ユーザ

UC17：曲を削除
する

図4

uc 曲調編集
電子オルゴール
UC18：曲調を登録する

UC19：曲調を変更する

UC20：曲調を削除する

ユーザ

UC21：曲調を適用する

図5

uc その他
電子オルゴール
UC22：リピート再生を設定/解除する

UC23：シャッフ
ル再生を設定/解除する

UC24：音量を変更する

UC27：テンポを変更する

UC28：発音を強制停止する

UC25：調律を変更する

ユーザ
UC26：音色を変
更する

図6

7

UC29：電子オル
ゴールをリセットする組込み分野のための UML モデル解説書

ユースケース一覧
パッケージ
再生プレイリスト
編集

曲管理

曲調編集

その他

要求仕様

#

ユースケース名

ユースケース
記述

分析 動的
モデル

PIM 設計動的モデル

UC01

再生プレイリストを選択する

本文

本文

本文

UC02

プレイリストを再生する

本文

本文

本文

UC03

プレイリストの再生を停止する

本文

本文

本文

UC04

再生曲を選択する

付録

付録

記載なし

UC05

曲を再生する

付録

付録

記載なし

UC06

曲の再生を停止する

付録

付録

記載なし

UC07

プレイリストの一覧を見る

付録

付録

記載なし

UC08

プレイリストを登録する

付録

付録

記載なし

UC09

プレイリストを削除する

付録

付録

記載なし

UC10

プレイリストの名前を変更する

付録

付録

記載なし

UC11

プレイリストの曲の一覧を見る

付録

付録

記載なし

UC12

プレイリストに曲を登録する

本文

本文

付録

UC13

プレイリストから曲を削除する

付録

付録

記載なし

UC14

曲の一覧を見る

付録

付録

記載なし

UC15

SD カードの曲の一覧を見る

付録

付録

記載なし

UC16

SD カードから曲を登録する

付録

付録

記載なし

UC17

曲を削除する

付録

付録

記載なし

UC18

曲調を登録する

本文

本文

付録

UC19

曲調を変更する

付録

付録

記載なし

UC20

曲調を削除する

付録

付録

記載なし

UC21

曲調を適用する

付録

付録

記載なし

UC22

リピート再生を設定/解除する

付録

付録

記載なし

UC23

シャッフル再生を設定/解除する

付録

付録

記載なし

UC24

音量を変更する

付録

付録

記載なし

UC25

調律を変更する

付録

付録

記載なし

UC26

音色を変更する

付録

付録

記載なし

UC27

テンポを変更する

付録

付録

記載なし

UC28

発音を強制停止する

付録

付録

記載なし

UC29

電子オルゴールをリセットする

付録

付録

記載なし

8

電子オルゴールユースケース記述
次ページ以降に、主要なユースケース記述を掲載します。その他は「付録：ユースケース記述」を参照してください。共通補足事項は、各ユースケースで省略している共通な事柄です。

共通補足事項■メインフロー、代替フロー、例外フロー
・特に注記の無い限り、ユーザは、フロー内の任意の操作を中断することができる。
・フローを中断した場合、システムの状態は、ユースケース開始時点の状態になる。

■本モデルでのモデル化対象外項目
登録
・
・
・
・

システムに登録できる曲の最大件数システムに登録できるプレイリストの最大件数
プレイリストに登録できる曲の最大件数
プレイリストの名前・ 使用できる文字
・ 名前の長さ
・ 曲調組み合わせの登録最大数
表示・ 同じ名前の曲を複数登録した場合の識別方法① 特にしない② 重複している名前の曲を登録する際に曲名に(1)、(2)、…を付けた名前を別名として与える 例：XXXXXXXX(1)③ 重複している名前の曲を登録する際に曲名に登録した日時を付けた名前を別名として与える 例：XXXXXXXX(10/10 10:10)
・ 曲の名前以外に表示するもの：
・ 曲の長さ(時間)入力
・ 音量の変化の段階指定方法

9

組込み分野のための UML モデル解説書<UC01：再生プレイリストを選択する>■概要
再生するプレイリストを選択し、再生する。

■アクター
ユーザ

■事前条件
・システムに 1 件以上の再生可能プレイリストが格納されていること。

■事後条件
・指定されたプレイリストが再生プレイリストとして指定されていること。
・指定されたプレイリストが再生開始されること。
・プレイリスト再生中であること。

■メインフロー
1. アクターは、システムに、再生プレイリストを指定する。
2. システムは、指定されたプレイリストを再生プレイリストとする。
3. システムは、再生開始位置を初期化する。
4. システムは、再生プレイリストを再生する。
5. UC を終了する。

■代替フロー
1a. 指定プレイリストと同一のプレイリストを再生中の場合
1a1. UC を終了する。
1b. 指定プレイリストとは別のプレイリストを再生中の場合
1b1. システムは現在再生しているプレイリストの再生を停止する。
1b2. メインフロー2.に遷移する。
1c. 曲を再生中の場合
1c1. システムは現在再生している曲の再生を停止する。
1c2. メインフロー2.に遷移する。

■例外フロー
なし

要求仕様

10

電子オルゴール<UC02：プレイリストを再生する>■概要
選択されたプレイリストを再生する。

■アクター
ユーザ

■事前条件
・再生プレイリストが指定されていること。
・プレイリスト再生停止中であること。

■事後条件
・指定されたプレイリストが再生開始されること。
・プレイリスト再生中であること。

■メインフロー
1. アクターは、システムに、再生プレイリストの再生を指示する。
2. システムは、再生プレイリストの再生開始曲より、再生を開始する。
3. UC を終了する。

■代替フローなし■例外フローなし■備考
・プレイリスト再生中の場合、曲の再生が終了すると、次の曲の再生を開始する。

11

組込み分野のための UML モデル解説書<UC03：プレイリストの再生を停止する>■概要
再生中のプレイリストの再生を停止する。

■アクター
ユーザ

■事前条件
・指定されたプレイリストを再生中であること。

■事後条件
・指定されたプレイリストが停止中であること。

■メインフロー
1. アクターは、システムに、再生停止を指示する。
2. システムは、再生プレイリストを再生停止する。
3. システムは、再生開始曲および再生開始位置を保存する。
4. UC を終了する。

■代替フローなし■例外フロー
なし

要求仕様

12

電子オルゴール<UC12：プレイリストに曲を登録する>■概要
ユーザが電子オルゴールのプレイリストに曲を登録する。

■アクター
ユーザ

■事前条件
・システムに 1 件以上のプレイリストが登録されている。
・システムに 1 曲以上の曲が登録されている。

■事後条件
・アクターが指定したプレイリストに指定した曲が登録されている。

■メインフロー
1. アクターは、システムに、プレイリストに曲を登録することを指示する。
2. アクターは、システムに、プレイリスト、登録する曲、登録する場所(何曲目の前/後)を指示する。
3. システムは、指示通りに曲を登録する。
4. UC を終了する。

■代替フローなし■例外フロー
3a. 指示されたプレイリストが登録されていない場合：
3a1. システムは、アクターへ、指示されたプレイリストが登録されていないので、曲を登録できない旨を通知する。
3a2. UC を終了する。
3b. 指示された曲が登録されていない場合：
3b1. システムは、アクターへ、指示された曲が登録されていないので、曲を登録できない旨を通知する。
3b2. UC を終了する。
3c.指示された登録する場所(何曲目の前/後)が正しくない場合(例：プレイリストは 2 曲なのに、3 曲目の後)：
3c1. システムは、アクターへ、指示された登録する場所が正しくないので、曲を登録できない旨を通知する。
3c2. UC を終了する。

13

組込み分野のための UML モデル解説書

3d. プレイリストに登録できる最大件数の曲が登録されている場合：
3d1. システムは、アクターへ、プレイリストに登録できる最大件数の曲が登録されているので、曲を登録できない旨を通知する。
3d2. UC を終了する。
3e. 指示されたプレイリストが再生中の場合：
3e1. システムは、アクターへ、指示されたプレイリストが再生中なので、曲を登録できない旨を通知する。
3e2. UC を終了する。

■備考
・プレイリストに登録できる曲は、あらかじめ電子オルゴールに登録しておかなければならない。
・同じ曲を同じプレイリストに何回でも登録できる。

要求仕様

14

電子オルゴール<UC18：曲調を登録する>■概要
ユーザが電子オルゴールに曲調を登録する。

■アクター
ユーザ

■事前条件
なし

■事後条件
・システムにアクターが指定した曲調が登録されている。

■メインフロー
1. アクターは、システムに、曲調の登録を指示する。
2. アクターは、システムに、登録する曲調の内容を指示する。
3. システムは、指示された曲調を登録する。
4. UC を終了する。
■代替フローなし■例外フロー
2a. 登録できる最大件数の曲調が登録されている場合：
2a1. システムは、アクターへ、登録できる最大件数の曲調が登録されているので、これ以上登録できない旨を通知する。
2a2. UC を終了する。

3a. 指示された曲調の内容が正しくない場合：
3a1. システムは、アクターへ、指示された曲調の内容が正しくないので、登録できない旨を通知する。
3a2. UC を終了する。

■備考
・曲調は、調律、リヴァーブ、音量の組み合わせとする。
・調律の種類は、「<UC25：調律を変更する>」参照。
・リヴァーブの種類は、ROOM、HALL、PLATE、とする。

15

組込み分野のための UML モデル解説書

モデル一覧
モデル名

概要

機能に着目した
モデルなし

エンティティに着目したモデル

要求仕様の内容をエンティティ中心に分析し、オル
ゴールの部分と曲を順番に再生する音楽再生装置の2 面から考えました。

状態に着目したモデル

なし

メタファを使っ
たモデル

なし

モデル一覧

ポイント

16

オルゴールや音楽再生装置という身近なものを考えていますので、分かりやすいモデルです。
また、応用例も考えやす
いと思います。

電子オルゴール

エンティティに着目したモデル
モデリングのコンセプト(1) 電子オルゴールをモデリングするにあたり、機械式オルゴールを以下のようにとらえなおしています。
機械式オルゴール

電子オルゴール

シリンダ：

曲：機械式オルゴールのシリンダを抽象化している。

櫛
ベッドプレートボックス

音源：機械式オルゴールの櫛、ベッドプレート、ボックスに対応している。

シリンダを曲、櫛などを音源ととらえ、曲と音源が協調して、曲を再生します。
1: 再生する():曲:クライアント
3: 曲データを取得する()

2: 再生する():音源

4: 音を出力する()

繰り返して、曲を再生する。

(2) 「電子オルゴール」を一般的な「曲を順番に再生する音楽再生装置」として捉えます。
(2a) プレイリストは曲を順番に再生するので、プレイリストは曲を集約します。
バッハ :プレイ リスト

G 線上のアリア :曲

プレリュード :曲

ポロネーズ :曲

1番目

2番目

3番目

(2b) 一般的に音楽再生装置のメニューはフォルダのような階層があり、プレイリストを選択します(フォルダはフォルダまたはプレイリストを集約します)。電子オルゴールには階層はなく、フォルダはプレイリストを集約します。
ジャンル :フォルダ「プレイ リスト」 :フォルダ

バッハ :プレイ リスト

お気に入り :プレイ リスト

一般的なもの。電子オルゴールでは使用しない

アルバム :プレイ リスト

17

フォスター :プレイ リスト

組込み分野のための UML モデル解説書(2c) 電子オルゴールのすべての曲を管理するものが必要で、全曲目録とします。
:全曲目録

G 線上のア リア :曲
プレリュード :曲
ポロネーズ :曲
夢路より :曲
ケンタッキーの我が家 :曲(2d) プレイリストと全曲目録は、曲を集約し、再生する責務を持つことが共通しています。共通部分を再生目録として汎化させます。
再生目録

プレイ リスト全曲目録

以上をまとめた、電子オルゴールの主要なクラスを次に示します。
フォルダ

再生目録

プレイ リスト

曲

全曲目録

音源

エンティティに着目したモデル

18

電子オルゴール分析モデル
前述の電子オルゴールの主要なクラスに、ユースケースの実行に必要なユーザーインターフェース、曲調、曲調マネージャー、外部メディアを追加し、分析モデルを作成しました。また、クラス数が増えたため、ユーザーインターフェース、曲、曲調、デバイスのパッケージに分割しました。

静的モデル
本電子オルゴールは、液晶ディスプレイを用いたユーザーインターフェースやデバイスの制御など抽象度の異なる部分から成り立ちます。抽象度をそろえて扱うため、以下の 3 層のレイヤー構造を全体構造としました。


ユーザーインターフェース層：仕様変更が起きやすいユーザとのインターフェースを司ります。



アプリケーション層：アプリケーション固有の機能を提供します。



デバイス層：アプリケーション固有ではないデバイスに関連する部分になります。

アプリケーション層は前述の音楽再生装置の主要なクラスに相当する部分を曲パッケージ、曲調に関連する部分を曲調パッケージに分割しました。これは、曲を連続して再生するという音楽再生装置として主要な部分と音の味付けのように要求仕様により内容が大きく変動する部分(曲調)に分割し、主要な部分(曲)の(再)利用を可能にするためです。
ユーザーインターフェース層とデバイス層は、そのままユーザーインターフェースパッケージとデバイ
スパッケージとしました。前述の音楽再生装置の主要なクラスのうち、音源はハードウェアに依存する部分なので、デバイスパッケージに置くことにします。

19

分析モデル

組込み分野のための UML モデル解説書

電子オルゴールの全体構造
class 00全体構造
ユーザーイ ンターフェース

ユーザーイ ンターフェース

ユーザーインターフェース
1

ユーザーインターフェース
1

ユーザーイン 0..1
ターフェース

ユーザーインターフェース1

曲

曲調「プレイリスト」
フォルダ
1

再生中の
再生目録 0..1
再生目録

フォルダ

曲終了の
通知先
0..1

1..*
全曲
目録 1

0..*
プレイ リスト

曲調マネージャー

全曲目録

全曲目録

1

曲調マネージ ャー

曲

0..1

所属先
1

再生中
の曲

構成員
0..*
{ordered}{bag}

曲 0..*

1 曲調マネー
ジャー

1
0..*

曲データ 0..1
の供給元

曲調

曲調

1

0..*

デバイ ス
曲の供給元

1

外部メディア

曲データ
の使用者

0..1

再生
装置

1

制御
対象

音源
1

制御対象
1

図7

曲パッケージは、曲やプレイリストなど、曲を連続して再生するという音楽再生装置として主要な部分になります。Ordered と bag については後述します。
ユーザーインターフェースパッケージはユーザとのインターフェースを司ります。
曲調パッケージは、本カタログの要求仕様の曲調を実現する部分です。要求仕様により内容が大きく変動する部分です。
デバイスパッケージは、電子オルゴールのデバイスをまとめたものです。
各クラスについては後述します。

エンティティに着目したモデル

20

電子オルゴール「曲」パッケージのクラス構造
class 曲
ユーザーイ ンターフェース
ユーザーイ ンターフェース

ユーザーインターフェース
1

ユーザーインターフェース

1「プレイリスト」フォルダ

1

0..1

ユーザーインターフェースフォルダ
プレイリストの最大件数 {readOnly}
プレイリストが最大件数未満か()
プレイリストの一覧を取得する()
プレイリストの名前を変更する(何番目のプレイリスト, 名前)
プレイリストを削除する(何番目のプレイリスト)
プレイリストを取得する(何番目のプレイリスト)
プレイリストを登録する(名前)
工場出荷状態に戻す()
1
再生中の
再生目録

再生目録
シャッフル
リピート

曲
ファイル名
曲データ
再生開始位置
再生中
名前

0..1

シャッフル再生を解除する()
シャッフル再生を設定する()
リピート再生を解除する()
リピート再生を設定する()
完全停止する()
完全停止中か()曲の一覧を取得する()

曲終了の
通知先

再生中
完全停止する()の曲
完全停止中か()0..1 曲データを取得する()再生する()
再生の準備を行う(曲終了の通知先)
再生を停止する()構成員 再生開始位置を初期化する()
再生中か()
0..*
削除する(){ordered} 生成する(ファイル名){bag}
名前を取得する()

0..1

曲を削除する(何番目の曲)
曲を取得する(何番目の曲)
曲終了を通知する()所属先再生する()

再生を停止する()
再生中か()
再生中の曲を設定する(何番目の曲)最初の曲を再生中の曲に設定する()
発音を強制停止する()

1..*

曲データ
の供給元
全曲目録

0..*
プレイ リスト
曲の最大件数 {readOnly}
名前曲が最大件数未満か()曲を削除する(何番目の曲)
曲を登録する(曲, 順序)再生する()
削除する()
生成する(名前)
名前を取得する()
名前を変更する(名前)

0..1

曲

0..*

1

全曲目録
曲の最大件数 {readOnly}
外部メディアから曲を登録する(何番目の曲)
外部メディアの曲の一覧を取得する()曲が最大件数未満か()曲を削除する(何番目の曲)
工場出荷状態に戻す()
再生する()
全曲目録

1

デバイ ス
曲の供給元

1

外部メディア

曲データの使用者 0..1

再生
装置 1

音源

図8

21

分析モデル

組込み分野のための UML モデル解説書

曲パッケージは、曲やプレイリストなど、曲を連続して再生するという音楽再生装置として主要な部分になります。
曲は、電子オルゴールの楽曲そのものです。デバイスパッケージの音源と共同で 1 曲毎の再生を行います。曲は、(対応するファイルからデータを読み出し)音源にデータを供給します。後述の動的モデルに、曲の状態遷移を記載しました。参照してください。
プレイリストは、曲を再生する順番に並べたものです。曲を順番に再生する責務を負います。一般的にプレイリストと呼ばれているものや音楽再生装置のアルバムも該当します。
フォルダは、プレイリストの集まりです。メニューでプレイリストの表示(選択)や、登録・削除などのプ
レイリストの管理を行います。本カタログの要求仕様では、「プレイリスト」を表示(選択)するフォルダだ
けですが、「ジャンル」や「アーティスト」、「アルバム」などのフォルダなども実現できます。また、フォルダが自身も集約するように変更すると、フォルダを階層化する拡張が実現できます。
全曲目録は、電子オルゴールのすべての曲を持ち、(外部メディアからの)局の登録・削除などの曲の管理を行います。また、1 個の曲を選択/再生する責務も持ちます。
再生目録は、プレイリストと全曲目録の上位概念です。曲を集約し管理する責務と曲を順番に再生する責務を持ちます(リピート再生やシャッフル再生も含みます)。
全曲目録と曲の集約関係に付いている「ordered」は、順序付けがあることを示し、全曲目録は順番に並んだ曲を管理しています。また、「bag」は多重集合を示し、同じ要素を複数持つことができます。全曲目
録を特化したプレイリストは同じ曲を複数回持つことができるので、bag を付加しています。
ユーザーインターフェースは、この再生目録と「再生中の再生目録」という関連端名で関連を持ちます。
この関連は、ユースケース<UC02：プレイリストを再生する>の実行中には、プレイリストと関連し、ユースケース<UC05：曲を再生する>の実行中には、全曲目録と関連します。このように、上位概念の再生目録によって、どちらでも同じように扱うことができます。

エンティティに着目したモデル

22

電子オルゴール「曲調」パッケージのクラス構造
class 曲調
ユーザーイ ンターフェース
ユーザーイ ンターフェース

ユーザーインターフェース

曲調マネージャー

1

1

曲調マネージ ャー
曲調の最大件数 {readOnly}
テンポを変更する(テンポ)
音色を変更する(音色)音量を設定する(音量)曲調が最大件数未満か()
曲調を削除する(何番目の曲調)曲調を適用する(何番目の曲調)
曲調を登録する(調律, リヴァーブ種別, 音量)
曲調を変更する(何番目の曲調, 調律, リヴァーブ種別, 音量)
工場出荷状態に戻す()
調律を設定する(調律)
発音を強制停止する()
曲調マネージャー

1

1
0..*
曲調
リヴァーブ種別
音量
調律
削除する()
生成する()
適用する()
変更する(調律, リヴァーブ種別, 音量)
曲調

0..*

デバイ ス
制御
制御
対象 1 対象

1

音源

図9

曲調パッケージは、本カタログの要求仕様の曲調を実現する部分です。要求仕様により内容が大きく変動する部分です。
曲調は、音量や調律など(曲調)のパラメータ群です。パラメータ値を保持する責務と適用(その値に変更)する責務を負います。
曲調マネージャーは、登録・削除などの曲調の管理を行います。また、テンポや音色の変更も行います。

23

分析モデル

組込み分野のための UML モデル解説書「ユーザーインターフェース」パッケージのクラス構造
class ユーザーイ ンターフェース
ユーザーイ ンターフェース

ユーザーインターフェース
1

シャッフル再生を解除する()
シャッフル再生を設定する()
テンポを変更する(テンポ)
プレイリストから曲を削除する(何番目のプレイリスト, 何番目の曲)
プレイリストに曲を登録する(何番目のプレイリスト, 何番目の曲, 順序)
プレイリストの一覧を見る()
プレイリストの曲の一覧を見る(何番目のプレイリスト)
プレイリストの再生を停止する()
プレイリストの名前を変更する(何番目のプレイリスト, 名前)
プレイリストを再生する()
プレイリストを削除する(何番目のプレイリスト)
プレイリストを登録する(名前)リセットする()
リピート再生を解除する()
リピート再生を設定する()
ユーザーインターフェース
音色を変更する(音色)音量を変更する(音量)1
外部メディアから曲を登録する(何番目の曲)
外部メディアの曲の一覧を見る()
曲の再生を停止する()
曲を再生する()
曲調を削除する(何番目の曲調)曲調を適用する(何番目の曲調)
曲調を登録する(調律, リヴァーブ種別, 音量)
曲調を変更する(何番目の曲調, 調律, リヴァーブ種別, 音量)
再生プレイリストが指定されているか()
再生プレイリストを選択する(何番目のプレイリスト)
再生曲が指定されているか()
再生曲を選択する(何番目の曲)
再生中の再生目録を設定する(再生目録)
調律を変更する(調律)電子オルゴールから曲を削除する(何番目の曲)
電子オルゴールの曲の一覧を見る()
発音を強制停止する()
ユーザーインターフェース

0..1

ユーザーインターフェース1

エ ンティティ「プレイリスト」
フォルダ

曲調

1

フォルダ

再生中の
再生目録

0..1

全曲目録

再生目録

全曲目録

1

曲調マネージャー1

曲調マネージャー

図10

ユーザーインターフェースパッケージは、ユーザとのインターフェースを司ります。
ユーザーインターフェースは、ユーザとのインターフェースを司ります。ユーザからの指示を曲パッケージや曲調パッケージへ伝え、曲パッケージや曲調パッケージからのレスポンスをユーザへ伝えます。
電子オルゴールは、ハードウェア仕様にありますように、キーが 5 個で、タッチパネルではない小型液
晶ディスプレイです。ですから、リッチな UI ではなく、簡素な UI となります。簡素な UI であれば、設計で詳細化すれば十分と考えられますので、分析レベルでは、必要な操作のリストアップだけ行うこととし、これ以上は設計で検討します。

エンティティに着目したモデル

24

電子オルゴール「デバイス」パッケージのクラス構造
class デバイ ス
曲調

曲調マネージャー1

エ ンティティ

1

曲調マネー
ジャー

0..*

再生目録

全曲目録

曲の供給元

1

1

曲データの供給元

0..1

曲

曲データの
使用者

0..1

再生
装置 1

外部メディア曲の一覧を取得する()曲をコピーする(番目)
使用可能か()

曲調

曲

全曲目録

曲調

0..*

音源
テンポ
リヴァーブ種別
音量
調律

0..*

制御
対象
1

テンポを変更する(テンポ)
リヴァーブ種別を設定する(リヴァーブ種別)
音を出力する()
音色を変更する(音色)音量を設定する(音量)再生する()
再生の準備を行う(曲)再生を停止する()
調律を設定する(調律)

制御対象
1

図11

デバイスパッケージは、電子オルゴールのデバイスをまとめたものです。
音源は、音を出す責務を持ちます。曲パッケージの曲と共同で 1 曲毎の再生を行います。曲からデータを供給してもらい、電子オルゴールの楽曲の音を出します。
外部メディアは、電子オルゴールに楽曲を入れるために用いるメディアです。実際には、SD カード(など)になります。

25

分析モデル

組込み分野のための UML モデル解説書

電子オルゴールの初期状態のオブジェクトを示します。この時点では、曲やプレイリスト、曲調が登録されていないため、それらのオブジェクトが存在しません。

初期状態のオブジェクト
object 10初期状態のオブジェクト:ユーザーインターフェース「プレイリスト」フォルダ :
フォルダ

:全曲目録

:外部メディア

:曲調マネージャー

:音源

図12

曲の登録(UC16)、プレイリストの登録(UC08)、プレイリストへの曲の登録(UC12)を行った後のオブジ
ェクトを示します。なお、追加された曲やプレイリストとそれらに関連するオブジェクトのみを図示します。

曲とプレイリストを追加した場合のオブジェクト
object 11曲とプレイ リストを追加した場合のオブジ ェクト「プレイ リスト」フォルダ :フォルダ:全曲目録

バッハ :プレイ リスト

Ｇ線上のア リア :曲

プレリュード :曲

ポロネーズ :曲
お気に入り :プレイ リスト
夢路より :曲

ケンタッキーの我が家 :曲

フォスター :プレイ リスト

金髪のジ ェニー :曲

図13

エンティティに着目したモデル

26

電子オルゴール

動的モデル
操作の検討と実現性の確認のため、相互作用図を作成しました。ここでは主要なユースケースのみを掲載します。その他は「付録：分析モデルの動的モデル」を参照してください。
分析モデルの動的モデルは、修正が容易なので、コミュニケーション図を使用します。ただし、コミュ
ニケーション図では、生成、消滅、複合フラグメントが描けないので、シーケンス図を使用します。

ユースケース<UC01：再生プレイリストを選択する>の相互作用
sd UC01：再生プレイ リストを選択する:ユーザーインターフェース:フォルダ

お気に入り :プレイリスト

ポロネーズ :曲

:音源

:ユーザー
再生プレイリストを選択する(2番目のプレイリスト)
プレイリストを取得する(2番目のプレイリスト)(a)「取得したプレイリスト」と「再生中の再生目録」の比較などを行い、代替フローをチェックし、代替フローの場合は代替フローを実行する(b)

最初の曲を再生中の曲に設定する()
再生中の曲を設定する(所属する曲[0])再生の準備を行う(お気に入り)
再生開始位置を初期化する()(c)

再生の準備を行う(ポロネーズ)

再生中の再生目録を設定する(お気に入り)再生する()(d)loop[プレイリストのすべての曲](f)

再生する()
再生する()
loop[すべての曲データ]
曲データを取得する()

(e)

(g)

音を出力する()

曲終了を通知する()

図14(a) アクターから「再生プレイリストを選択する」指示を受けると、ユーザーインターフェースは以下を行
います。

27

分析モデル

組込み分野のための UML モデル解説書

・フォルダから指定されたプレイリストを取得します。
・指定されたプレイリストと「再生中の再生目録」の比較などを行い、代替フローをチェックし、代替フローの場合は代替フローを実行します。
・指定されたプレイリストに最初の曲を再生中の曲に設定するように指示します。
・指定されたプレイリストを再生中の再生目録に設定します。
(b) 最初の曲を再生中の曲に設定するように指示されると、プレイリストは、自身の持っている最初の曲を再生中の曲に設定します。具体的には最初の曲に再生の準備を指示します。
(c) 最初の曲は、再生開始位置を初期化し、音源に再生の準備を指示します。この際に自身を渡して音源からメッセージを取得できるようにします。
ここまでが純粋な「再生プレイリストを選択する」です。以降が再生になります。
(d)ユーザーインターフェースは、指定されたプレイリストに再生を指示します。
(e) プレイリストは、曲に再生の指示を出して、再生終了を受け取ります。これをすべての曲に行います。
(f) 曲は、再生の指示を受けると、音源に再生の指示を出します。
(g) 音源は、再生の指示を受けると、曲からデータを取得し、音を出力します。これを曲のデータすべてに繰り返します。

ユースケース<UC02：プレイリストを再生する>の相互作用
sd UC02：プレイ リストを再生する:ユーザーインターフェース:ユーザー

再生中の再生目録 :プレイリ
スト

:曲

:音源

プレイリストを再生する()
再生プレイリストが指定されているか()
(a)

(b)

再生する()
loop[プレイリストのすべての曲]再生する()

再生する()

loop[すべての曲データ]
曲データを取得する()音を出力する()

曲終了を通知する()

図15(a) アクターから「曲を再生する」指示を受けると、ユーザーインターフェースは、再生プレイリストが指定されていることを確認し、再生中の再生目録に再生を指示します。
(b) 以降は「ユースケース<UC01：再生プレイリストを選択する>の相互作用」の(d)以降と同じです。

エンティティに着目したモデル

28

電子オルゴールユースケース<UC03：プレイリストの再生を停止する>の相互作用
sd UC03：プレイ リストの再生を停止する:ユーザー
1: プレイリストの再生を停止する():ユーザーイ ンターフェース

2: 再生プレイリストが指定されているか()

4: 再生を停止する()

3: 再生を停止する()
バッハ :プレイ リスト

Ｇ線上のアリア :曲(a)
5: 再生を停止する()
:音源

(b)

図16

(a) アクターから「プレイリストの再生を停止する」指示を受けると、ユーザーインターフェースは、再生
プレイリストが指定されていることを確認し、再生中の再生目録(この場合「バッハ」プレイリスト)に再生の停止を指示します。
(b) プレイリストは曲に再生の停止を指示し、曲は音源に再生の停止を指示します。

ユースケース<UC12：プレイリストに曲を登録する>の相互作用
sd UC12：プレイ リストに曲を登録する:ユーザー
1: プレイリストに曲を登録する(3番目のプレイリスト,2番目の曲,最後)(a):ユーザーイ ンターフェース(c)
8: 曲を登録する(Ｇ線上のアリア,最後)

2: プレイリストを取得する(3番目のプレイリスト)

3:
6: 曲が最大件数未満か():フォルダ

4: 曲を取得する(2番目の曲)

5: 7: 完全停止中か()お気に入り :プレイ リスト

:全曲目録

(b)

図17

(a) アクターから「プレイリストに曲を登録する」指示を受けると、ユーザーインターフェースは、フォルダから指定されたプレイリストを取得します。
(b) ユーザーインターフェースは、全曲目録から指定された曲を取得します。
(c) ユーザーインターフェースは、曲が最大件数未満なこととプレイリストが再生中ではないことを確認し、プレイリストに曲を登録するように指示します。
29

分析モデル

組込み分野のための UML モデル解説書

ユースケース<UC18：曲調を登録する>の相互作用
sd UC18：曲調を登録する:ユーザーインターフェース:曲調マネージャー:ユーザー
曲調を登録する(調律, リヴァーブ種別, 音量)
曲調が最大件数未満か()
曲調を登録する(調律, リヴァーブ種別, 音量)(a)生成する()

:曲調

(b)

図18

(a) アクターから「曲調を登録する」指示を受けると、ユーザーインターフェースは、曲調が最大件数未満
なことを確認し、曲調マネージャーに曲調を登録するように指示します。
(b) 曲調マネージャーは、指定された曲調を作成し、登録します。

曲の状態遷移stm StateMachine
完全停止中
開始
再生の準備
を行う

停止中

完全停止する

完全停止する

再生する

再生中

再生を停止する
図19

曲の状態遷移は、上記にようになります。
完全停止中：音源へデータを提供できない(曲データの供給元の関連がない)、再生ができない状態です。
停止中：音源へデータを提供できる(曲データの供給元の関連がある)が、再生していない状態です。
再生中は：音源へデータを提供でき(曲データの供給元の関連がある)、再生している状態です。
基本的に CD プレーヤーなどと同じですが、ユースケース記述に合わせて、状態の名前を、完全停止中、停止中、再生中としました。CD プレーヤーでは、停止中、一時停止中、再生中の名前が用いられます。
また、プレイリストの状態遷移も、曲の状態遷移とほぼ同じです。違いは、「再生の準備を行う」というトリガーが「再生中の曲を設定する」または「最初の曲を再生中の曲に設定する」となっていることです。

エンティティに着目したモデル

30

電子オルゴール

PIM 設計モデル
前提条件
プラットフォームに依存しない PIM 設計モデルですが、必要な事柄がありますので、以下に列挙します。
・文字や線、円、矩形などの基本図形を描画するグラフィックスライブラリを搭載している。
・ファイルシステムを搭載し、ファイルの読み書きができるライブラリ(例：iostream、stdio)またはシス
テムコール(read/write)を搭載している。外部メディアの SD カードや曲などを格納する内部ストレージの読み書きに使用します。
・マルチスレッドをサポートしている。各オブジェクトが個別に動作することを可能とします。UML 上では非同期メッセージを送信することで、発信元と送信先それぞれのオブジェクトが個別に動作することを表します。
・音源の制御の詳細は検討しません。音源として DSP またはソフトウェアで実装されていたり、割り込みまたはポーリングを使用したり、色々なことが考えられますが、ここでは検討しません。分析モデルの粒度で設計します。

設計方針
近年、組み込み機器も画面を持ち、GUI を備えるものが増えました。GUI の作成は、手間がかかり、遷
移などの間違いを起こしがちです。そこで、設計課題を次のように設定します。
設計課題：GUI を間違いがなく、容易(定型的)に作成すること

この設計課題を解決するため、以下の手法を用います。
(i) GUI は、シンプルなリスト形式のメニュー(画面)を基本とします。
(ii) 各メニュー(画面)を UI の状態に見立てて、状態遷移表を作成することで間違いを防止します。
(iii) 実装にはデザインパターンの State パターンを適用し、容易に(定型的に)作成します。

また、分析モデルをベースにするため、大きな構造はレイヤー構造になります。単純に設計すると、上層(ユーザーインターフェース)から下層(曲)への各種の呼び出しと、下層(デバイスから)から上層(ユーザー
インターフェース)へのキー押下の情報など受け渡し、すなわち呼び出しが発生します。これでは、双方向の依存性がある、密結合となってしまいます。これを解消するために(疎結合を実現するため)、以下の手法を用います。
(iv) 上層から下層へは呼び出しを使用し、下層から上層へはイベントを使用します。
ただし、曲と音源の間は、やり取りが多く発生するので、後述の「曲データインターフェース」を使用します。

さらに一般的な以下の手法を用います。
(v) 誘導可能性の明示など、設計モデルとして詳細化します。

以降、それぞれを説明します。

31

PIM 設計モデル

組込み分野のための UML モデル解説書

メニュー
前述の「(i) GUI は、シンプルなリスト形式のメニュー(画面)を基本とします。」についてです。
メニュー(画面)は、小さな画面やキーの数も少ないことも考慮し、以下の方針でメニューを構成します。
・項目を上下方向に並べ、上キーと下キーでカーソルを上下に動かす。
・右キー/中央キーでカーソルのある行の画面に遷移する。
・左キーで前の画面に戻る。
・上部にタイトルを表示する。
このようにできることを制限し、シンプルにすることで、(遷移の)間違いを防止します。また、既存の機器の GUI と類似していますので、操作に迷うことも少なくなります。

メニューおよびメニューの遷移の一部を示します。全体は「付録：メニュー構成」を参照ください。

メニュー構成(説明用抜粋)
プレイリスト一覧
プレイリスト[プレイリスト]で→or 中央で再生開始

お気に入り
バッハ＿＿＿＿＿＿＿
フォスター→or 中央
←

←

メニュー

[曲]で
→or 中央プレイリスト＿＿＿＿
曲
←は何
曲調
もしない
編集
設定

←

↑ ↓でカーソル移動

曲一覧
Ｇ線上のアリア
プレリュード＿＿＿＿
ポロネーズ
夢路より
ケンタッキーの我…

→or 中央で→or 中央←エンティティに着目したモデル↑ ↓で音量変更→で再生

曲調 1
曲調 2＿＿＿＿＿＿＿
曲調 3

[プレイ
リスト
編集]で

↑ ↓でカーソル移動→or 中央32

プレリュード中央で停止

曲調→or 中央で曲調適用

曲再生
プレリュード
音量：10↑ ↓でカーソル移動←↑ ↓で音量変更
中央で停止

曲調一覧
[曲調]で

▶

→で再生

再生開始

曲

バッハ
Ｇ線上のアリア
音量：10↑ ↓でカーソル移動
メインメニュー

プレイリスト再生▶

電子オルゴール

状態遷移表
前述の「(ii) 各メニュー(画面)を UI の状態に見立てて、状態遷移表を作成することで間違いを防止します。」についてです。
各メニュー(画面)をユーザーインターフェースの状態に見立てて、状態遷移図を作成しました。

メニュー(画面)を UI の状態に見立てたステートマシン図
stm 説明用抜粋
↑キー押下
↓キー押下

↑キー押下
↓キー押下
←キー押下
プレイ リスト一覧

プレイ リスト再生→キー押下
中央キー押下

←キー押下

→キー押下
中央キー押下→キー押下 [プレイリスト一覧]
中央キー押下 [プレイリスト一覧]

メイ ンメニュー

←キー押下

←キー押下
曲一覧

曲再生
→キー押下
中央キー押下→キー押下 [曲一覧]中央キー押下 [曲一覧]→キー押下
中央キー押下→キー押下 [曲調一覧]
中央キー押下 [曲調一覧]
←キー
押下

↑キー押下
↓キー押下

↑キー押下
↓キー押下

↑キー押下
↓キー押下

↑キー押下
↓キー押下
曲調一覧

→キー押下
中央キー押下図20

この状態遷移図から状態遷移表を作成しました。すべての欄がきちんと埋まっていることを確認し、ヌケや間違いを防止しました。全体は「付録：状態遷移表」を参照してください。なお、全体の状態遷移図は非常に複雑なため、作成していません。

33

PIM 設計モデル

組込み分野のための UML モデル解説書

メニュー(画面)を UI の状態に見立てた状態遷移表(「メインメニュー」関連部分)

メインメニュー

S0→キー押下

中央キー押下

↑キー押下

↓キー押下

←キー押下

E0

E1

E2

E3

E4

[プレイリスト一覧][プレイリスト一覧]

/S1

/S1

[曲一覧]/S3[曲一覧]/S3[曲調一覧]/S5[曲調一覧]/S5

S0

S0

無視

[編集]/S7[編集]/S7[設定]/S9[設定]/S9

プレイリスト一覧

S1

S2

S2

S1

S1

S0

プレイリスト再生

S2

S2

S2

S2

S2

S1

曲一覧

S3

S4

S4

S3

S3

S0

曲再生

S4

S4

S4

S4

S4

S3

曲調一覧

S5

S5

S5

S5

S5

S0

State パターンの適用
前述の「(iii) 実装にはデザインパターンの State パターンを適用し、容易に(定型的に)作成します。」についてです。
state パターンは、各クラスが各状態に相当します。本モデルでは、各クラスが各メニュー(画面)に相当
するので、分かりやすい構成となります。また、メニューの変更は起こりがちですが、その場合は、・メニュー(画面)の追加は、クラスの追加
・遷移先の変更は、特定の操作の変更と限られた範囲での変更となり、修正が容易となります。
状態遷移図から State パターンを適用し、次のクラス図を作成しました。State パターンについては、参考文献『ソフトウェアパターン』や『オブジェクト指向における再利用のためのデザインパターン』を参照してください。

エンティティに着目したモデル

34

電子オルゴール

State パターンを適用したメニューのクラス構造
class Stateパターンを適用したメニューのクラス構造

ユーザーイ ンターフェース++

メニューを切り替える(メニュー) :void 0..1
通知する(キー入力) :void

-現在の
メニュー

+
+
+
+
+
+

1

<<interface>>
メニュー
右キーを押下する(ユーザーインターフェース) :void
下キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
上キーを押下する(ユーザーインターフェース) :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void

メイ ンメニュー
+
+
+
+
+
+
+

曲一覧メニュー

インスタンスを取得する() :メインメニュー
右キーを押下する(ユーザーインターフェース) :void
下キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
上キーを押下する(ユーザーインターフェース) :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void

+
+
+
+
+
+
+

曲再生メニュー

プレイ リスト一覧メニュー
+
+
+
+
+
+
+

+
+
+
+
+
+
+

インスタンスを取得する() :プレイリスト一覧メニュー
右キーを押下する(ユーザーインターフェース) :void
下キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
上キーを押下する(ユーザーインターフェース) :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void

プレイ リスト再生メニュー
+
+
+
+
+
+
+

インスタンスを取得する() :曲一覧メニュー
右キーを押下する(ユーザーインターフェース) :void
下キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
上キーを押下する(ユーザーインターフェース) :void
中央キーを押下する(ユーザーインターフェース) :void
表示する() :void

インスタンスを取得する() :曲再生メニュー
右キーを押下する(ユーザーインターフェース) :void
下キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
上キーを押下する(ユーザーインターフェース) :void
中央キーを押下する(ユーザーインターフェース) :void
表示する() :void

曲調一覧メニュー

インスタンスを取得する() :プレイリスト再生メニュー
右キーを押下する(ユーザーインターフェース) :void
下キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
上キーを押下する(ユーザーインターフェース) :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void

+
+
+
+
+
+
+

インスタンスを取得する() :曲調一覧メニュー
右キーを押下する(ユーザーインターフェース) :void
下キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
上キーを押下する(ユーザーインターフェース) :void
中央キーを押下する(ユーザーインターフェース) :void
表示する() :void

図21

ユーザーインターフェースは、分析モデルのユーザーインターフェースですが、メニューの表示やキーが押下された際の振る舞いを各メニューのクラスへ委譲しています。
メニューインターフェースは、各メニューが持たなければならない操作を規定しています。具体的には各キーが押下された場合の操作とメニューを表示する操作です。メニューを表示は、グラフィックスライブ
ラリを用いておこないますが、PIM 設計モデルでは、具体的な詳細は検討せず、PSM 設計モデルで規定します。
メインメニュー、プレイリスト一覧メニュー、プレイリスト再生メニュー、曲一覧メニュー、曲再生メ
ニュー、曲調一覧メニューは、それぞれのメニューです。詳細は省略していますが、これらのメニューはSingleton パターンを採用しています。採用の理由はメニューを切り替える毎の個々のインスタンスを生成/削除の繰り返しを避けるためです。

35

PIM 設計モデル

組込み分野のための UML モデル解説書

メニューの基本的な動作
sd メニューの基本的な動作:ユーザーインターフェース:メインメニュー:プレイリスト一覧メニュー

通知する(キー入力)
中央キーを押下する(ユーザーインターフェース)(a)
中央キーが押下された際の動作(b)

インスタンスを取得する() :プレイリスト一覧メニュー
メニューを切り替える(プレイリスト一覧メニュー)表示する(ユーザーインターフェース)(c)

通知する(キー入力)
中央キーを押下する(ユーザーインターフェース)
(d)

図22

(a) ユーザーインターフェースは、キー入力の通知を受けます。
(b) ユーザーインターフェースは、現在のメニューへ該当するキー入力のメッセージを送信します。現在のメニューは、「現在のメニュー」関連で示されるメニューで、常に 1 個あります。
(c) 現在のメニュー(上図ではメインメニュー)は、キー入力のメッセージを受信し、メッセージに応じた動作を行います。上図ではプレイリスト一覧メニューに切り替えます。プレイリスト一覧メニューはSingleton のため、インスタンスを取得し、ユーザーインターフェースにメニューを切り替えさせます。
この操作で「現在のメニュー」が切り替わります。また、画面を更新するため、プレイリスト一覧メニューに表示させます。
(d) 次のキー入力の通知を受けた場合も、上記と同様になります。ただし、「現在のメニュー」はプレイリ
スト一覧メニューになっていますので、ユーザーインターフェースは、プレイリスト一覧メニューに該当するキー入力のメッセージを送信します。以降は省略します。

エンティティに着目したモデル

36

電子オルゴールイベント
前述の「(iv) 上層から下層へは呼び出しを使用し、下層から上層へはイベントを使用します。」についてです。
分析では「ユーザーインターフェース」クラスがユーザとの入出力を行っていましたが、設計では「キー」クラスが入力を行い、前述の「メニュー」クラスがグラフィックスライブラリを使用して、画面に出力を行います。ここでは、入力側のキーについて検討します。
キーは受動的なデバイスですので、「キー」クラスはキーの読み取りだけを行い、スレッドで動作し、キーを読み出す「キー監視」クラスも導入することにします。まとめると、以下のクラス構成となります。

キー入力に関する構造
class キー入力に関する構造
ユーザーイ ンターフェース
ユーザーイ ンターフェース+

通知する(キーコード) :void
-通知先

1
1

キー監視
+

実行する() :void
1

デバイ ス
-入力元

1
キー

+

キー入力を受け付ける() :キーコード

図23

キー入力の相互作用
sd キー入力の相互作用
:キー監視

loop

:キー

:ユーザーインターフェース

キー入力を受け付ける() :キーコード

通知する(キーコード)

図24

キー監視はスレッドで動作し、キーからキー入力を受け付け、そのキーコードをユーザーインターフェースへ通知する、を繰り返します。

37

PIM 設計モデル

組込み分野のための UML モデル解説書

このように設計すると、キー監視からユーザーインターフェースへの依存となります。ユーザーインターフェースからの呼び出しは多くの場合に発生しますので、キー監視のパッケージと相互依存になることが予想されます。また、この依存方向は他のユーザーインターフェースと曲パッケージと逆ですので、分かりにくい構造になります。
これを解決するために、Java でイベントリスナーモデルと呼ばれている仕組みを導入します。

イベント導入後のキー入力に関する構造
class イ ベント導入後のキー入力に関する構造
ユーザーイ ンターフェース
ユーザーイ ンターフェース
1+

通知する(キーイベント) :void

イ ベント

キーイ ベント+-依頼先生成する(キーコード) :void1-通知先

キーイ ベントソース+++

キーイベントリスナーを削除する(キーイベントリスナー) :void 1
キーイベントリスナーを追加する(キーイベントリスナー) :void
実行する() :void0..* +<<interface>>
キーイ ベントリスナー
通知する(キーイベント) :void

1
デバイ ス
-入力元

1

キー
+

キー入力を受け付ける() :キーコード

図25

キーは、分析モデルと同じです。
ユーザーインターフェースは、キーイベントリスナーを実現するようになりましたが、その他は変わりません。
キー監視は、キーイベントソースと名前が変わりました。キーイベントを扱うように動作は変わりましたが、責務は変わりません。
キーイベントは、内部にどのキーが押下されたのかキーの種別を示すキーコードを持ち、キー入力の出来事を伝えるものです。
キーイベントリスナーは、キーイベントソースがキーイベントを通知するために実装しなければならな
いインターフェースです。このインターフェースにより、依存方向が導入前と逆に方向になり、前述の(iv)を実現しています。

エンティティに着目したモデル

38

電子オルゴール

イベント導入後のキー入力の相互作用
sd イ ベント導入後のキー入力の相互作用:キーイベントソ
ース

loop

:キー

:ユーザーインターフェース

キー入力を受け付ける() :キーコード
生成する(キーコード):キーイベント

通知する(キーイベント)

図26

キーイベントソース(導入前のキー監視)はスレッドで動作し、キーからキー入力を受け付け、キーイベン
トを生成し、そのキーイベントをユーザーインターフェースへ渡す(通知する)、を繰り返します。
なお、メモリリークを起こさないように、ユーザーインターフェースは、もらったキーイベントをきちんと破棄します。

イベントリスナーモデルについては、 参考文献『デザインパターンによる進化的設計』を参照してくだ
さい。

39

PIM 設計モデル

組込み分野のための UML モデル解説書

静的モデル
全体の構造
pkg 00設計パッケージ 図
ユーザーイ ンターフェース
ユーザーイ ンターフェース

メニュー

プレイ リスト編集メニュー

プレイ リスト新規登録メニュー

プレイ リスト曲一覧メニュー

プレイ リスト曲一覧メニュー(曲追加)

曲追加・削除メニュー

曲調編集メニュー

曲調編集メニュー(パラメータ)

曲調新規登録メニュー

設定メニュー(1)

設定メニュー(2)イ ベント

メイ ンメニュー

曲

曲調

デバイ ス

ユーティリティ

図27

曲パッケージ、曲調パッケージ、デバイスパッケージは、分析モデルを詳細化しました。大きな変化はありません。
曲パッケージは、曲やプレイリストなど、曲を連続して再生するという音楽再生装置として主要な部分になります。
曲調パッケージは、本カタログの要求仕様の曲調を実現する部分です。要求仕様により内容が大きく変動する部分です。
デバイスパッケージは、電子オルゴールのデバイスをまとめたものです。
ユーザーインターフェースパッケージは、ユーザとのインターフェースを司る責務は変わりません。メ
ニューを導入し、クラスが非常に増えたため、サブパッケージに分割しました。これは描画が困難なためで、
サブパッケージにあまり論理的な意味はありません。
イベントパッケージとユーティリティは、PIM 設計モデルで導入しました。
イベントパッケージは、下層から上層へ通知を行うイベントを実現するための部分です。
ユーティリティは、スレッドなどを実現する汎用的なライブラリです。
エンティティに着目したモデル

40

電子オルゴール「曲」パッケージのクラス図
class 曲
ユーザーイ ンターフェース
ユーザーイ ンターフェース

0..1

1-「プレイリスト」フォルダ

1

イ ベント

1

イ ベントディスパッチャー

フォルダ-

プレイリストの最大件数 :件数 {readOnly}

+
+
+
+
+
+
+

プレイリストが最大件数未満か() :bool
プレイリストの一覧を取得する() :名前の並び
プレイリストの名前を変更する(プレイリスト, 名前) :void
プレイリストを削除する(プレイリスト) :void
プレイリストを取得する(何番目のプレイリスト) :プレイリスト
プレイリストを登録する(名前) :void
工場出荷状態に戻す() :void
1-通知先シャッフル :bool
リピート :bool

+
+
+
+
+
+
+
+
+
+
+
#
+
+
+
+
+
+
+
+

シャッフル再生か() :bool
シャッフル再生を解除する() :void
シャッフル再生を設定する() :void
リピート再生か() :book
リピート再生を解除する() :void
リピート再生を設定する() :void
完全停止する() :void
完全停止中か() :bool
曲の一覧を取得する() :名前の並び

曲終了イ ベント

0..1

再生目録
-

1

-再生
中の再
生目録

0..*
曲

0..1

曲を削除する(何番目の曲) :void
曲を取得する(何番目の曲) :曲
曲を登録する(曲, 順序) :void-所属先

曲終了を通知する() :void

再生する() :void
再生を停止する() :void1..*
再生中か() :bool
再生中の曲を取得する() :曲
再生中の曲を設定する(何番目の曲) :void
最初の曲を再生中の曲に設定する() :void
発音を強制停止する() :void-再生中 の曲
0..1
+
+
+
+
-構成員 ++++
0..*{ordered} +
+
{bag}
+
+

ファイル名 :名前
再生開始位置 :再生開始位置
再生中 :bool
名前 :名前
完全停止する() :void
完全停止中か() :bool
曲データを取得する() :曲データ
曲終了を通知する() :void
再生する() :void
再生の準備を行う(曲終了の通知先) :void
再生を停止する() :void
再生開始位置を初期化する() :void
再生中か() :bool
削除する() :void
生成する(ファイル名) :void
名前を取得する() :名前
0..*

0..*
-プレイリスト1-全曲目録

プレイ リスト

全曲目録-

曲の最大件数 :件数 {readOnly}
名前 :名前

+
+
+
+
+
+
+
+

曲が最大件数未満か() :bool
曲を削除する(何番目の曲) :void
曲を登録する(曲, 順序) :void
曲終了を通知する() :void
削除する() :void
生成する(名前) :void
名前を取得する() :名前
名前を変更する(名前) :void-

曲の最大件数 :件数 {readOnly}

+
+
+
+
+
+
+

外部メディアから曲を登録する(何番目の曲) :void
外部メディアが使用可能か() :bool
外部メディアの曲の一覧を取得する() :名前の並び曲が最大件数未満か() :bool
曲を削除する(何番目の曲) :void
曲終了を通知する() :void
工場出荷状態に戻す() :void
1

デバイ ス-曲の供給元

1-再生装置

外部メディア<<interface>>
曲データ

1

音源

図28

41

PIM 設計モデル

組込み分野のための UML モデル解説書

曲パッケージは、曲やプレイリストなど、曲を連続して再生するという音楽再生装置として主要な部分になります。PIM 設計モデルでは、分析モデルを詳細化しました。大きな変化はありません。
曲は、電子オルゴールの楽曲そのものです。デバイスパッケージの音源と共同で 1 曲毎の再生を行います。曲は、(対応するファイルからデータを読み出し)音源にデータを供給します。供給のために、分析モデ
ルでは、曲と音源の関連がありましたが、依存関係を一方向にするため、以下のように変更しました。
・曲は曲データインターフェースを実現します。
・曲が再生の準備を行う際に、曲自身を音源に渡し、曲データインターフェースとして保持します。
・保持した曲データインターフェースを利用して、曲から曲データを取得します。
また、曲が終了した際に再生目録に通知を行います。分析モデルでは、曲が再生目録へ直接メッセージを送信していましたが、前述のように曲終了イベントを配信するようにしました。
なお、曲からのデータが必要な際にイベントを送出する方法もできますが、データ供給は、頻度が高く、イベントは手間がかかるため、前述の方法を用いています。
プレイリストは、曲を再生する順番に並べたものです。曲を順番に再生する責務を負います。一般的にプレイリストと呼ばれているものや音楽再生装置ではアルバムと呼ばれているものも該当します。
フォルダは、プレイリストの集まりです。メニューでプレイリストを選択(表示)したり、登録・削除などのプレイリストの管理を行います。本カタログの要求仕様では、「プレイリスト」を選択(表示)するフォルダだけですが、「ジャンル」や「アーティスト」、「アルバム」などプレイリストを分類するフォルダなどが実現できます。また、フォルダが自身を集約するように変更すると、フォルダを階層化する拡張が実現できます。
全曲目録は、電子オルゴールのすべての曲を持ち、(外部メディアからの)局の登録・削除などの曲の管理を行います。また、1 個の曲を選択/再生する責務も持ちます。
再生目録は、プレイリストと全曲目録の上位概念です。曲を集約し管理する責務と曲を順番に再生する責務を持ちます(リピート再生やシャッフル再生も含みます)。

エンティティに着目したモデル

42

電子オルゴール「曲調」パッケージのクラス構造
class 曲調
ユーザーイ ンターフェース

ユーザーイ ンターフェース

1-曲調マネージャー

1

曲調マネージ ャー-

テンポ :テンポ
リヴァーブ種別 :リヴァーブ種別
音色 :音色音量 :音量調律 :調律

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

テンポを取得する() :テンポ
テンポを設定する(テンポ) :void
リヴァーブ種別を取得する() :リヴァーブ種別
リヴァーブ種別を設定する(リヴァーブ種別) :void
音色を取得する() :音色
音色を設定する(音色) :void
音量を取得する() :音量音量を設定する(音量) :void
曲調の一覧を取得する() :名前の並び
曲調を削除する(何番目の曲調) :void
曲調を取得する(何番目の曲調) :void
曲調を生成する() :何番目の曲調
曲調を適用する(何番目の曲調) :void
曲調を登録する(調律, リヴァーブ種別, 音量) :void
工場出荷状態に戻す() :void
調律を取得する() :調律
調律を設定する(調律) :void
発音を強制停止する() :void
1

-曲調

1

0..*

曲調
-

リヴァーブ種別 :リヴァーブ種別
音量 :音量調律 :調律

+
+
+
+
+
+
+
+
+

リヴァーブ種別を取得する() :リヴァーブ種別
リヴァーブ種別を設定する(リヴァーブ種別) :void
音量を取得する() :音量音量を設定する(音量) :void
生成する() :void
調律を取得する() :調律
調律を設定する(調律) :void
適用する() :void
変更する(調律, リヴァーブ種別, 音量) :void
0..*

デバイ ス
-制御対象

1

-制御対象

1

音源

図29

43

PIM 設計モデル

組込み分野のための UML モデル解説書

曲調パッケージは、本カタログの要求仕様の曲調を実現する部分です。要求仕様により内容が大きく変動する部分です。PIM 設計モデルでは、分析モデルを詳細化しました。大きな変化はありません。
曲調は、音量や調律など(曲調)のパラメータ群です。パラメータ値を保持する責務と適用(その値に変更)する責務を負います。
曲調マネージャーは、登録・削除などの曲調の管理を行います。また、テンポや音色の変更も行います。

エンティティに着目したモデル

44

電子オルゴール「イベント」パッケージのクラス構造
class イ ベント
ユーザーイ ンターフェース
ユーザーイ ンターフェース

キーイ ベント

曲終了イ ベント-

キーコード :キーコード+++

キーコードを取得する() :キーコード
削除する() :void
生成する(キーコード) :void++<<interface>>
キーイ ベントリスナー
通知する(キーイベント) :void0..*-通知先キー
イベント+生成する() :void<<interface>>
曲終了イ ベントリスナー
通知する(曲終了イベント) :void-曲終了イベント通知先

0..*

ユーティリティ
エ ンティティ<<interface>>
タスク

曲

1

0..*

1

イ ベントディスパッチャー
+
+
+
+
+
+
+

キーイベントリスナーを削除する(キーイベントリスナー) :void
キーイベントリスナーを追加する(キーイベントリスナー) :void
曲終了イベントリスナーを削除する(曲終了イベントリスナー) :void
曲終了イベントリスナーを追加する(曲終了イベントリスナー) :void
実行する() :void
通知する(キーイベント) :void
通知する(曲終了イベント) :void
-通知先

-通知先
1

1

キーイ ベントソース+

実行する() :void 1
1

デバイ ス
-入力元

1

キー

図30

イベントパッケージは、下層から上層へ通知を行うイベントを実現するための部分です。イベントパッ
ケージは、PIM 設計モデルで導入しました。

45

PIM 設計モデル

組込み分野のための UML モデル解説書

キーイベントは、キー入力の出来事を伝えるものです。内部にどのキーが押下されたのかキーの種別を示すキーコードを持ちます。
キーイベントリスナーインターフェースは、キーイベントを受け取りたい場合に、実装すべきインター
フェースを定義します。このインターフェースを実装したクラスがキーイベントを配信してくれるクラス(本モデルではイベントディスパッチャー)に「キーイベントリスナーを追加する」メッセージを送信すると、キーイベントを配信してくれるクラスがキーイベントを配信してくれます。
キーイベントソースは、キーイベントを発行するモノです。キーを監視して、キー入力を受け付けると、イベントを発行します。
イベントディスパッチャーは、イベント(キーイベントや曲終了イベント)を配信します。前述のイベントの説明(図 25 や図 26)では、イベントディスパッチャーはありませんでしたが、キーイベントソースにキー
イベントリスナーインターフェースを登録する方法もありますが、イベント配信を一箇所にまとめるように、作成しました。
また、イベントディスパッチャーは、後述のタスクインターフェースを実現して独自のスレッドを持ちます。イベントは、イベントの発生源から非同期メッセージでイベントディスパッチャーへ送られ、イベン
トディスパッチャーのスレッドで逐次的に処理されます。
曲終了イベントは、曲が終了したことを伝えるモノです。
曲終了イベントリスナーインターフェースは、曲終了イベントを受け取りたい場合に、実装すべきイン
ターフェースを定義します。このインターフェースを実装したクラスがキーイベントを配信してくれるクラス(本モデルではイベントディスパッチャー)に「曲終了イベントリスナーを追加する」メッセージを送信す
ると、キーイベントを配信してくれるクラスが曲終了イベントを配信してくれます。
曲が曲終了イベントを発行するのに対して、キーはキーイベントを発行しません。キーは受動的なデバ
イスですので、能動的な動きはしないようにして、キーを監視するキーイベントソースを用いるようにしました

エンティティに着目したモデル

46

電子オルゴール「ユーザーインターフェース」サブパッケージのクラス構造
class ユーザーイ ンターフェース
メニュー

ユーザーイ ンターフェース
+
+
+
+
+
+
+
+
+

「プレイリスト」フォルダを取得する() :フォルダ
メニューを切り替える(メニュー) :void
曲調マネージャーを取得する() :曲調マネージャー
再生中の再生目録を取得する() :再生目録
再生中の再生目録を設定する(再生目録) :void
生成する(「プレイリスト」フォルダ, 曲マネージャー, 曲調マネージャー) :void
全曲目録を取得する() :全曲目録
通知する(曲終了イベント) :void
通知する(キーイベント) :void

-現在の
メニュー
0..1

1

<<interface>>
メニュー

0..1
1
1

1
イ ベント

キーイ ベントエ ンティティ-「プレイリスト」
フォルダ

曲終了イ ベント

-再生中の
再生目録

1

フォルダ

<<interface>>
キーイ ベントリスナー<<interface>>
曲終了イ ベントリスナー

0..1

再生目録

-全曲目録

1

全曲目録

曲調
-曲調マネージャー

1

曲調マネージャー

図31

ユーザーインターフェースパッケージは、ユーザとのインターフェースを司ります。前述の通り、ユー
ザーインターフェースのサブパッケージには、あまり論理的な意味はありません。
ユーザーインターフェースサブパッケージは、ユーザーインターフェースクラスを格納するためのものです。
ユーザーインターフェースは、ユーザとのインターフェースを司ります。ユーザからの指示を曲パッケージや曲調パッケージへ伝え、曲パッケージや曲調パッケージからのレスポンスをユーザへ伝えます。
ユーザーインターフェースは、State パターンの Context クラスに相当します。状態を保持するように後述のメニュークラスを保持し、外部からのメッセージをメニュークラスに委譲し、実際の動作を行います。
また、「全曲目録を取得する」のような、メニュークラスから曲パッケージや曲調パッケージのクラス
へメッセージを送信するための補助的な操作を持ちます。

47

PIM 設計モデル

組込み分野のための UML モデル解説書「メニュー」サブパッケージのクラス構造
class メニュー
ユーザーイ ンターフェース-現在のメニュー +++
1 +++ユーザーイ ンターフェース
0..1<<interface>>
メニュー
右キーを押下する(ユーザーインターフェース) :void
下キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
上キーを押下する(ユーザーインターフェース) :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void

リストメニュー

仮想キーボードメニュー-

カーソル位置 :int
スクロールしている項目数 :int
メニュー項目 :名前の並び
メニュー項目数 :int

+
+
+
+
+
+
+

カーソル位置を取得する() :カーソル位置
カーソル位置を設定する(カーソル位置) :void
メニューを設定する(名前の並び) :void
下キーを押下する(ユーザーインターフェース) :void
上キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void
表示する() :void-

文字列 :文字列

+
+
+
#
+
+
#
+

右キーを押下する(ユーザーインターフェース) :void
下キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void

実行する() :void

上キーを押下する(ユーザーインターフェース) :void
中央キーを押下する(ユーザーインターフェース) :void

中止する() :void

表示する() :void
表示する(ユーザーインターフェース) :void

エ ラー表示メニュー-

エラーメッセージ :エラーメッセージ

#
+
+
+
+
+
+

エラーメッセージを設定する(エラーメッセージ) :void

右キーを押下する(ユーザーインターフェース) :void
下キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
上キーを押下する(ユーザーインターフェース) :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void

図32

メニューサブパッケージは、メニューインターフェースと、メニュークラスで共通となるような 3 個のスーパークラスを格納します。
メニューインターフェースは、State パターンの State クラスに相当します。各メニュー(状態)が、備えるべきインターフェースを規定します。
リストメニューは、メニューで多く用いているリストメニューの共通の振る舞い、メニューの表示や上下キーによるカーソルの移動を提供します。
仮想キーボードメニューは、仮想キーボードを実現します。
エラー表示メニューは、エラー発生時にエラーを表示する画面です。

エンティティに着目したモデル

48

電子オルゴール「メインメニュー」サブパッケージのクラス構造
class メイ ンメニュー
ユーザーイ ンターフェース-現在のメニューユーザーイ ンターフェース
0..1<<interface>>
メニュー

1

リストメニュー

プレイ リスト再生メニュー
メイ ンメニュー
+
+
+
+
+

+
+
+
+
+
+
+

インスタンスを取得する() :メインメニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する()
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void

インスタンスを取得する() :プレイリスト再生メニュー
右キーを押下する(ユーザーインターフェース) :void
下キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
上キーを押下する(ユーザーインターフェース) :void
生成する()
中央キーを押下する(ユーザーインターフェース) :void
表示する() :void
表示する(ユーザーインターフェース) :void

編集メニュー+++++

インスタンスを取得する() :編集メニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する()
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void

曲再生メニュー
+
+
+
+
+
+
+

曲一覧メニュー
+++++インスタンスを取得する() :曲一覧メニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する()
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void

インスタンスを取得する() :曲再生メニュー
右キーを押下する(ユーザーインターフェース) :void
下キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
上キーを押下する(ユーザーインターフェース) :void
生成する()
中央キーを押下する(ユーザーインターフェース) :void
表示する() :void
表示する(ユーザーインターフェース) :void

プレイ リスト一覧メニュー
+
+
+
+
+

インスタンスを取得する() :プレイリスト一覧メニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する()
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void
曲調一覧メニュー+++++

インスタンスを取得する() :曲調一覧メニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する()
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void
曲調

エ ンティティ
曲調マネージ ャー

フォルダ

再生目録

図33

49

PIM 設計モデル

組込み分野のための UML モデル解説書

メインメニューサブパッケージは、メインメニューとメインメニューに関連したメニューのクラスを格納します。
各クラスは同じ名前のメニューを実現しています。State パターンの ConcreteState クラスに相当します。

ここで挙げた以外のサブパッケージ(ユーザーインターフェースパッケージのユーザーインターフェース
サブパッケージ、メニューサブパッケージ以外のサブパッケージ)は、サブパッケージの名前と同じメニューと関連したメニューのクラスを格納します。
各クラスは同じ名前のメニューを実現しています。State パターンの ConcreteState クラスに相当します。
ここで挙げた以外のサブパッケージおよびクラスは、「付録：設計モデルの静的モデル」を参照してく
ださい。

エンティティに着目したモデル

50

電子オルゴール「デバイス」パッケージのクラス構造
class デバイ ス
イ ベント

エ ンティティ

曲調

再生目録

キーイ ベントソース

全曲目録

曲

ユーティリティ<<interface>>タスク

曲調マネージ ャー

1

1

0..*

1

1
-曲調

0..*

曲調

-曲の供給元1

0..*

外部メディア+++曲の一覧を取得する() :名前の並び曲をコピーする(番目) :ファイル名
使用可能か() :bool

+

-入力元

<<interface>>
曲データ
曲データを取得する() :曲データ
-曲データ
の供給元

1

0..1

-制御
1 対象

-制御
1 対象

1

音源
-

キー
+

-再生
装置

キー入力を受け付ける() :キーコード

0..1 +
+
+
+
+
+
+
+
+
+

<<enumeration>>
キーコード
右キー
左キー
上キー
下キー
中央キー

テンポ :テンポ
リヴァーブ種別 :リヴァーブ種別
音量 :音量調律 :調律
テンポを変更する(テンポ) :void
リヴァーブ種別を設定する(リヴァーブ種別) :void
音を出力する() :void
音色を変更する(音色) :void
音量を設定する(音量) :void
再生する() :void
再生の準備を行う(曲) :void
再生を停止する() :void
実行する() :void
調律を設定する(調律) :void

図34

デバイスパッケージは、電子オルゴールのデバイスをまとめたものです。PIM 設計モデルでは、詳細化に伴いクラスが増えています。
音源は、音を出す責務を持ちます。曲パッケージの曲と共同で 1 曲毎の再生を行います。曲からデータを供給してもらい、電子オルゴールの楽曲の音を出します。
曲データインターフェースは、曲データを取得するために実装すべきインターフェースを定義します。
このインターフェースを実装したクラス(本モデルでは曲)が、「再生の準備を行う」メッセージを音源に送信すると、音源が曲データインターフェースを保持し、データが必要な場合、音源が「曲データを取得する」メッセージを送信し、データを取得します。
外部メディアは、電子オルゴールに楽曲を入れるために用いるメディアです。実際には、SD カード(など)になります。

51

PIM 設計モデル

組込み分野のための UML モデル解説書「ユーティリティ」パッケージのクラス図
class ユーティリティ
別スレッドやタイ
マーで実行したい場合、このインターフェースを実現するクラスを作成します。「実行する」操
作を再定義し、所望の動作を記述します。

<<interface>>
タスク+ 実行する() :void

図35

ユーティリティは、スレッドなどを実現する汎用的なライブラリです。ユーティリティは、PIM 設計モデルで導入しました。
タスクインターフェースは、別スレッドやタイマーで実行するために実装すべきインターフェースを定義します。別スレッドやタイマーで実行したい場合、このインターフェースを実現するクラスを作成します。
「実行する」操作を再定義し、所望の動作を記述します。詳細は、PSM 設計モデルで規定する内容になります。

電子オルゴールの初期状態のオブジェクトを示します。この時点では、曲やプレイリスト、曲調が登録されていないため、それらのオブジェクトが存在しません。

初期状態のオブジェクト
object 10初期状態のオブジ ェクト
ユーザーイ ンターフェース:ユーザーイ ンターフェース:メイ ンメニューエ ンティティイ ベント:イ ベントディス
パッチャー

曲調

「プレイ リスト」フ
ォルダ :フォルダ:全曲目録:曲調マネージ ャー:キーイ ベントソ
ース

デバイ ス
:キー

:音源

:外部メディア

図36

エンティティに着目したモデル

52

電子オルゴール

動的モデル
PIM 設計モデルのクラス図を踏まえ、再度動的モデルを作成します。なお、PIM 設計モデルではメニューを導入したので、ユースケース記述と 1 対 1 に対応しないところがあります。例えば、「UC07：プレイ
リストの一覧を見る」は、「UC01：再生プレイリストを選択する」に含まれます。
PIM 設計モデルの動的モデルは、シーケンス図を使用します。

曲やプレイリストの状態遷移は、分析モデルと同じですので、分析モデルを参照してください。

リストメニューの基本的な動作
個別のユースケースの前に、次ページのイベントシステムとリストメニューの動作を説明します。

53

PIM 設計モデル

組込み分野のための UML モデル解説書

リストメニューの基本的な相互作用
sd 20リストメニューの基本的な相互作用
キー入力の共通処理:キーイベントソース:キー:イベントディスパッチャー:ユーザーインターフェース

現在のメニュ
ー :リストメニュー

別のメニュー :リストメニュー

キー入力を受け付ける() :キーコード
生成する(押されたキー):キーイ
ベント
通知する(キーイベント)(b)
通知する(キーイベント)
alt

上キーを押下する(ユーザーインターフェース)

[上キー]

(a)

カーソル位置とスクロール
している項目数の更新
(d1)

[下キー]

表示する()

下キーを押下する(ユーザーインターフェース)

上キーと同様[中央キー]

中央キーを押下する(ユーザーインターフェース)
カーソル位置を取得する() :カーソル位置

(c)

(d2)

カーソル位置から次のメニューを決める
インスタンスを取得する()

メニューを切り替える(次のメニュー)表示する(ユーザーインターフェース)[右キー]

右キーを押下する(ユーザーインターフェース)

中央キーと同様[左キー]

左キーを押下する(ユーザーインターフェース)(d3)

左キー押下した場合のメ
ニューインスタンスを取得する()

メニューを切り替える(左キー押下した場合のメニュー)(e)

表示する(ユーザーインターフェース)

削除する()

図37

エンティティに着目したモデル

54

電子オルゴール(a) キーイベントソースは、キーを監視していて、キー入力を受け付けると、イベントを生成し、発行します(イベントディスパッチャーへ生成したイベントを通知します)。
(b) 通知を受けると、イベントディスパッチャーは、キーイベントを配信します。予めユーザーインターフ
ェースは、キーイベントを受け取れるように(「キーイベントリスナーを追加する」メッセージを送信)してあるので、イベントディスパッチャーは、ユーザーインターフェースへキーイベントを通知します。
(c) キーイベントを受けると、ユーザーインターフェースは、キーイベントのキーコード(キーの種別)を判別して、それぞれのキーを押下するメッセージを現在のメニューへ送信します。キーが押下された際の動作は、ユーザーインターフェースではなく、それぞれのメニューが行います。
(d1) 上キー(もしくは下キー)を押下した場合、リストメニューは、カーソル位置とスクロールしている項
目数の更新し、表示(更新)します。
(d2) 中央キー(もしくは右キー)を押下した場合、カーソル位置から次のメニューを決定し、ユーザーイン
ターフェースへメニューを切り替えさせます。メニューの切り替える際には、切り替えるメニューを引数としますが、メニューはシングルトンなので、その都度インスタンスを取得します。ユーザーインターフェースは、現在のメニューを更新し、切り替えるメニューに表示させます。
(d3) 左キーを押下した場合は、遷移するメニューが決まっていることを除いて、中央キー(もしくは右キー)と同じです。
(e) ユーザーインターフェースは、配信されたイベントを削除します。
(a)から(c)と(e)は、キー入力における共通処理なので、以降の図では両略します。

55

PIM 設計モデル

組込み分野のための UML モデル解説書

ユースケース<UC01：再生プレイリストを選択する>
メインメニュー
メニュー
プレイリスト＿＿＿＿
曲
曲調
編集
設定

プレイリスト一覧(ii) プレイ
リストを選択(i) ↑ ↓でカーソル移動

プレイリストお気に入り
バッハ＿＿＿＿＿＿＿
フォスター

プレイリスト再生(iv) バッハ
を選択

バッハ

▶

Ｇ線上のアリア
音量：10(iii) ↑ ↓でカーソル移動

ユースケース<UC01：再生プレイリストを選択する>の相互作用を示します。上記のように、(i)メイン
メニューでプレイリストへカーソルを移動する、(ii)プレイリストを選択し、プレイリスト一覧メニューを表示させる、(iii)プレイリスト一覧メニューで再生するプレイリストへカーソルを移動する、(iv)バッハを選択し、プレイリスト再生メニューを表示させ、プレイリストを再生する、を行う場合です。

ユースケース<UC01：再生プレイリストを選択する>の相互作用
sd UC01 再生プレイ リストを選択する
ref(i)メインメニューでプレイリス
トへカーソルを移動する

20リストメニューの基本的な相互作用refUC01(ii)メイ ンメニューでプレイ リストを選択し、プレイ リスト一覧メニューを表示させる

ref(iii)プレイリスト一覧メニュー
で再生するプレイリストへ
カーソルを移動する

20リストメニューの基本的な相互作用refUC01(iv)プレイ リスト一覧からプレイ リストを選択し、プレイ リスト再生メニューを表示させ、プレイ リストを再生する

図38

以下に詳細な相互作用を示します。

エンティティに着目したモデル

56

電子オルゴール「UC01(ii)メインメニューでプレイリストを選択し、プレイリスト一覧メニューを表示させる」の相互作用sd UC01(ii)メイ ンメニューでプレイ リストを選択し、プレイ リスト一覧メニューを表示させる:ユーザーインターフェース:メインメニュー :プレイリスト一覧メニュー「プレイリスト」
フォルダ :フォルダ

通知する(キーイベント)
中央キーを押下する(ユーザーインターフェース)(a)

カーソル位置を取得する() :カーソル位置(b)カーソル位置から次のメニューを決める。
ここでは、プレイリスト一覧メニュー。
インスタンスを取得する() :プレイリスト一覧メニュー(c)

メニューを切り替える(プレイリスト一覧メニュー)表示する(ユーザーインターフェース)「プレイリスト」フォルダを取得する() :フォルダ
プレイリストの一覧を取得する() :名前の並び(d)

メニューを設定する(名前の並び)表示する()

図39(a) ここ以前は、「リストメニューの基本的な相互作用」の「キー入力の共通処理」を参照してください。
(b) カーソル位置から次のメニューを決めます。ここでは、プレイリスト一覧メニューとなります。
(c) メインメニューは、ユーザーインターフェースへメニューを切り替えさせます。
(d) プレイリスト一覧メニューは、「プレイリスト」フォルダを取得し、「プレイリスト」フォルダからプ
レイリストの一覧を取得し、メニューを表示します。

57

PIM 設計モデル

組込み分野のための UML モデル解説書「UC01(iv)プレイリスト一覧からプレイリストを選択し、プレイリスト再生メニューを表示させ、プレイリストを再生する」の相互作用
sd UC01(iv)プレイ リスト一覧からプレイ リストを選択し、プレイ リスト再生メニューを表示させ、プレイ リストを再生する:ユーザーイン :プレイリスト一 「プレイリスト」 :プレイリスト再 お気に入り :プ
ターフェース
覧メニュー
フォルダ :フォ
生メニュー
レイリスト
ルダ

ポロネーズ :曲:音源通知する(キーイベント)
中央キーを押下する(ユーザーインターフェース)
カーソル位置を取得する() :カーソル位置

(b)

(a)
「プレイリスト」フォルダを取得する() :フォルダ

プレイリストを取得する(カーソル位置) :プレイリスト
再生中の再生目録を取得する() :再生目録(d)「選択したプレイリスト」と「再生中の再生目録」の比較などを行い、代替フローをチェックし、代替フローの場合は代替フローを実行する(c)

最初の曲を再生中の曲に設定する()
再生中の曲を設定する(最初の曲)再生の準備を行う(お気に入り)(e)

再生開始位置を初期化する()(f)

再生の準備を行う(ポロネーズ)

再生中の再生目録を設定する(お気に入り)(g)再生する()
インスタンスを取得する() :プレイリスト再生メニュー

ref

メニューを切り替える(プレイリスト再生メニュー)

UC01:プレイ リスト内の曲を順番に再生する表示する(ユーザーインターフェース)
ref

(h)

UC01:プレイ リスト再生メニューを表示する

図40(a) ここ以前は、「リストメニューの基本的な相互作用」の「キー入力の共通処理」を参照してください。
(b) 「中央キーを押下する」メッセージを受け取ると、プレイリスト一覧メニューは、カーソル位置から選択するプレイリストを決定します。
(c) 選択するプレイリストと再生中の再生目録を取得します。
(d) 「選択するプレイリスト」と「再生中の再生目録」の比較などを行い、代替フローをチェックして、代替フローの場合は代替フローを実行します。ここでは、メインフローの場合なので、何もしません。
(e) プレイリスト一覧メニューは、プレイリストに最初の曲を再生中の曲に設定させ、ユーザーインターフ
ェースに再生中の再生目録を設定させ、プレイリストに再生させ、ユーザーインターフェースにプレイ
リスト再生メニューに切り替えさせます。
エンティティに着目したモデル

58

電子オルゴール(f) プレイリストは、最初の曲を再生中の曲に設定し、曲に再生の準備を行わせます。すると、曲は再生開始位置を初期化し、音源に再生の準備を行わせます。この時に曲は、音源が曲データを取得できるように、自身を引数として渡しています。
(g) この部分は、「「UC01:プレイリスト内の曲を順番に再生する」の相互作用」を参照してください。
この内部では、別スレッドで非同期に動作するため、次の(h)と同時に動作します。
(h) この部分は、「「UC01:プレイリスト再生メニューを表示する」の相互作用」を参照してください。

「UC01:プレイリスト内の曲を順番に再生する」の相互作用
sd UC01:プレイ リスト内の曲を順番に再生する:イベントディスパッチャー:ユーザーインターフェース:プレイリスト再 お気に入り :プ
生メニュー
レイリスト

:曲

:音源

再生する()
再生する()
loop[すべての曲データ](a)

曲データを取得する() :曲データ
音を出力する()

曲終了を通知する()(b)

生成する()

通知する(曲終了イベント):曲終了イベント

通知する(曲終了イベント)
曲終了を通知する()
再生中の曲を設定する(次の曲)(c)

再生の準備を行う(再生目録)(d)

再生開始位置を初期化する()(e)
再生の準備を行う(曲)再生する()
表示する(ユーザーインターフェース)

refUC01:プレイ リスト再生メニューを表示する

図41(a) プレイリストは曲に再生を開始させ、曲は音源に再生を開始させます。音源は曲から曲データを取得し、音を出力します。これを繰り返します。
(b) 曲の再生が終了すると、音源は、曲に曲終了を通知します。曲は、曲終了イベントを生成し、発行します(イベントディスパッチャーへ生成したイベントを通知します)。

59

PIM 設計モデル

組込み分野のための UML モデル解説書(c) 通知を受けると、イベントディスパッチャーは、曲終了イベントを配信します。予めユーザーインター
フェースは、曲終了イベントを受け取れるように(「曲終了イベントリスナーを追加する」メッセージを送信)してあるので、イベントディスパッチャーは、ユーザーインターフェースへ曲終了イベントを通知します。
(d) 曲終了イベントを受けると、ユーザーインターフェースは、再生中の再生目録(この場合はプレイリス
ト)へ曲終了を通知し、メニューを表示(更新)します。
(e) 曲終了の通知を受けると、プレイリストは、次の曲を再生中の曲に設定し、曲に再生の準備を行わせ、再生させます。ここから先は(a)と同じなので、省略します。

「UC01:プレイリスト再生メニューを表示する」の相互作用
sd UC01:プレイ リスト再生メニューを表示する:ユーザーインターフェース:プレイリスト再 お気に入り :プ
生メニュー
レイリスト

:曲

:曲調マネージャー

表示する(ユーザーインターフェース)
再生中の再生目録を取得する() :再生目録:お気に入り
名前を取得する() :名前(a)
再生中の曲を取得する() :曲
名前を取得する() :名前
再生中か() :bool
曲調マネージャーを取得する() :曲調マネージャー
音量を取得する() :音量表示する()

図42(a) 「表示する」メッセージを受け取ると、プレイリスト再生メニューは、ユーザーインターフェースから再生中の再生目録を取得し、その再生目録から曲を取得し、ユーザーインターフェースから曲調マネージャーを取得し、それらから表示に必要な情報※を取得し、表示します。
※プレイリストから名前、曲から名前、再生目録から再生中かどうか、曲調マネージャーから音量

エンティティに着目したモデル

60

電子オルゴールユースケース<UC02：プレイリストを再生する>
プレイリスト再生
バッハ||

Ｇ線上のアリア
音量：10→で再生開始ユースケース<UC02：プレイリストを再生する>の相互作用を示します。これは、上記のプレイリスト
再生メニューで、プレイリスト再生停止中に→キーで再生を開始する場合です。なお、ユースケース<UC01：再生プレイリストを選択する>では、選択後にプレイリストの再生を行うため、後半部分が本相互作用とほぼ同じです。

ユースケース<UC02：プレイリストを再生する>の相互作用
sd UC02 プレイ リストを再生する:ユーザーインターフェース:プレイリスト再生メニュー

お気に入り :プレイリスト

ポロネーズ :曲:音源通知する(キーイベント)
右キーを押下する(ユーザーインターフェース)(a)(b)
再生中の再生目録を取得する() :再生目録:お気に入り(c)

再生する()
メニューを切り替える(自分自身)(d)表示する(ユーザー
インターフェース)refUC01:プレイ リスト内の曲を順番に再生する

refUC01:プレイ リスト再生メニューを表示する

図43(a) ここ以前は、「リストメニューの基本的な相互作用」の「キー入力の共通処理」を参照してください。
(b) 「右キーを押下する」メッセージを受け取ると、プレイリスト再生メニューは、ユーザーインターフェースから再生中の再生目録を取得し、その再生目録を再生させ、ユーザーインターフェースにプレイリ
スト再生メニュー(自分自身)にメニューを切り替えさせます。メニューの切り替えは新しい状態でメニューを再表示させるためです。
(c) この部分は、「「UC01:プレイリスト内の曲を順番に再生する」の相互作用」を参照してください。この内部では、別スレッドで非同期に動作するため、次の(d)と同時に動作します。
(d) この部分は、「「UC01:プレイリスト再生メニューを表示する」の相互作用」を参照してください。

61

PIM 設計モデル

組込み分野のための UML モデル解説書

ユースケース<UC03:プレイリストの再生を停止する>
プレイリスト再生
バッハ||

Ｇ線上のアリア
音量：10

中央で再生停止

ユースケース<UC03：プレイリストの再生を停止する>の相互作用を示します。これは、上記のプレイ
リスト再生メニューで、プレイリスト再生中に中央キーで再生を停止する場合です。

ユースケース<UC03：プレイリストの再生を停止する>の相互作用
sd UC03 プレイ リストの再生を停止する:ユーザーインターフェース:プレイリスト再生メニュー

お気に入り :プレイリスト

ポロネーズ :曲:音源通知する(キーイベント)
中央キーを押下する(ユーザーインターフェース)(a)

再生中の再生目録を取得する() :再生目録(b):お気に入り再生を停止する()
メニューを切り替える(自分自身)

再生を停止する()表示する(ユーザーインターフェース)(d)

再生を停止する()(c)

refUC01:プレイ リスト再生メニューを表示する

図44(a) ここ以前は、「リストメニューの基本的な相互作用」の「キー入力の共通処理」を参照してください。
(b) 「中央キーを押下する」メッセージを受け取ると、プレイリスト再生メニューは、ユーザーインターフ
ェースから再生中の再生目録を取得し、その再生目録の再生を停止させ、ユーザーインターフェースにプレイリスト再生メニュー(自分自身)にメニューを切り替えさせます。メニューの切り替えは新しい状態
でメニューを再表示させるためです。
(c) 「再生を停止する」メッセージを受け取ると、プレイリストは再生中の曲に「再生を停止する」メッセージを送信し、曲は音源に「再生を停止する」メッセージを送信します。
(d) この部分は、「「UC01:プレイリスト再生メニューを表示する」の相互作用」を参照してください。

エンティティに着目したモデル

62

電子オルゴール

参考文献
 『ソフトウェアパターン―パターン指向の実践ソフトウェア開発』鷲崎 弘宜 [ほか] 著、近代科学社、2007
 『オブジェクト指向における再利用のためのデザインパターン』Erich Gamma [ほか] 著、ソフトバン
クパブリッシング、1999
 平鍋 健児、『デザインパターンによる進化的設計』、
http://objectclub.jp/technicaldoc/pattern/eDWP
 『月刊 たくさんのふしぎ 2009 年 07 月号』、名村義人・文/風間憲二・写真、福音館書店、2009
 『オルゴール:聴いてみたいアンティークの音色(京都書院アーツコレクション:Music(26))』、田中 健、
京都書院、1998

63

組込み分野のための UML モデル解説書

付録：ユースケース記述<UC04：再生曲を選択する>■概要
再生する曲を選択し、再生する。

■アクター
ユーザ

■事前条件
・システムに 1 曲以上の再生可能曲が格納されていること。

■事後条件
・再生曲が、指定された曲になっていること。
・再生開始位置が指定されていること。

■メインフロー
1. アクターは、システムに、再生曲を指定する。
2. システムは、指定された曲を再生曲とする。
3. システムは、再生開始位置を初期化する。
4. システムは、再生曲を再生する。
5. UC を終了する。

■代替フロー
1a. 指定曲と同一の曲を再生中の場合
1a1. UC を終了する。
1b. 指定曲と別の曲を再生中の場合
1b1. システムは、現在再生している曲の再生を停止する。
1b2. メインフロー2.に遷移する。
1c. プレイリストを再生中の場合
1c1. システムは、現在再生しているプレイリストの再生を停止する。
1c2. メインフロー2.に遷移する。

■例外フローなし

付録：ユースケース記述

64

電子オルゴール<UC05：曲を再生する>■概要
選択された曲を再生する。

■アクター
ユーザ

■事前条件
・再生曲が指定されていること。
・曲再生停止中であること。

■事後条件
・指定された曲が再生開始されること。
・曲再生中であること。

■メインフロー
1. アクターは、システムに再生曲の再生を指示する。
2. システムは、再生曲の再生開始位置より、再生を開始する。
3. UC を終了する。

■代替フローなし■例外フローなし

65

組込み分野のための UML モデル解説書<UC06：曲の再生を停止する>■概要
再生中の曲の再生を停止する。

■アクター
ユーザ

■事前条件
・指定された曲を再生中であること。

■事後条件
・指定された曲が停止中であること。

■メインフロー
1. アクターは、システムに、再生停止を指示する。
2. システムは、再生曲を再生停止する。
3. システムは、再生開始位置を保存する。
4. UC を終了する。

■代替フローなし■例外フローなし

付録：ユースケース記述

66

電子オルゴール<UC07：プレイリストの一覧を見る>■概要
ユーザが電子オルゴールのプレイリストの一覧を見る。

■アクター
ユーザ

■事前条件
なし

■事後条件
・アクターがシステムのプレイリストの一覧を見ている。

■メインフロー
1. アクターは、システムに、プレイリストの一覧表示を指示する。
2. システムは、アクターへ、プレイリストの一覧を提示する。
3. UC を終了する。

■代替フローなし■例外フローなし■備考・システムにプレイリストが登録されていない場合、プレイリストが空で表示されるだけで、特別なメッセージは出さない。

67

組込み分野のための UML モデル解説書<UC08：プレイリストを登録する>■概要
ユーザが電子オルゴールにプレイリストを登録する。

■アクター
ユーザ

■事前条件
なし

■事後条件
・システムにアクターが指定したプレイリストが登録されている。

■メインフロー
1. アクターは、システムに、プレイリストの登録を指示する。
2. アクターは、システムに、登録するプレイリストの名前を指示する。
3. システムは、指示されたプレイリストを登録する。
4. UC を終了する。

■代替フローなし■例外フロー
2a. 登録できる最大件数のプレイリストが登録されている場合：
2a1. システムは、アクターへ、登録できる最大件数のプレイリストが登録されているので、これ以上登録できない旨を通知する。
2a2. UC を終了する。
3a. 指示された名前のプレイリストが登録されている場合：
3a1. システムは、アクターへ、指示された名前のプレイリストが登録されているので、登録できない旨を通知する。
3a2. UC を終了する。

■備考
・同じ名前のプレイリストは複数登録できない。

付録：ユースケース記述

68

電子オルゴール<UC09：プレイリストを削除する>■概要
ユーザが電子オルゴールのプレイリストを削除する。

■アクター
ユーザ

■事前条件
・システムに 1 件以上のプレイリストが登録されている。

■事後条件
・アクターが指定したプレイリストがシステムから削除されている。

■メインフロー
1. アクターは、システムに、プレイリストの削除を指示する。
2. アクターは、システムに、削除するプレイリストを指示する。
3. システムは、指示されたプレイリストを削除する。
4. UC を終了する。

■代替フローなし■例外フロー
3a. 指示されたプレイリストが登録されていない場合：
3a1. システムは、アクターへ、指示されたプレイリストが登録されていないので、削除できない旨を通知する。
3a2. UC を終了する。
3b. 指示されたプレイリストが再生中の場合：
3b1. システムは、アクターへ、指示されたプレイリストが再生中なので、削除できない旨を通知する。
3b2. UC を終了する。

69

組込み分野のための UML モデル解説書<UC10：プレイリストの名前を変更する>■概要
ユーザが電子オルゴールのプレイリストの名前を変更する。

■アクター
ユーザ

■事前条件
・システムに 1 件以上のプレイリストが登録されている。

■事後条件
・アクターが指定したプレイリストの名前が変更されている。

■メインフロー
1. アクターは、システムに、プレイリストの名前を変更することを指示する。
2. アクターは、システムに、名前を変更するプレイリストと新しい名前を指示する。
3. システムは、指示されたプレイリストの名前を新しい名前に変更する。
4. UC を終了する。

■代替フローなし■例外フロー
3a. 指示されたプレイリストが登録されていない場合：
3a1. システムは、アクターへ、指示されたプレイリストが登録されていないので、名前を変更できない旨を通知する。
3a2. UC を終了する。
3b. 新しい名前のプレイリストが存在する場合：
3b1. システムは、アクターへ、指示された名前のプレイリストが登録されているので、名前を変更できない旨を通知する。
3b2. UC を終了する。
3c. 指示されたプレイリストが再生中の場合：
3c1. システムは、アクターへ、指示されたプレイリストが再生中なので、名前を変更できない旨を通知する。
3c2. UC を終了する。

付録：ユースケース記述

70

電子オルゴール<UC11：プレイリストの曲の一覧を見る>■概要
ユーザが電子オルゴールのプレイリストの曲の一覧を見る。

■アクター
ユーザ

■事前条件
・システムに 1 件以上のプレイリストが登録されている。

■事後条件
・アクターが指定したプレイリストの曲の一覧を見ている。

■メインフロー
1. アクターは、システムに、プレイリストの曲の一覧表示を指示する。
2. アクターは、システムに、曲の一覧を見るプレイリストを指示する。
3. システムは、指示されたプレイリストの曲の一覧を提示する。
4. UC を終了する。

■代替フローなし■例外フロー
3a. 指示されたプレイリストが登録されていない場合：
3a1. システムは、アクターへ、指示されたプレイリストが登録されていないので、曲の一覧を提示できない旨を通知する。
3a2. UC を終了する。

■備考
・指示されたプレイリストに曲が登録されていない場合、曲が空で表示されるだけで、特別なメッセー
ジは出さない。

71

組込み分野のための UML モデル解説書<UC13：プレイリストから曲を削除する>■概要
ユーザが電子オルゴールのプレイリストから曲を削除する。

■アクター
ユーザ

■事前条件
・システムに 1 曲以上の曲を含む 1 件以上のプレイリストが登録されている。

■事後条件
・プレイリストからアクターが指定した曲が削除されている■メインフロー
1. アクターは、システムに、プレイリストから曲を削除することを指示する
2. アクターは、システムに、プレイリスト、削除する曲を指示する。
3. システムは、指示通りにプレイリストから曲を削除する。
4. UC を終了する。

■代替フローなし■例外フロー
3a. 指示されたプレイリストが登録されていない場合：
3a1. システムは、アクターへ、指示されたプレイリストが登録されていないので、曲を削除できない旨を通知する。
3a2. UC を終了する。
3b. 指示された曲が登録されていない場合：
3b1. システムは、アクターへ、指示された曲が登録されていないので、曲を削除できない旨を通知する。
3b2. UC を終了する。
3c. 指示されたプレイリストが再生中の場合：
3c1. システムは、アクターへ、指示されたプレイリストが再生中なので、曲を削除できない旨を通知する。
3c2. UC を終了する。

付録：ユースケース記述

72

電子オルゴール<UC14：曲の一覧を見る>■概要
ユーザが電子オルゴールの曲の一覧を見る。

■アクター
ユーザ

■事前条件
なし

■事後条件
・アクターが電子オルゴールの曲の一覧を見ている。

■メインフロー
1. アクターは、システムに、曲の一覧表示を指示する。
2. システムは、アクターへ、曲の一覧を提示する。
3. UC を終了する。

■代替フローなし■例外フローなし■備考・システムに曲が登録されていない場合、曲が空で表示されるだけで、特別なメッセージは出さない。

73

組込み分野のための UML モデル解説書<UC15：SD カードの曲の一覧を見る>■概要
ユーザが SD カードの曲の一覧を見る。

■アクター
ユーザ

■事前条件
なし

■事後条件
・アクターが SD カードの曲の一覧を見ている。

■メインフロー
1. アクターは、システムに、SD カードを入れる。
2. アクターは、システムに、SD カードの曲の一覧表示を指示する。
3. システムは、アクターへ、SD カードの曲の一覧を提示する。
4. UC を終了する。

■代替フローなし■例外フロー
1a. アクターがシステムに SD カードを入れない場合：
1a1. アクターは、システムに、SD カードから曲を追加することを指示する。
1a2. システムは、アクターへ、SD カードが入っていないので、曲の一覧を見られない旨を通知する。
1b3. UC を終了する。

■備考
・SD カードに曲が登録されていない場合、曲が空で表示されるだけで、特別なメッセージは出さない。

付録：ユースケース記述

74

電子オルゴール<UC16：SD カードから曲を登録する>■概要
ユーザが SD カードから電子オルゴールに曲を登録する。

■アクター
ユーザ

■事前条件
なし

■事後条件
・システムにアクターが指定した曲が登録されている。

■メインフロー
1. アクターは、システムに、SD カードを入れる。
2. アクターは、システムに、SD カードからシステムに曲を登録することを指示する。
3. アクターは、システムに、登録する曲(SD カードにあるファイル)を指示する。
4. システムは、指示された曲をシステムに登録する。
5. UC を終了する。

■代替フローなし■例外フロー
1a. アクターがシステムに SD カードを入れない場合：
1a1. アクターは、システムに、SD カードから曲を追加することを指示する。
1a2. システムは、アクターへ、SD カードが入っていないので、曲を登録できない旨を通知する。
1b3. UC を終了する。
3a. システムに登録できる最大件数の曲が登録されている場合：
3a1. システムは、アクターへ、システムに登録できる最大件数の曲が登録されているので、曲を登録できない旨を通知する。
3a2. UC を終了する。
4a. 指示された曲が SD カードに保存されていない場合：
4a1. システムは、アクターへ、SD カードに指示された曲が保存されていないので、曲を登録できない旨を通知する。
4a2. UC を終了する。

75

組込み分野のための UML モデル解説書■備考
・同じファイル名の曲を複数登録できる。
・同じ名前の曲を複数登録できる・曲の名前はファイル中のシーケンス名とする。
・曲を登録しても、SD カードへ書き込みは行わず、SD カードの内容はそのままとする。

付録：ユースケース記述

76

電子オルゴール<UC17：曲を削除する>■概要
ユーザが電子オルゴールから曲を削除する。

■アクター
ユーザ

■事前条件
・システムに 1 曲以上の曲が登録されている。

■事後条件・システムからアクターが指定した曲が削除されている。

■メインフロー
1. アクターは、システムに、曲を削除することを指示する。
2. アクターは、システムに、削除する曲を指示する。
3. システムは、指示された曲をシステムから削除する。
4. UC を終了する。

■代替フローなし■例外フロー
3a. アクターが指定した曲が存在しない場合
3a1. システムは、アクターへ、指示された曲が存在しないので、削除できない旨を通知する。
3a2. UC を終了する。
3b. 指示された曲が再生中の場合：
3b1. システムは、アクターへ、指示された曲が再生中なので、削除できない旨を通知する。
3b2. UC を終了する。

■備考
・undo はできない。
・曲が削除されると、その曲は、その曲を登録しているプレイリストからも削除される。

77

組込み分野のための UML モデル解説書<UC19：曲調を変更する>■概要
ユーザが電子オルゴールの曲調を変更する。

■アクター
ユーザ

■事前条件
・システムに 1 件以上の曲調が登録されている。

■事後条件
・アクターが指定した曲調が変更されている。

■メインフロー
1. アクターは、システムに、曲調の変更を指示する。
2. アクターは、システムに、変更する曲調と変更する曲調の内容を指示する。
3. システムは、指示された曲調を変更する。
4. UC を終了する。
■代替フローなし■例外フロー
3a. 指示された曲調が登録されていない場合：
3a1. システムは、アクターへ、指示された曲調が登録されていないので、変更できない旨を通知する。
3a2. UC を終了する。
3b. 指示された曲調の内容が正しくない場合：
3b1. システムは、アクターへ、指示された曲調の内容が正しくないので、変更できない旨を通知する。
3b2. UC を終了する。

付録：ユースケース記述

78

電子オルゴール<UC20：曲調を削除する>■概要
ユーザが電子オルゴールの曲調を削除する。

■アクター
ユーザ

■事前条件
・システムに 1 件以上の曲調が登録されている。

■事後条件
・アクターが指定した曲調がシステムから削除されている。

■メインフロー
1. アクターは、システムに、曲調の削除を指示する。
2. アクターは、システムに、削除する曲調を指示する。
3. システムは、指示された曲調を削除する。
4. UC を終了する。
■代替フローなし■例外フロー
3a. 指示された曲調が登録されていない場合：
3a1. システムは、アクターへ、指示された曲調が登録されていないので、削除できない旨を通知する。
3a2. UC を終了する。

79

組込み分野のための UML モデル解説書<UC21：曲調を適用する>■概要
ユーザが電子オルゴールに曲調を適用する。

■アクター
ユーザ

■事前条件
・システムに 1 件以上の曲調が登録されている。

■事後条件・システムにアクターが指定した曲調が適用されている。

■メインフロー
1. アクターは、システムに、曲調の適用を指示する。
2. アクターは、システムに、適用する曲調を指示する。
3. システムは、指示された曲調を適用する。
4. UC を終了する。

■代替フローなし■例外フロー
3a. 指示された曲調が登録されていない場合：
3a1. システムは、アクターへ、指示された曲調が登録されていないので、適用できない旨を通知する。
3a2. UC を終了する。

■備考
・変更時にシステムが再生中であれば、変更時点から指示された曲調での鳴動となる。
・変更時にシステムが停止中であれば、次回再生時から指示された曲調での鳴動となる。

付録：ユースケース記述

80

電子オルゴール<UC22：リピート再生を設定/解除する>■概要
ユーザがプレイリストのリピート再生を設定/解除する。

■アクター
ユーザ

■事前条件
なし

■事後条件
・システムのリピート再生が設定/解除されている。

■メインフロー
1. アクターは、システムに、電子オルゴールのリピート再生を設定/解除を指示する。
2. システムは、電子オルゴールのリピート再生を設定/解除する。
3. UC を終了する。

■代替フローなし■例外フローなし■備考
・リピートが設定されている場合、プレイリストを再生すると、プレイリストの再生を終了するとまた最初から再生する。
・リピートが設定されていても、曲を再生する場合、リピートが設定されていないときと変わらない。

81

組込み分野のための UML モデル解説書<UC23：シャッフル再生を設定/解除する>■概要
ユーザがプレイリストのシャッフル再生を設定/解除する。

■アクター
ユーザ

■事前条件
なし

■事後条件
・システムのシャッフル再生が設定/解除されている。

■メインフロー
1. アクターは、システムに、電子オルゴールのシャッフル再生を設定/解除を指示する。
2. システムは、電子オルゴールのシャッフル再生を設定/解除する。
3. UC を終了する。

■代替フローなし■例外フローなし■備考
・シャッフルが設定されている場合、プレイリストを再生すると、プレイリスト内の曲をランダムな順
番で再生する。
・シャッフルが設定されていても、曲を再生する場合、シャッフルが設定されていないときと変わらない。

付録：ユースケース記述82

電子オルゴール<UC24：音量を変更する>■概要
ユーザが電子オルゴールの音量を変更する。

■アクター
ユーザ

■事前条件
なし

■事後条件
・システムの音量が変更されている。

■メインフロー
1. アクターは、システムに、音量変更を指示する。
2. システムは、音量を変更する。
3. UC を終了する。

■代替フローなし■例外フローなし

83

組込み分野のための UML モデル解説書<UC25：調律を変更する>■概要
ユーザが電子オルゴールの調律を変更する。

■アクター
ユーザ

■事前条件
・なし

■事後条件
・システムの調律が変更されている。

■メインフロー
1. アクターは、システムに、調律の変更を指示する。
2. アクターは、システムに、変更する調律を指示する。
3. システムは、音源の調律を変更する。
4. UC を終了する。

■代替フローなし■例外フローなし■備考
・調律の種類は、12 平均律、純正律、ミーントーン、とする。

付録：ユースケース記述

84

電子オルゴール<UC26：音色を変更する>■概要
ユーザが電子オルゴールの音色を変更する。

■アクター
ユーザ

■事前条件
なし

■事後条件
・システムの音色が変更されている。

■メインフロー
1. アクターは、システムに、音色の変更を指示する。
2. アクターは、システムに、変更する音色を指示する。
3. システムは、音源の音色を変更する。
4. UC を終了する。

■代替フローなし■例外フローなし■備考
・音色の種類は、音色 1、音色 2、音色 3、とする。
・変更時にシステムが再生中であれば、変更時点から指示された音色での鳴動となる。
・変更時にシステムが停止中であれば、次回再生時から指示された音色での鳴動となる。

85

組込み分野のための UML モデル解説書<UC27：テンポを変更する>■概要
ユーザが電子オルゴールのテンポを変更する。

■アクター
ユーザ

■事前条件
なし

■事後条件
・システムの調律が再生テンポされている。

■メインフロー
1. アクターは、システムに、テンポの変更を指示する。
2. アクターは、システムに、変更するテンポを指示する。
3. システムは、音源のテンポを変更する。
4. UC を終了する。

■代替フローなし■例外フローなし■備考
・テンポの種類は、ゆっくり、ややゆっくり、通常、やや速く、速く、とする。
・本ユースケースは、楽曲データが有しているテンポ情報の更新ではない。

付録：ユースケース記述

86

電子オルゴール<UC28：発音を強制停止する>■概要
再生を停止し、発音停止した状態にする。

■アクター
ユーザ

■事前条件
なし

■事後条件
・再生停止状態になっていること。
・発音音量が 0 になっていること。

■メインフロー
1. アクターは、システムに、電子オルゴールの発音の強制停止を指示する。
2. システムは(再生プレイリストおよび再生曲の)再生を停止する。
3. システムは発音音量を 0 にする。
4. UC を終了する。

■代替フローなし■例外フローなし

87

組込み分野のための UML モデル解説書<UC29：電子オルゴールをリセットする>■概要
電子オルゴールの設定を工場出荷状態に戻す。

■アクター
ユーザ

■事前条件
なし

■事後条件
・設定情報が工場出荷状態になっていること。
・曲データが消去されていること。
・再生停止状態になっていること。
・発音音量が 0 になっていること。

■メインフロー
1. アクターは、システムに電子オルゴールのリセットを指示する。
2. システムは(再生プレイリストおよび再生曲の)再生を停止する。
3. システムは発音音量を 0 にする。
4. システムは曲データを消去する。
5. システムは、設定情報を工場出荷状態に設定する。
6. UC を終了する。

■代替フローなし■例外フローなし

付録：ユースケース記述

88

電子オルゴール

付録：分析モデルの動的モデル
ユースケース<UC04：再生曲を選択する>の相互作用
sd UC04：再生曲を選択する:ユーザーインターフェース

:全曲目録

プレリュード :
曲

:音源

:ユーザー
再生曲を選択する(2番目の曲)「全曲目録」と「再生中の再生目録」の比較などを行
い、代替フローをチェックし、代替フローの場合は代替フローを実行する
再生中の曲を設定する(2番目の曲)
再生の準備を行う(全曲目録)
再生開始位置を初期化する()再生の準備を行う(プレリュード)

再生中の再生目録を設定する(全曲目録)
再生する()

再生する()
再生する()
loop[すべての曲データ]
曲データを取得する()

曲終了を通知する()

図45

89

音を出力する()組込み分野のための UML モデル解説書

ユースケース<UC05：曲を再生する>の相互作用
sd UC05：曲を再生する:ユーザーインターフェース:ユーザー

再生中の再生
目録 :全曲目
録:曲:音源

曲を再生する()
再生曲が指定されているか()
再生する()

再生する()
再生する()

loop[すべての曲データ]
曲データを取得する()音を出力する()

曲終了を通知する()

図46

ユースケース<UC06：曲の再生を停止する>の相互作用
sd UC06：曲の再生を停止する:ユーザー
1: 曲の再生を停止する()

2: 再生曲が指定されているか():ユーザーイ ンターフェース

3: 再生を停止する()

4: 再生を停止する()

再生中の再生目録 :全曲目
録

Ｇ線上のアリア :曲

5: 再生を停止する()
:音源

図47

付録：分析モデルの動的モデル

90

電子オルゴールユースケース<UC07：プレイリストの一覧を見る>の相互作用
sd UC07：プレイ リストの一覧を見る:ユーザーインターフェース「プレイリスト」
フォルダ :フォルダ:ユーザー:プレイリスト

プレイリストの一覧を見る()
プレイリストの一覧を取得する()
loop[すべてのプレイリスト]
名前を取得する()

図48

ユースケース<UC08：プレイリストを登録する>の相互作用
sd UC08：プレイ リストを登録する:ユーザーインターフェース:フォルダ:プレイリスト:ユーザー
プレイリストを登録する(ショパン)
プレイリストが最大件数未満か()
プレイリストを登録する(ショパン)
loop[すべてのプレイリスト]
名前を取得する()生成する(ショパン)

図49

91

名前が重複しない
ようにチェック

ショパン :プレイリスト

組込み分野のための UML モデル解説書

ユースケース<UC09：プレイリストを削除する>の相互作用
sd UC09：プレイ リストを削除する:ユーザーインターフェース:フォルダ

ショパン :プレ
イリスト

:ユーザー
プレイリストを削除する(2番目のプレイリスト)
プレイリストを取得する(2番目のプレイリスト)

完全停止中か()
プレイリストを削除する(2番目のプレイリスト)

プレイリストを取得する(2番目)削除する()

図50

ユースケース<UC10：プレイリストの名前を変更する>の相互作用
sd UC10：プレイ リストの名前を変更する:ユーザーインターフェース:フォルダ:プレイリスト

ショパン :プレ
イリスト

:ユーザー
プレイリストの名前を変更する(2番目のプレイリスト,ショパン1)
プレイリストを取得する(2番目のプレイリスト)

完全停止中か()
プレイリストの名前を変更する(2番目のプレイリスト,ショパン1)loop[すべてのプレイリスト]
名前を取得する()

名前が重複しない
ようにチェック

プレイリストを取得する(2番目)
名前を変更する(ショパン1)

図51

付録：分析モデルの動的モデル

92

電子オルゴールユースケース<UC11：プレイリストの曲の一覧を見る>の相互作用
sd UC11：プレイ リストの曲の一覧を見る:ユーザーインターフェース:フォルダ

バッハ :プレイ
リスト

:曲

:ユーザー
プレイリストの曲の一覧を見る(2番目のプレイリスト)
プレイリストを取得する(2番目のプレイリスト)

曲の一覧を取得する()
loop[すべての曲]名前を取得する()

図52

ユースケース<UC13：プレイリストから曲を削除する>の相互作用
sd UC13：プレイ リストから曲を削除する:ユーザー
1: プレイリストから曲を削除する(3番目のプレイリスト,2番目の曲):ユーザーイ ンターフェース
2: プレイリストを取得する(3番目のプレイリスト)
3:
:フォルダ

4: 完全停止中か()5: 曲を削除する(2番目)お気に入り :プレイ リスト

図53

93

組込み分野のための UML モデル解説書

ユースケース<UC14：曲の一覧を見る>の相互作用
sd UC14：曲の一覧を見る:ユーザーインターフェース

:全曲目録

:曲

:ユーザー
電子オルゴールの曲の一覧を見る()
曲の一覧を取得する()
loop[すべての曲]名前を取得する()

図54

ユースケース<UC15：SD カードの曲の一覧を見る>の相互作用
sd UC15：SDカ ードの曲の一覧を見る:ユーザー
1: 外部メディアの曲の一覧を見る():ユーザーイ ンターフェース
6:

2: 外部メディアの曲の一覧を取得する():全曲目録

3: 使用可能か()
5:
4: 曲の一覧を取得する():外部メディア

図55

付録：分析モデルの動的モデル

94電子オルゴールユースケース<UC16：SD カードから曲を登録する>の相互作用
sd UC16：SDカ ードから曲を登録する:ユーザーインターフェース:全曲目録:外部メディア

:ユーザー
外部メディアから曲を登録する(2番目の曲)
曲が最大件数未満か()
外部メディアから曲を登録する(2番目の曲)使用可能か()

曲をコピーする(2番目の曲)生成する(Amazing Grace.midi)

アメージンググレース :曲図56

ユースケース<UC17：曲を削除する>の相互作用
sd UC17：曲を削除する:ユーザーインターフェース:全曲目録

Ｇ線上のアリ
ア :曲

:再生目録

:ユーザー
電子オルゴールから曲を削除する(5番目の曲)
曲を削除する(5番目の曲)
完全停止中か()完全停止でなければ、削除できない(しない)削除する()
loop[曲が所属するすべてのプレイリスト]
曲を削除する(Ｇ線上のアリア)

図57

95

組込み分野のための UML モデル解説書

ユースケース<UC19：曲調を変更する>の相互作用
sd UC19：曲調を変更する:ユーザー
1: 曲調を変更する(何番目の曲調, 調律, リヴァーブ種別, 音量):ユーザーイ ンターフェース

2: 曲調を変更する(何番目の曲調, 調律, リヴァーブ種別, 音量):曲調マネージ ャー

3: 変更する(調律, リヴァーブ種別, 音量)
:曲調

図58

ユースケース<UC20：曲調を削除する>の相互作用
sd UC20：曲調を削除する:ユーザーインターフェース:曲調マネージ
ャー

:曲調

:ユーザー
曲調を削除する(何番目の曲調)
曲調を削除する(何番目の曲調)削除する()

図59

付録：分析モデルの動的モデル

96電子オルゴールユースケース<UC21：曲調を適用する>の相互作用
sd UC21：曲調を適用する:ユーザー
1: 曲調を適用する(何番目の曲調):ユーザーイ ンターフェース
2: 曲調を適用する(何番目の曲調):曲調マネージ ャー

3: 適用する():曲調

4: 調律を設定する(調律)

5: リヴァーブ種別を設定する(リヴァーブ種別)
6: 音量を設定する(音量)

:音源

図60

ユースケース<UC22：リピート再生を設定/解除する>の相互作用
sd UC22：リピート再生を設定/解除する:ユーザー

3: リピート再生を解除する()

1: リピート再生を設定する():ユーザーイ ンターフェース

2: リピート再生を設定する()

4: リピート再生を解除する()

:再生目録

図61

97

組込み分野のための UML モデル解説書

ユースケース<UC23：シャッフル再生を設定/解除する>の相互作用
sd UC23：シャッフル再生を設定/解除する:ユーザー
3: シャッフル再生を解除する()

1: シャッフル再生を設定する():ユーザーイ ンターフェース

2: シャッフル再生を設定する()

4: シャッフル再生を解除する()

:再生目録

図62

ユースケース<UC24：音量を変更する>の相互作用
sd UC24：音量を変更する:ユーザー
1: 音量を変更する(音量):ユーザーイ ンターフェース

2: 音量を設定する(音量):曲調マネージ ャー

3: 音量を設定する(音量)
:音源

図63

付録：分析モデルの動的モデル98電子オルゴールユースケース<UC25：調律を変更する>の相互作用
sd UC25：調律を変更する:ユーザー
1: 調律を変更する(調律):ユーザーイ ンターフェース

2: 調律を設定する(調律):曲調マネージ ャー

3: 調律を設定する(調律)

:音源

図64

ユースケース<UC26：音色を変更する>の相互作用
sd UC26：音色を変更する:ユーザー
1: 音色を変更する(音色):ユーザーイ ンターフェース

3: 音色を変更する(音色):曲調マネージ ャー

2: 音色を変更する(音色)
:音源

図65

99

組込み分野のための UML モデル解説書

ユースケース<UC29：テンポを変更する>の相互作用
sd UC27：テンポを変更する:ユーザー
1: テンポを変更する(テンポ):ユーザーイ ンターフェース
3: テンポを変更する(テンポ):曲調マネージ ャー

2: テンポを変更する(テンポ)
:音源

図66

ユースケース<UC28：発音を強制停止する>の相互作用
sd UC28：発音を強制停止する:ユーザー
1: 発音を強制停止する():ユーザーイ ンターフェース
5: 発音を強制停止する()

2: 発音を強制停止する()
再生中の再生目録 :再生目録:曲調マネージ ャー

3: 再生を停止する()
Ｇ線上のア リア :曲
6: 音量を設定する(0)4: 再生を停止する()
:音源

図67

付録：分析モデルの動的モデル

100

電子オルゴールユースケース<UC29：電子オルゴールをリセットする>の相互作用
sd UC29：電子オルゴールをリセットする:ユーザーインターフェース:フォルダ:プレイリスト:全曲目録:曲:曲調マネージ
ャー

:曲調

:ユーザー
リセットする()
発音を強制停止する()
発音を強制停止する()
工場出荷状態に戻す()<UC28：発音を強制停止する>参照

loop[すべてのプレイリスト]
削除する()

工場出荷状態に戻す()
シャッフル再生を解除する()
リピート再生を解除する()
loop[すべての曲]削除する()

工場出荷状態に戻す()
loop[すべての曲調]

図68

101

削除する()

組込み分野のための UML モデル解説書

付録：メニュー構成「メインメニュー」のメニュー構成
プレイリスト一覧
プレイリスト[プレイリスト]で→or 中央で

バッハ

再生開始

お気に入り
バッハ＿＿＿＿＿＿＿
フォスター→or 中央←↑ ↓で音量変更→で再生↑ ↓でカーソル移動

Ｇ線上のアリア
プレリュード＿＿＿＿
ポロネーズ
夢路より
ケンタッキーの我…

←

中央で停止→or 中央で
再生開始

曲

[曲]で
→or 中央メニュー→or 中央プレイリスト＿＿＿＿
曲
←は何
曲調
もしない
編集
設定

←

↑ ↓でカーソル移動↑ ↓で音量変更

←

→で再生
中央で停止
プレイリスト編集
プレイリスト編集

曲調
曲調 1
曲調 2＿＿＿＿＿＿＿
曲調 3

[プレイ
リスト
編集]で

↑ ↓でカーソル移動→or 中央→or 中央で曲調適用

編集←→or 中央[曲追加・削除]でプレイリスト編集＿＿
曲追加・削除曲調編集→or 中央↑ ↓でカーソル移動

←

[編集]で

←

リピート：オフ
シャッフル：オフ＿＿
調律：12 平均律
音色：音色 1
テンポ：通常D
音を止める
工場出荷状態へ戻す↑ ↓でカーソル移動

付録：メニュー構成

曲追加
B
Ｇ線上のアリア
プレリュード＿＿＿＿
ポロネーズ
夢路より
ケンタッキーの我…
↑ ↓でカーソル移動

曲調編集

設定

[設定]で
→or 中央

曲追加・削除
曲追加・削除

曲調編集

設定

←

新規登録
A
お気に入り
バッハ＿＿＿＿＿＿＿フォスター↑ ↓でカーソル移動

編集

←

▶

プレリュード
音量：10

曲調一覧

[曲調]で

曲再生
プレリュード↑ ↓でカーソル移動
メインメニュー

▶

Ｇ線上のアリア
音量：10
←

曲一覧

プレイリスト再生

102

[曲調
編集]で
→or 中央新規登録
曲調 1＿＿＿＿＿＿＿
曲調 2
曲調 3
C
↑ ↓でカーソル移動電子オルゴール「プレイリスト編集」のメニュー構成

プレイリスト名前変更[決定]で中央

新規登録

プレイリストの名前が重複↑ ↓ → ←でカーソル移動
Shift 中央：ケース切り替え
削除 中央：1 文字削除
[その他] 中央：1 文字入力

バッハ___________
1234567890QWERTYUIOPASDFGHJKL+ZXCVBNM<>
Shift 決定 戻る 削除→or 中央プレイリスト編集
新規登録
A
お気に入り
バッハ＿＿＿＿＿＿＿フォスター↑ ↓でカーソル移動→or 中央戻る＿＿＿＿＿＿＿＿←↑ ↓は何もしない[戻る]で中央(中止)プレイリスト曲一覧

プレイリスト[新規登録]
以外で→or 中央←プレイリストの名前が重複しているので、名前を変更できません[決定]で中央(実行)[名前変更]でプレイリスト編集[戻る]でプレイリスト名前変更で
名前重複

バッハ

バッハ
曲一覧＿＿＿＿＿＿＿
名前変更削除↑ ↓でカーソル移動

[戻る]で

[削除]で

→or 中央→or 中央[曲一覧]で Ｇ線上のアリア
プレリュード＿＿＿＿→or 中央ポロネーズ

E←↑ ↓でカーソル移動[削除] [名前変更]で→or 中央
プレイリストが再生中←(中止)
プレイリスト削除
削除[削除]で→or 中央(実行)バッハ

削除＿＿＿＿＿＿＿＿
戻る

[戻る]で

プレイリストで再生中→or 中央←プレイリストの再生中なので、実行できません
戻る＿＿＿＿＿＿＿＿↑ ↓でカーソル移動

103↑ ↓は何もしない組込み分野のための UML モデル解説書「プレイリスト新規登録」のメニュー構成
プレイリスト編集
プレイリスト編集

A

新規登録
お気に入り
バッハ＿＿＿＿＿＿＿フォスター↑ ↓でカーソル移動[新規登録]で プレイリスト新規登録→or 中央新規登録↑ ↓ → ←でカーソル移動________________[決定]で中央 1 2 3 4 5 6 7 8 9 0 QWERTYUIOP(実行)
ASDFGHJKL+[戻る]で中央 Z X C V B N M < >Shift 決定 戻る 削除(中止)

Shift 中央：ケース切り替え
削除 中央：1 文字削除
[その他] 中央：1 文字入力

[戻る]で
[戻る]で
→or 中央←[新規登録]で→or 中央、プレイリストが最大件数登録済み

プレイリスト新規登録
で最大件数
プレイリストが最大件数登録済みなので、新規登録できません←[決定]で中央
プレイリストの名前が重複

プレイリスト新規登録
で名前重複
プレイリストの名前が重複しているので、新規登録できません
戻る＿＿＿＿＿＿＿＿

戻る＿＿＿＿＿＿＿＿↑ ↓は何もしない

付録：メニュー構成→or 中央↑ ↓は何もしない104

電子オルゴール「プレイリスト曲一覧」のメニュー構成→or 中央(実行)プレイリスト曲で再生中

前に曲を追加前に曲を追加プレイリストの再生中なので、実行できません

Ｇ線上のアリア
プレリュード＿＿＿＿
ポロネーズ
夢路より
ケンタッキーの我…

戻る＿＿＿＿＿＿＿＿↑ ↓は何もしない↑ ↓でカーソル移動←[前に曲を追加]で→or 中央→or 中央プレイリストが再生中
プレイリスト曲一覧

プレイリスト曲

バッハ

プレリュード

Ｇ線上のアリア
プレリュード＿＿＿＿
ポロネーズ

E

→or 中央

前に曲を追加後に曲を追加＿＿＿＿削除←↑ ↓でカーソル移動↑ ↓でカーソル移動[戻る]で→or 中央←(中止)

プレイリスト曲で最大件数※[戻る]で→or 中央←プレイリストの曲が最大件数登録済みなので、曲を追加できません
戻る＿＿＿＿＿＿＿＿↑ ↓は何もしない[削除]で[後に曲を追加]で→or 中央→or 中央←プレイリスト曲削除
削除[削除]で→or 中央プレリュード後に曲を追加後に曲を追加

削除＿＿＿＿＿＿＿＿
戻る

Ｇ線上のアリア
プレリュード＿＿＿＿
ポロネーズ
夢路より
ケンタッキーの我…

↑ ↓でカーソル移動↑ ↓でカーソル移動(実行)→or 中央(実行)※ [前に曲を追加] [後に曲を追加]で→or 中央
レイリストの曲が最大件数登録済み

105

組込み分野のための UML モデル解説書「曲追加・削除」のメニュー構成
曲追加で最大件数

曲追加で SD なし

オルゴールの曲が最大件数登録済みなので、曲を追加できません

SD カードが未挿入なので、曲を追加できません[曲追加]で→or 中央
オルゴールの曲が最大件
数登録済み

[戻る]で
→or 中央戻る＿＿＿＿＿＿＿＿↑ ↓は何もしない[戻る]で戻る＿＿＿＿＿＿＿＿→or 中央↑ ↓は何もしない←←

曲追加・削除[曲追加]で曲追加・削除曲追加
B
Ｇ線上のアリア
プレリュード＿＿＿＿
ポロネーズ
夢路より
ケンタッキーの我…

→or 中央[曲追加]で→or 中央

曲追加

SD カードが未挿入

曲追加
子犬のワルツ＿＿＿＿英雄ポロネーゼ→or 中央(決定)←(中止)↑ ↓でカーソル移動↑ ↓でカーソル移動[削除]で→or 中央(実行)

曲

[削除]で

プレリュード[戻る]で→or 中央(中止)[曲追加]以外

削除＿＿＿＿＿＿＿＿
戻る

←(中止)

→or 中央(実行)

削除

プレリュード削除＿＿＿＿＿＿＿＿
戻る

[戻る]で

で→or 中央↑ ↓でカーソル移動→or 中央←(中止)[戻る]で→or 中央[削除]で→or 中央
曲を再生中

←

曲削除で再生中
曲の再生中なので、削除できません
戻る＿＿＿＿＿＿＿＿↑ ↓は何もしない

付録：メニュー構成

曲削除

106

↑ ↓でカーソル移動電子オルゴール「曲調編集」のメニュー構成[削除]で→or 中央(実行)曲調編集[新規登録]
以外で

曲調編集
新規登録
曲調 1＿＿＿＿＿＿＿
曲調 2
曲調 3
C

→or 中央←

曲調 1
調律：12 平均律＿＿
リヴァーブ：HALL
音量：15
削除

→or 中央(決定)
[調律]で

[リヴァ
ーブ]で

→or 中央(決定)→or 中央←(中止)→or 中央
曲調の調律

曲調削除

[削除]で
→or 中央↑ ↓でカーソル移動↑ ↓でカーソル移動

←(中止)

曲調

削除

曲調 1

削除＿＿＿＿＿＿＿＿戻る[戻る]で→or 中央(中止)←(中止)↑ ↓でカーソル移動→or 中央(決定)
←(中止)

[音量]で
→or 中央曲調のリヴァーブ

曲調の音量

調律

リヴァーブ

音量

12 平均律＿＿＿＿＿
純正律
ミーントーン

ROOM＿＿＿＿＿＿＿
HALL
PLATE

音量：10

↑ ↓で音量変更↑ ↓でカーソル移動↑ ↓でカーソル移動

107→or 中央は何もしない組込み分野のための UML モデル解説書「曲調新規登録」のメニュー構成

曲調新規登録の調律

曲調新規登録のリヴァーブ

曲調新規登録の音量

調律

リヴァーブ

音量

12 平均律＿＿＿＿＿
純正律
ミーントーン

ROOM＿＿＿＿＿＿＿
HALL
PLATE

音量：10

↑ ↓で音量変更↑ ↓でカーソル移動↑ ↓でカーソル移動
[調律]で

←(中止)

[リヴァ
ーブ]で

→or 中央(決定)→or 中央(決定)→or 中央←(中止)→or 中央

曲調編集[新規登録]で

曲調編集
新規登録
曲調 1＿＿＿＿＿＿＿
曲調 2
曲調 3
C
↑ ↓でカーソル移動→or 中央

曲調新規登録新規登録

中央(実行)

調律：12 平均律＿＿
リヴァーブ：HALL
音量：15
決定
戻る

[戻る]で→or↑ ↓でカーソル移動[決定]で→or

中央(中止)←(中止)[戻る]で→or 中央←[新規登録]で→or 中央、プレイリストが最大件数登録済み

付録：メニュー構成

曲調新規登録で最大件数
曲調が最大件数登録済みなので、新規登録できません
戻る＿＿＿＿＿＿＿＿↑ ↓は何もしない108→or 中央は何もしない[音量]で→or 中央←電子オルゴール「設定」のメニュー構成

リピート

シャッフル

調律

リピート

シャッフル

調律

オフ＿＿＿＿＿＿＿＿
オン

オフ＿＿＿＿＿＿＿＿
オン

12 平均律＿＿＿＿＿
純正律
ミーントーン↑ ↓でカーソル移動↑ ↓でカーソル移動↑ ↓でカーソル移動[リピート]で[シャッフル]で→or 中央[調律]で→or 中央→or 中央

←(中止)

←(中止)

→or 中央(決定)→or 中央(決定)←(中止)→or 中央(決定)

設定

音色

設定

音色

リピート：オフ
シャッフル：オフ＿＿
調律：12 平均律
音色：音色 1
テンポ：通常D
音を止める
工場出荷状態へ戻す[音色]で→or 中央→or 中央(決定)←(中止)

音色 1＿＿＿＿＿＿＿
音色 2
音色 3

↑ ↓でカーソル移動↑ ↓でカーソル移動
[工場出
荷状態へ戻
す]で
→or 中央(実行)[工場出荷状態へ戻す]で→or 中央(実行)[戻る]で→or 中央(決定)→or 中央(実行)→or 中央(中止)

[音を止
める]で

→or 中央(中止)←(中止)→or 中央←(中止)

工場出荷状態へ戻す←(中止)[音を止める]で[戻る]で[テンポ]で→or 中央

音を止める

テンポ

工場出荷状態へ戻す

音を止める

テンポ

工場出荷状態へ戻す＿
戻る

音を止める＿＿＿＿＿戻る

ゆっくり
ややゆっくり通常＿＿＿＿＿＿＿＿
やや速く
速く↑ ↓でカーソル移動↑ ↓でカーソル移動↑ ↓でカーソル移動109

組込み分野のための UML モデル解説書

付録：状態遷移表
メニュー(画面)を UI の状態に見立てた状態遷移表

メインメニュー

S0→キー押下

中央キー押下

↑キー押下

↓キー押下

←キー押下

E0

E1

E2

E3

E4

[プレイリスト一[プレイリスト一

覧]/S1

覧]/S1

[曲一覧]/S3[曲一覧]/S3[曲調一覧]/S5[曲調一覧]/S5

S0

S0

無視

[編集]/S6[編集]/S6[設定]/S9[設定]/S9

プレイリスト一覧

S1

S2

S2

S1

S1

S0

プレイリスト再生

S2

S2

S2

S2

S2

S1

曲一覧

S3

S4

S4

S3

S3

S0

曲再生

S4

S4

S4

S4

S4

S3

曲調一覧

S5

S5

S5

S5

S5

S0

[プレイリスト編[プレイリスト編

集]/S7

集]/S7

[曲追加・削除]/S8[曲追加・削除]/S8

S6

S6

S0

[曲調編集]/S10[曲調編集]/S10[新規登録]/S17[新規登録]/S17[新規登録以外]/S11[新規登録以外]/S11[新規登録 & プレイ[新規登録 & プレイ

S7

S7

S6

リストが最大件数登リストが最大件数登録済み]/S18

録済み]/S18[曲追加]/S26[曲追加]/S26[曲追加以外]/S29[曲追加以外]/S29[曲追加 & オルゴー

[曲追加 & オルゴー

ルの曲が最大件数登

ルの曲が最大件数登

S8

S8

S6

録済み]/S27

録済み]/S27[曲追加 & SD カー[曲追加 & SD カード

ドが未挿入]/S28

が未挿入]/S28[リピート]/S42[リピート]/S42[シャッフル]/S43[シャッフル]/S43[調律]/S44[調律]/S44[音色]/S45[音色]/S45[テンポ]/S48[テンポ]/S48

S9

S9

S0

[音を止める]/S47[音を止める]/S47[工場出荷状態へ戻[工場出荷状態へ戻す]/S46す]/S46

編集

プレイリスト編集

曲追加・削除

設定

付録：状態遷移表

S6

S7

S8

S9

110

電子オルゴール

曲調編集

プレイリストS10

S11[新規登録]/S32[新規登録]/S32[新規登録以外]/S37[新規登録以外]/S37[新規登録 & プレイ[新規登録 & プレイ

リストが最大件数登リストが最大件数登録済み]/S33

録済み]/S33[曲一覧]/S14[曲一覧]/S14[名前変更]/S12[名前変更]/S12[削除]/S15[削除]/S15[(名前変更 | 削除)[(名前変更 | 削除) && プレイリストが再プレイリストが再生

生中]/S16中]/S16

S10

S10

S6

S11

S11

S7

S12

S12

S12

[中止]/S11[決定]/S11[Shift]/S12
プレイリスト名前変
更

S12

S12

[削除]/S12[その他]/S12[決定 & プレイリス
トの名前が重複]/S13

プレイリスト名前変

S13

S12

S12

無視

無視

S12

プレイリスト曲一覧

S14

S20

S20

S14

S14

S11

プレイリスト削除

S15[戻る]/S11[戻る]/S11[削除]/S7[削除]/S7

S15

S15

S11

S11

S11

無視

無視

S11

S17

S17

S17

更で名前重複プレイリストで再生中

S16[決定]/S7[中止]/S7[Shift]/S17
プレイリスト新規登
録

S17

S17

[削除]/S17[その他]/S17[決定 & プレイリス
トの名前が重複]/S19

プレイリスト新規登録で最大件数
プレイリスト新規登録で名前重複プレイリスト曲

S18

S7

S7

無視

無視

S7

S19

S17

S17

無視

無視

S17

[前に曲を追加]/S23[削除]/S15[後に曲を追加]/S24[前に曲を追加]/S23

S20

S20

S14

S20

111

組込み分野のための UML モデル解説書[削除]/S15[後に曲を追加]/S24[(前に曲を追加 | 後[(前に曲を追加 | 後に曲を追加) & レイに曲を追加) & レイ

リストの曲が最大件リストの曲が最大件数登録済み]/S21

数登録済み]/S21[プレイリストが再[プレイリストが再生

生中]/S22中]/S22

S21

S20

S20

無視

無視

S20

S22

S20

S20

無視

無視

S20

前に曲を追加

S23

S14

S14

S23

S23

S20

後に曲を追加

S24

S14

S14

S24

S24

S20

プレイリスト曲削除

S25[戻る]/S20[削除]/S14[削除]/S14[戻る]/S20

S25

S25

S20

曲追加

S26

S8

S8

S26

S26

S8

曲追加で最大件数

S27

S8

S8

無視

無視

S8

曲追加で SD なし

S28

S8

S8

無視

無視

S8

[戻る]/S8[戻る]/S8[削除]/S30[削除]/S30[削除 & 曲を再生

[削除 & 曲を再生

S29

S29

S8

中]/S31

中]/S31[戻る]/S29[削除]/S8[削除]/S8[戻る]/S29

S30

S30

S29

S29

S29

無視

無視

S29

[調律]/S34[調律]/S34[リヴァーブ]/S35[リヴァーブ]/S35[音量]/S36[音量]/S36

S32

S32

S10

[決定]/S10[決定]/S10[戻る]/S10[戻る]/S10

S33

S10

S10

無視

無視

S10

S34

S32

S32

S34

S34

S32

S35

S32

S32

S35

S35

S32

S36

無視

無視

S36

S36

S32

[削除]/S41[削除]/S41[調律]/S38[調律]/S38[リヴァーブ]/S39[リヴァーブ]/S39

S37

S37

S10

[音量]/S40[音量]/S40

プレイリスト曲で最大件数
プレイリスト曲で再
生中

曲

S29

曲削除

S30

曲削除で再生中

S31

曲調新規登録曲調新規登録で最大件数
曲調新規登録 調律
曲調新規登録 リヴァーブ
曲調新規登録 音量

曲調

付録：状態遷移表

S32

S37

112

電子オルゴール
曲調 調律

S38

S37

S37

S38

S38

S37

曲調 リヴァーブ

S39

S37

S37

S39

S39

S37

曲調 音量

S40

無視

無視

S40

S40

S37

曲調削除

S41

[戻る]/S37[戻る]/S37[削除]/S10[削除]/S10

S41

S41

S37

リピート

S42

S9

S9

S42

S42

S9

シャッフル

S43

S9

S9

S43

S43

S9

調律

S44

S9

S9

S44

S44

S9

音色

S45

S9

S9

S45

S45

S9

[戻る]/S9[戻る]/S9[工場出荷状態へ戻[工場出荷状態へ戻

S46

S46

S9

す]/S9

す]/S9

[戻る]/S9[戻る]/S9[音を止める]/S9[音を止める]/S9

S47

S47

S9

S9

S9

S48

S48

S9

工場出荷状態へ戻す

S46

音を止める

S47

テンポ

S48

113

組込み分野のための UML モデル解説書

付録：設計モデルの静的モデル
本文で省略したユーザーインターフェースパッケージのサブパッケージのクラス構造を示します。
各クラスは、それぞれ同じ名前のメニューとなりますので、個々に説明しません。

付録：設計モデルの静的モデル

114

電子オルゴール「プレイリスト編集メニュー」サブパッケージのクラス構造
class プレイ リスト編集メニュー
ユーザーイ ンターフェース-現在のメニューユーザーイ ンターフェース

0..1<<interface>>
メニュー

1

リストメニュー

エ ラー表示メニュー

仮想キーボードメニュー

プレイ リスト名前変更メニュー-

プレイリストの名前 :名前

+
#
#
+

インスタンスを取得する(プレイリスト, 名前) :プレイリスト名前変更メニュー
実行する() :void
生成する() :void
中止する() :void
表示する(ユーザーインターフェース) :void
0..1
プレイ リストで再生中メニュー-

プレイリストの名前 :名前++-

インスタンスを取得する(プレイリスト, 名前) :プレイリストで再生中メニュー
エラーメッセージを設定する(エラーメッセージ) :void
生成する() :void
0..1
プレイ リスト名前変更で名前重複メニュー-

プレイリストの名前 :名前++-

インスタンスを取得する(プレイリスト, 名前) :プレイリスト名前変更で名前重複メニュー
エラーメッセージを設定する(エラーメッセージ) :void
生成する() :void
0..1
プレイ リストメニュープレイ リスト編集メニュー
+
+
+
+
+

インスタンスを取得する() :プレイリスト編集メニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する() :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void

+
+
+
+
+

インスタンスを取得する(プレイリスト) :プレイリストメニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する() :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void
0..1

プレイ リスト削除メニュー
+
+
+
+
+

インスタンスを取得する(プレイリスト) :プレイリスト削除メニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する() :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void
0..1

曲
-編集
対象

0..1

1

-編集
0..1 対象

0..1

-編集
対象

-編集
0..1 対象

0..1

再生目録

-プレイリスト

フォルダ

-編集
対象

プレイ リスト

0..*

図69

115

組込み分野のための UML モデル解説書「プレイリスト新規登録メニュー」サブパッケージのクラス構造
class プレイ リスト新規登録メニュー
ユーザーイ ンターフェース-現在のメニューユーザーイ ンターフェース

0..1

1

<<interface>>
メニュー

エ ラー表示メニュー

仮想キーボードメニュー

プレイ リスト新規登録で最大件数メニュー++-

インスタンスを取得する() :プレイリスト新規登録で最大件数メニュー

エラーメッセージを設定する(エラーメッセージ) :void
生成する() :void

プレイ リスト新規登録で名前重複メニュー-

プレイリストの名前 :名前++-

インスタンスを取得する(名前) :プレイリスト新規登録で名前重複メニュー

エラーメッセージを設定する(エラーメッセージ) :void
生成する() :void

プレイ リスト新規登録メニュー-

プレイリストの名前 :名前

+
#
#
+

インスタンスを取得する(名前) :プレイリスト新規登録メニュー

実行する() :void
生成する() :void

中止する() :void

表示する(ユーザーインターフェース) :void

曲

再生目録

-プレイリスト

フォルダ
1

0..*

プレイ リスト

図70

付録：設計モデルの静的モデル

116

電子オルゴール「プレイリスト曲一覧メニュー」サブパッケージのクラス構造
class プレイ リスト曲一覧メニュー
ユーザーイ ンターフェース
ユーザーイ ンターフェース-現在のメニュー
0..1

1<<interface>>
メニュー

リストメニュー

プレイ リスト曲一覧メニュー
+
+
+
+
+

インスタンスを取得する(プレイリスト) :プレイリスト曲一覧メニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する() :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void
0..1

プレイ リスト曲メニュー-

何曲目 :何曲目

+
+
+
+
+

インスタンスを取得する(プレイリスト, 何曲目) :プレイリスト曲メニュー
右キーを押下する(ユーザーインターフェース) :void0..1
左キーを押下する(ユーザーインターフェース) :void
生成する() :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void

プレイ リスト曲削除メニュー-

何曲目 :何曲目

+
+
+
+
+

インスタンスを取得する(プレイリスト, 何曲目) :プレイリスト曲削除メニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void0..1
生成する() :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void

プレイ リスト曲で再生中メニュー-

何曲目 :何曲目

+
+
+
+
+

インスタンスを取得する(プレイリスト, 何曲目) :プレイリスト曲で再生中メニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する() :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void
0..1
曲
-編集
対象

-編集
0..1 対象-編集
0..1 対象-表示
0..1 対象 0..1

再生目録
プレイ リスト

図71

117

組込み分野のための UML モデル解説書「プレイリスト曲一覧メニュー(曲追加)」サブパッケージのクラス構造
class プレイ リスト曲一覧メニュー(曲追加)
ユーザーイ ンターフェース-現在のメニューユーザーイ ンターフェース

0..1

1

<<interface>>
メニュー

リストメニュー

前に曲を追加メニュー-

何曲目 :何曲目

+
+
+
+
+

インスタンスを取得する(プレイリスト, 何曲目) :前に曲を追加メニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void0..1
生成する() :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void
後に曲を追加メニュー-

何曲目 :何曲目

+
+
+
+
+

インスタンスを取得する(プレイリスト, 何曲目) :後に曲を追加メニュー 0..1
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する() :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void

プレイ リスト曲追加で最大件数メニュー-

何曲目 :何曲目

+
+
+
+
+

インスタンスを取得する(プレイリスト, 何曲目) :プレイリスト曲追加で最大件数メニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する() :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void
0..1
曲
-編集
対象

0..1

-編集
対象

-編集
0..1 対象

0..1

再生目録
プレイ リスト

図72

付録：設計モデルの静的モデル

118

電子オルゴール「曲追加・削除メニュー」サブパッケージのクラス構造
class 曲追加・削除メニュー
ユーザーイ ンターフェース-現在のメニューユーザーイ ンターフェース
0..1

リストメニュー

<<interface>>
メニュー

1

エ ラー表示メニュー

曲追加で最大件数メニュー++-

インスタンスを取得する() :曲追加で最大件数メニュー
エラーメッセージを設定する(エラーメッセージ) :void
生成する() :void
曲追加でSD未挿入メニュー++-

インスタンスを取得する() :曲追加でSD未挿入メニュー
エラーメッセージを設定する(エラーメッセージ) :void
生成する() :void

曲削除で再生中メニュー-

何番目の曲 :何番目の曲++-

インスタンスを取得する(何番目の曲) :曲追加・削除で最大件数メニュー
エラーメッセージを設定する(エラーメッセージ) :void
生成する() :void
曲削除メニュー

曲追加・削除メニュー
+
+
+
+
+

インスタンスを取得する() :曲追加・削除メニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する()
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void-

何番目の曲 :何番目の曲

+
+
+
+
+

インスタンスを取得する(何番目の曲) :曲削除メニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する()
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void-

何番目の曲 :何番目の曲

+
+
+
+
+

インスタンスを取得する(何番目の曲) :曲メニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する()
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void

曲メニュー
曲追加メニュー
+++++インスタンスを取得する() :曲追加メニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する()
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void
曲

再生目録
全曲目録

図73

119

組込み分野のための UML モデル解説書「曲調編集メニュー」サブパッケージのクラス構造
class 曲調編集メニュー
ユーザーイ ンターフェース
ユーザーイ ンターフェース-現在のメニュー
0..1<<interface>>
メニュー

1

リストメニュー

曲調メニュー+++++

インスタンスを取得する(曲調) :曲調メニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void0..1
生成する() :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void
曲調削除メニュー

+
+
+
+
+

インスタンスを取得する(曲調) :曲調削除メニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する() :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void

0..1

曲調編集メニュー+++++

インスタンスを取得する() :曲調編集メニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する() :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void

曲調
-削除
対象
-曲調

曲調マネージ ャー
1

0..*

図74

付録：設計モデルの静的モデル

120

-編集
対象

0..1
曲調

0..1

電子オルゴール「曲調編集メニュー(パラメータ)」サブパッケージのクラス構造
class 曲調編集メニュー(パラメータ)
ユーザーイ ンターフェース
ユーザーイ ンターフェース-現在のメニュー
0..1

1<<interface>>
メニュー

リストメニュー

曲調の音量メニュー
+
+
+
+
+

インスタンスを取得する(曲調) :曲の音量メニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する() :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void

0..1

曲調の調律メニュー
+
+
+
+
+

インスタンスを取得する(曲調) :曲調の調律メニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void0..1
生成する() :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void

曲調のリヴァ ーブメニュー
+
+
+
+
+

インスタンスを取得する(曲調) :曲調のリヴァーブメニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void0..1
生成する() :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void
曲調
-編集
対象

0..1

-編集
対象
曲調

図75

121

0..1

-編集
対象

0..1

組込み分野のための UML モデル解説書「曲調新規登録メニュー」サブパッケージのクラス構造
class 曲調新規登録メニュー
ユーザーイ ンターフェース
ユーザーイ ンターフェース-現在のメニュー
0..1<<interface>>
メニュー

1

リストメニュー

エ ラー表示メニュー

新規曲調登録で最大件数メニュー++-

インスタンスを取得する(曲調) :新規曲調登録で最大件数メニュー
エラーメッセージを設定する(エラーメッセージ) :void
生成する() :void0..1

曲調新規登録メニュー
+
+
+
+
+

インスタンスを取得する(曲調) :曲調新規登録メニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void0..1
生成する() :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void
曲調新規登録の調律メニュー

+
+
+
+
+

インスタンスを取得する(曲調) :曲調新規登録の調律メニュー 0..1
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する() :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void
曲調新規登録のリヴァ ーブメニュー

+
+
+
+
+

インスタンスを取得する(曲調) :曲調新規登録のリヴァーブメニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する() :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void0..1
曲調新規登録の音量メニュー

+
+
+
+
+

インスタンスを取得する(曲調) :曲調新規登録の音量メニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する() :void
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void
0..1
曲調
-登録対象

0..1

-登録対象

0..1
曲調

図76

付録：設計モデルの静的モデル

122

-登録
対象

0..1

-編集
対象

0..1

-登録
対象

0..1

電子オルゴール「設定メニュー(1)」サブパッケージのクラス構造
class 設定メニュー(1)ユーザーイ ンターフェース
ユーザーイ ンターフェース-現在のメニュー
0..1<<interface>>
メニュー

1

リストメニュー

設定メニュー+++++

インスタンスを取得する() :設定メニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する()
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void
リピートメニュー

+
+
+
+
+

インスタンスを取得する() :リピートメニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する()
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void
シ ャッフルメニュー

+
+
+
+
+

インスタンスを取得する() :シャッフルメニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する()
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void
工場出荷状態へ戻すメニュー

+
+
+
+
+

インスタンスを取得する() :工場出荷状態へ戻すメニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する()
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void

曲調

曲

曲調マネージ ャー

フォルダ

図77

123

再生目録

組込み分野のための UML モデル解説書「設定メニュー(2)」サブパッケージのクラス構造
class 設定メニュー(2)ユーザーイ ンターフェース
ユーザーイ ンターフェース-現在のメニュー
0..1

1<<interface>>
メニュー

リストメニュー

音色メニュー+++++

インスタンスを取得する() :音色メニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する()
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void

テンポメニュー
+++++インスタンスを取得する() :テンポメニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する()
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void

調律メニュー+++++

インスタンスを取得する() :調律メニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する()
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void

音を止めるメニュー
+
+
+
+
+

インスタンスを取得する() :音を止めるメニュー
右キーを押下する(ユーザーインターフェース) :void
左キーを押下する(ユーザーインターフェース) :void
生成する()
中央キーを押下する(ユーザーインターフェース) :void
表示する(ユーザーインターフェース) :void

曲

曲調
再生目録

曲調マネージ ャー

図78

付録：設計モデルの静的モデル

124

電子オルゴール

付録：設計モデルの動的モデル
ユースケース<UC12：プレイリストに曲を登録する>
プレイリスト編集
プレイリスト編集
新規登録
お気に入り
バッハ＿＿＿＿＿＿＿
フォスター

プレイリスト曲一覧

プレイリストバッハ

バッハ(i) バッハを選択↑ ↓でカーソル移動

曲一覧＿＿＿＿＿＿＿
名前変更削除(ii) 曲一覧
を選択

Ｇ線上のアリア
プレリュード＿＿＿＿ポロネーズ↑ ↓でカーソル移動(iii) プレリュード
を選択

プレイリスト曲一覧
バッハ
Ｇ線上のアリア
プレリュード＿＿＿＿プレリュードポロネーズ

後に曲を追加(v) プレリュード
を選択(iv) 後に曲後に曲を追加を追加
Ｇ線上のアリア
プレリュード＿＿＿＿ を選択
ポロネーズ
夢路より
ケンタッキーの我…

プレイリスト曲
プレリュード前に曲を追加後に曲を追加＿＿＿＿削除

ユースケース< UC12：プレイリストに曲を登録する>の相互作用を示します。これは、上記のように、(i) プレイリスト編集メニューでプレイリストを選択し、プレイリストメニューを表示させる、(ii) プレイ
リストメニューで曲一覧を選択し、プレイリスト曲一覧メニューを表示させる、(iii) プレイリスト曲一覧メ
ニューで曲を選択し、プレイリスト曲メニューを表示させる、(iv) プレイリスト曲メニューで後に曲を追加を選択し、後に曲を追加メニューを表示させる、(v) 後に曲を追加メニューで曲を選択し、プレイリスト曲
一覧メニューへ戻る、を行う場合です。なお、各メニューでのカーソルの移動は省略します。選択の前に該当項目へカーソルを移動していると考えてください。

125

組込み分野のための UML モデル解説書

ユースケース<UC12 :プレイリストに曲を登録する>の相互作用
sd UC12 プレイ リストに曲を登録する
refUC12(i)プレイ リスト編集メニューでプレイ リストを選択し、プレイ リストメニューを表示させる

refUC12(ii)プレイ リストメニューで曲一覧を選択し、プレイ リスト曲一覧メニューを表示させる

refUC12(iii)プレイ リスト曲一覧メニューで曲を選択し、プレイ リスト曲メニューを表示させる

refUC12(iv)プレイ リスト曲メニューで後に曲を追加を選択し、後に曲を追加メニューを表示させる

refUC12(v)後に曲を追加メニューで曲を選択し、プレイ リスト曲一覧メニューへ戻る

図79「UC12(i)プレイリスト編集メニューでプレイリストを選択し、プレイリストメニューを表示させる」の相互作用
sd UC12(i)プレイ リスト編集メニューでプレイ リストを選択し、プレイ リストメニューを表...
:ユーザーインターフェース:プレイリスト編
集メニュー「プレイリスト」
フォルダ :フォルダ:プレイリストメニュー

バッハ :プレイリスト通知する(キーイベント)
中央キーを押下する(ユーザーインターフェース)
カーソル位置を取得する() :カーソル位置(a)
プレイリストを取得する(カーソル位置) :プレイリスト
(b)

:バッハ
インスタンスを取得する(バッハ) :プレイリストメニュー

メニューを切り替える(プレイリストメニュー)表示する(ユーザーインターフェース)
名前を取得する() :名前(c)(d)
表示する()

図80(a) ここ以前は、「リストメニューの基本的な相互作用」の「キー入力の共通処理」を参照してください。
付録：設計モデルの動的モデル

126

電子オルゴール(b) 「中央キーを押下する」メッセージを受け取ると、プレイリスト編集メニューは、カーソル位置から判断し、プレイリストメニューへ切り替えます(プレイリストメニューのインスタンスを取得し、ユーザー
インターフェースへプレイリストメニューに切り替えさせます)。プレイリストメニューのインスタンスを取得する際に、指定されたプレイリストを渡しておきます。
(c) 「メニューを切り替える」メッセージを受け取ると、ユーザーインターフェースは、現在のメニューを指定されたメニューに更新し、指定されたメニューに表示させます。
(d) 「表示する」メッセージを受け取ると、プレイリストメニューは、表示に必要な情報※を取得し、表示します。
※渡されたプレイリストから名前「UC12(ii)プレイリストメニューで曲一覧を選択し、プレイリスト曲一覧メニューを表示させる」の相互作用sd UC12(ii)プレイ リストメニューで曲一覧を選択し、プレイ リスト曲一覧メニューを表示させる:ユーザーインターフェース:プレイリストメ
ニュー:プレイリスト曲
一覧メニュー

バッハ :プレイリスト通知する(キーイベント)
中央キーを押下する(ユーザーインターフェース)
カーソル位置を取得する() :カーソル位置

(a)
(b)

インスタンスを取得する(バッハ) :プレイリスト曲一覧メニュー

メニューを切り替える(プレイリスト曲一覧メニュー)表示する(ユーザーインターフェース)
曲の一覧を取得する() :名前の並び
(c)

(d)

表示する()

図81(a) ここ以前は、「リストメニューの基本的な相互作用」の「キー入力の共通処理」を参照してください。
(b) 「中央キーを押下する」メッセージを受け取ると、プレイリストメニューは、カーソル位置から判断し、プレイリスト曲一覧メニューへ切り替えます(プレイリスト曲一覧メニューのインスタンスを取得し、ユーザーインターフェースへプレイリスト曲一覧メニューに切り替えさせます)。プレイリスト曲一覧メニューのインスタンスを取得する際に、プレイリストを渡しておきます。
(c) 「メニューを切り替える」メッセージを受け取ると、ユーザーインターフェースは、現在のメニューを指定されたメニューに更新し、指定されたメニューに表示させます。
(d) 「表示する」メッセージを受け取ると、プレイリスト曲一覧メニューは、表示に必要な情報※を取得し、表示します。
※渡されたプレイリストから曲の一覧

127

組込み分野のための UML モデル解説書「UC12(iii)プレイリスト曲一覧メニューで曲を選択し、プレイリスト曲メニューを表示させる」の相互作用sd UC12(iii)プレイ リスト曲一覧メニューで曲を選択し、プレイ リスト曲メニューを表示させる:ユーザーインターフェース:プレイリスト曲
一覧メニュー:プレイリスト曲
メニュー

バッハ :プレイリスト

プレリュード :曲通知する(キーイベント)
中央キーを押下する(ユーザーインターフェース)
カーソル位置を取得する() :カーソル位置

(a)
(b)

インスタンスを取得する(バッハ,カーソル位置) :プレイリスト曲メニュー

メニューを切り替える(プレイリスト曲メニュー)表示する(ユーザーインターフェース)
曲を取得する(カーソル位置) :曲
(c)

(d)

:プレリュード
名前を取得する() :名前表示する()

図82(a) ここ以前は、「リストメニューの基本的な相互作用」の「キー入力の共通処理」を参照してください。
(b) 「中央キーを押下する」メッセージを受け取ると、プレイリスト曲一覧メニューは、カーソル位置から判断し、プレイリスト曲メニューへ切り替えます(プレイリスト曲メニューのインスタンスを取得し、ユーザーインターフェースへプレイリスト曲メニューに切り替えさせます)。プレイリスト曲メニューのイ
ンスタンスを取得する際に、プレイリストとカーソル位置(何番目の曲)を渡しておきます。
(c) 「メニューを切り替える」メッセージを受け取ると、ユーザーインターフェースは、現在のメニューを指定されたメニューに更新し、指定されたメニューに表示させます。
(d) 「表示する」メッセージを受け取ると、プレイリスト曲メニューは、表示に必要な情報※を取得し、表示します。
※プレイリストから曲、曲から名前

付録：設計モデルの動的モデル

128電子オルゴール「UC12(iv)プレイリスト曲メニューで後に曲を追加を選択し、後に曲を追加メニューを表示させる」の相互作用
sd UC12(iv)プレイ リスト曲メニューで後に曲を追加を選択し、後に曲を追...
:ユーザーインターフェース:プレイリスト曲
メニュー:後に曲を追加
メニュー

:全曲目録

通知する(キーイベント)
中央キーを押下する(ユーザーインターフェース)
カーソル位置を取得する() :カーソル位置

(a)
(b)

インスタンスを取得する(バッハ,曲の位置) :後に曲を追加メニュー

メニューを切り替える(後に曲を追加メニュー)表示する(ユーザーインターフェース)(c)

全曲目録を取得する() :全曲目録
曲の一覧を取得する() :
名前の並び
(d)

表示する()

図83(a) ここ以前は、「リストメニューの基本的な相互作用」の「キー入力の共通処理」を参照してください。
(b) 「中央キーを押下する」メッセージを受け取ると、プレイリスト曲メニューは、カーソル位置から判断し、後に曲を追加メニューへ切り替えます(後に曲を追加メニューのインスタンスを取得し、ユーザーイ
ンターフェースへ後に曲を追加メニューに切り替えさせます)。
(c) 「メニューを切り替える」メッセージを受け取ると、ユーザーインターフェースは、現在のメニューを指定されたメニューに更新し、指定されたメニューに表示させます。
(d) 「表示する」メッセージを受け取ると、後に曲を追加メニューは、表示に必要な情報※を取得し、表示します。
※ユーザーインターフェースから全曲目録、全曲目録から曲の一覧

129

組込み分野のための UML モデル解説書「UC12(v)後に曲を追加メニューで曲を選択し、プレイリスト曲一覧メニューへ戻る」の相互作用
sd UC12(v)後に曲を追加メニューで曲を選択し、プレイ リスト曲一覧メニューへ戻る:ユーザーインターフェース:後に曲を追加
メニュー

:全曲目録

バッハ :プレイリスト:プレイリスト曲
一覧メニュー

通知する(キーイベント)
中央キーを押下する(ユーザーインターフェース)
カーソル位置を取得する() :カーソル位置(a)
曲を取得する(カーソル位置) :曲:プレリュード(b)
曲を登録する(プレリュード,曲の位置)
インスタンスを取得する(バッハ) :プレイリスト曲一覧メニュー
メニューを切り替える(プレイリスト曲一覧メニュー)表示する(ユーザーインターフェース)
曲の一覧を取得する() :名前の並び(c)表示する()(d)

図84(a) ここ以前は、「リストメニューの基本的な相互作用」の「キー入力の共通処理」を参照してください。
(b) 「中央キーを押下する」メッセージを受け取ると、後に曲を追加メニューは、カーソル位置から判断し、指定された曲をプレイリストへ登録し、プレイリスト曲一覧メニューへ切り替えます(プレイリスト曲一覧メニューのインスタンスを取得し、ユーザーインターフェースへプレイリスト曲一覧メニューに切り替えさせます)。
(c) 「メニューを切り替える」メッセージを受け取ると、ユーザーインターフェースは、現在のメニューを指定されたメニューに更新し、指定されたメニューに表示させます。
(d) 「表示する」メッセージを受け取ると、プレイリスト曲一覧メニューは、表示に必要な情報※を取得し、表示します。
※プレイリスト曲から曲の一覧

付録：設計モデルの動的モデル

130

電子オルゴールユースケース<UC18：曲調を登録する>
編集
編集
プレイリスト編集
曲追加・削除
曲調編集
曲調編集＿＿＿＿＿＿

曲調編集(i) 曲調編集
を選択

曲調編集
新規登録＿＿＿＿＿＿
曲調 1
曲調 2
曲調 3

曲調新規登録(ii) 新規登録
を選択

新規登録
調律：12 平均律＿＿
リヴァーブ：HALL
音量：15
決定
戻る

(iii) 調律を選択
曲調編集
曲調編集
新規登録＿＿＿＿＿＿
曲調 1
曲調 2
曲調 3
曲調 4

曲調新規登録の調律

曲調新規登録新規登録(v) 決定を選択

調律：純正律＿＿＿＿リヴァーブ：HALL
音量：15
決定
戻る

調律
(iv) 純正律を選択

12 平均律
純正律＿＿＿＿＿＿＿
ミーントーン

ユースケース< UC18：曲調を登録する>の相互作用を示します。これは、上記のように、(i) 編集メニューで曲調編集を選択し、曲調編集メニューを表示させる、(ii) 曲調編集メニューで新規登録を選択し、曲調新規登録メニューを表示させる、(iii) 曲調新規登録メニューで調律を選択し、曲調新規登録の調律メニュ
ーを表示させる、(iv) 曲調新規登録の調律メニューで純正律を選択し、曲調新規登録メニューへ戻る、(v)
曲調新規登録メニューで決定を選択し、曲調編集メニューへ戻る、を行う場合です。なお、各メニューでのカーソルの移動は省略します。選択の前に該当項目へカーソルを移動していると考えてください。

ユースケース<UC18：曲調を登録する>の相互作用
sd UC18 曲調を登録する
refUC18(i)編集メニューで曲調編集を選択し、曲調編集メニューを表示させる

ref
UC18(ii)曲調編集メニューで新規登録を選択し、曲調新規登録メニューを表示させる

ref
UC18(iii)曲調新規登録メニューで調律を選択し、曲調新規登録の調律メニューを表示させる

ref
UC18(iv)曲調新規登録の調律メニューで純正律を選択し、曲調新規登録メニューへ戻るref
UC18(v)曲調新規登録メニューで決定を選択し、曲調編集メニューへ戻る

図85

131

組込み分野のための UML モデル解説書「UC18(i)編集メニューで曲調編集を選択し、曲調編集メニューを表示させる」の相互作用
sd UC18(i)編集メニューで曲調編集を選択し、曲調編集メニューを表示させる:ユーザーインターフェース:編集メニュー

:曲調編集メニュー:曲調マネージャー

通知する(キーイベント)
中央キーを押下する(ユーザーインターフェース)
カーソル位置を取得する() :カーソル位置

(a)
(b)

インスタンスを取得する() :曲調編集メニュー
メニューを切り替える(曲調編集メニュー)表示する(ユーザーインターフェース)(c)

曲調マネージャーを取得する() :曲調マネージャー
曲調の一覧を取得する() :名前の並び(d)

メニューを設定する(名前の並び)表示する()

図86(a) ここ以前は、「リストメニューの基本的な相互作用」の「キー入力の共通処理」を参照してください。
(b) 「中央キーを押下する」メッセージを受け取ると、編集メニューは、カーソル位置から判断し、曲調編集メニューへ切り替えます(曲調編集メニューのインスタンスを取得し、ユーザーインターフェースへ曲
調編集メニューに切り替えさせます)。
(c) 「メニューを切り替える」メッセージを受け取ると、ユーザーインターフェースは、現在のメニューを曲調編集メニューに更新し、曲調編集メニューに表示させます。
(d) 「表示する」メッセージを受け取ると、曲調編集メニューは、表示に必要な情報※を取得し、表示します。
※ユーザーインターフェースから曲調マネージャー、曲調マネージャーから曲調の一覧

付録：設計モデルの動的モデル

132

電子オルゴール「UC18(ii)曲調編集メニューで新規登録を選択し、曲調新規登録メニューを表示させる」の相互作用
sd UC18(ii)曲調編集メニューで新規登録を選択し、曲調新規登録メニューを表示させる:ユーザーインターフェース:曲調編集メニュー:曲調新規登録メニュー:曲調マネージャー

通知する(キーイベント)
中央キーを押下する(ユーザーインターフェース)
カーソル位置を取得する() :カーソル位置(a)

曲調を生成する() :何番目の曲調(b)

生成する():曲調

インスタンスを取得する(曲調) :曲調新規登録メニュー

メニューを切り替える(曲調新規登録メニュー)表示する(ユーザーインターフェース)
調律を取得する() :調律
リヴァーブ種別を取得する() :リヴァーブ種別(c)(d)

音量を取得する() :音量
メニューを設定する(名前の並び)表示する()

図87(a) ここ以前は、「リストメニューの基本的な相互作用」の「キー入力の共通処理」を参照してください。
(b) 「中央キーを押下する」メッセージを受け取ると、編集メニューは、カーソル位置から判断し、曲調マネージャーに新しい曲調を生成させ、曲調新規登録メニューへ切り替えます(曲調新規登録メニューのイ
ンスタンスを取得し、ユーザーインターフェースへ曲調新規登録メニューに切り替えさせます)。曲調新規登録メニューのインスタンスを取得する際に、生成させた曲調を渡しておきます。
(c) 「メニューを切り替える」メッセージを受け取ると、ユーザーインターフェースは、現在のメニューを曲調新規登録メニューに更新し、曲調新規登録メニューに表示させます。
(d) 「表示する」メッセージを受け取ると、曲調新規登録メニューは、表示に必要な情報※を取得し、表示します。
※渡された曲調から調律/リヴァーブ種別/音量133

組込み分野のための UML モデル解説書「UC18(iii)曲調新規登録メニューで調律を選択し、曲調新規登録の調律メニューを表示させる」の相互作用sd UC18(iii)曲調新規登録メニューで調律を選択し、曲調新規登録の調律メニューを表示させる:ユーザーインターフェース:曲調新規登録メニュー:曲調新規登録の調律メニュー:曲調

通知する(キーイベント)
中央キーを押下する(ユーザーインターフェース)
カーソル位置を取得する() :カーソル位置(a)
インスタンスを取得する(曲調) :曲調新規登録の調律メニュー(b)

メニューを切り替える(曲調新規登録_調律メニュー)表示する(ユーザーインターフェース)
調律を取得する() :調律(c)

メニューを設定する(名前の並び)(b)

カーソル位置を設定する(カーソル位置)表示する()

図88(a) ここ以前は、「リストメニューの基本的な相互作用」の「キー入力の共通処理」を参照してください。
(b) 「中央キーを押下する」メッセージを受け取ると、曲調新規登録メニューは、カーソル位置から判断し、動作します。この場合は、調律の変更なので、曲調新規登録の調律メニューへ切り替えます(曲調新規登録の調律メニューのインスタンスを取得し、ユーザーインターフェースへ曲調新規登録の調律メニュー
へ切り替えさせます)。曲調新規登録の調律メニューのインスタンスを取得する際に、渡された曲調を渡しておきます。
(c) 「メニューを切り替える」メッセージを受け取ると、ユーザーインターフェースは、現在のメニューを曲調新規登録の調律メニューに更新し、曲調新規登録の調律メニューに表示させます。
(d) 「表示する」メッセージを受け取ると、曲調新規登録メニューは、表示に必要な情報※を取得し、表示します。
※渡された曲調から調律

付録：設計モデルの動的モデル

134

電子オルゴール「UC18(iv)曲調新規登録の調律メニューで純正律を選択し、曲調新規登録メニューへ戻る」の相互作用
sd UC18(iv)曲調新規登録の調律メニューで純正律を選択し、曲調新規登録メニューへ戻る:ユーザーインターフェース:曲調新規登録の調律メニュー:曲調新規登録メニュー:曲調通知する(キーイベント)
中央キーを押下する(ユーザーインターフェース)
カーソル位置を取得する() :カーソル位置

(a)
(b)

調律を設定する(純正律)
インスタンスを取得する(曲調) :曲調新規登録メニュー

メニューを切り替える(曲調新規登録メニュー)表示する(ユーザーインターフェース)
調律を取得する() :調律
リヴァーブ種別を取得する() :リヴァーブ種別

(c)
(d)

音量を取得する() :音量
メニューを設定する(名前の並び)表示する()

図89(a) ここ以前は、「リストメニューの基本的な相互作用」の「キー入力の共通処理」を参照してください。
(b) 「中央キーを押下する」メッセージを受け取ると、調律が決定されたので、曲調新規登録の調律メニュ
ーは、カーソル位置から判断し、調律を渡された曲調へ設定し、曲調新規登録メニューへ戻ります(曲調
新規登録メニューのインスタンスを取得し、ユーザーインターフェースへ曲調新規登録メニューに切り替えさせます)。曲調新規登録メニューのインスタンスを取得する際に、渡された曲調を返します。
(c) 「メニューを切り替える」メッセージを受け取ると、ユーザーインターフェースは、現在のメニューを曲調新規登録メニューに更新し、曲調新規登録メニューに表示させます。
(d) 「表示する」メッセージを受け取ると、曲調新規登録メニューは、表示に必要な情報※を取得し、表示します。
※渡された曲調から調律/リヴァーブ種別/音量135

組込み分野のための UML モデル解説書「UC18(v)曲調新規登録メニューで決定を選択し、曲調編集メニューへ戻る」の相互作用
sd UC18(v)曲調新規登録メニューで決定を選択し、曲調編集メニューへ戻る:ユーザーインターフェース:曲調新規登録メニュー:曲調編集メニュー:曲調マネージャー

通知する(キーイベント)
中央キーを押下する(ユーザーインターフェース)
カーソル位置を取得する() :カーソル位置

(a)
(b)

インスタンスを取得する() :曲調編集メニュー
メニューを切り替える(曲調編集メニュー)表示する(ユーザーインターフェース)(c)

曲調マネージャーを取得する() :曲調マネージャー
曲調の一覧を取得する() :名前の並びメニューを設定する(名前の並び)(d)表示する()

図90(a) ここ以前は、「リストメニューの基本的な相互作用」の「キー入力の共通処理」を参照してください。
(b) 「中央キーを押下する」メッセージを受け取ると、曲調新規登録メニューは、カーソル位置から判断し、動作します。この場合は、決定なので、曲調編集メニューへ切り替えます(曲調新規登録の調律メニューのインスタンスを取得し、ユーザーインターフェースへ曲調新規登録の調律メニューへ切り替えさせます)。なお、新規登録の曲調は、生成/登録済みなので、曲調については何もしません。
(c) 「メニューを切り替える」メッセージを受け取ると、ユーザーインターフェースは、現在のメニューを曲調編集メニューに更新し、曲調編集メニューに表示させます。
(d) 「表示する」メッセージを受け取ると、曲調編集メニューは、表示に必要な情報※を取得し、表示します。
※ユーザーインターフェースから曲調マネージャー、曲調マネージャーから曲調の一覧

付録：設計モデルの動的モデル

136

組込み分野のための UML モデル解説書「電子オルゴール」
初版発行 ２０１2 年（平成２4 年）5 月 17 日
発行者 UMTP, Japan
編 著 組込みモデリング部会
印刷
UMTP, Japan
東京都渋谷区代々木 1 丁目 22 番 1 号
http://www.umtp-japan.org/

Copyright(c)2012-2016 consortium for UML based Modeling Technologies Promotion All Rights Reserved