導入
Java言語が登場して間もない頃だったでしょうか。IT系の雑誌広告に大きく宣伝されているRational ROSEなる製品に関心を持ちました。何やらこのソフトウェアツールを用いると、
その後、
今回から数回に渡ってこのUMLの一部を紹介します。
展開
UMLとは
プログラミングを学習する方が基本的な図法として最初に習うのは
しかしながら、
そこで、
UMLに用意されている図の種類
UMLで用意されている図
- ユースケース図
- 相互作用図
(シーケンス図、 協調図) - 静的構造図
(クラス図、 オブジェクト図) - 振る舞い図
(ステートチャート図、 アクティビティ図) - 実装図
(コンポーネント図、 配置図)
それぞれの図に特徴と役目があり、
今回がユースケース図、
ちょっとした注意点
さて、
そのために用意する道具は大きめの紙と鉛筆で十分です。きれいな図を仕上げようと思わず、
ユースケース図とは
ユースケース図は、
ユースケース図と、
- ユースケース図:アクタとシステムのユースケースとの関係を示す図。
- ユースケース:システムによって実行される機能。
- システム:これから我々が取り扱う対象のこと。
- アクタ:ユースケースと直接相互作用する、システムの外側にある実体や役割。人とは限らないが、人を模した記号
「スティックマン」 を用いる。
参考文献
次にユースケース図の例を示します。学校と生徒の関係を、

ユースケース図とコード
例えばこんな事例を考えてみます。ある学生が自分の定期テストの合計点と平均点を計算し取得したいとします。この場合のアクタは学生で、

この場合、
なお当初、
ユースケース図をもとにsketchを作る
それではこのユースケース図をもとにsketchを書いてみます。
点数の入力のユースケースを実装する
まずは点数の入力です。アクタにあたるのが次のTestExUsecase.
のコードです。TestExUsecase.
内のtest
メソッド内で、
// 点数の入力のユースケースを実装する
Result r = new Result(); // 成績を保持するクラスResultのインスタンス
void setup(){
test();
}
void test(){
noLoop();
println("Test start.");
//ユースケース「点数の入力」
assert r.setJapanese(50) == 50 : "Error";
assert r.setMath(60) == 60 : "Error";
assert r.setSocial(70) == 70 : "Error";
assert r.setScience(80) == 80 : "Error";
assert r.setEnglish(90) == 90 : "Error";
println("Test done.");
}
テストの点数を保持するクラスをResult
とし、Result.
とします。sketch TestExUsecase.
とResult.
はフォルダTestExUsecase
に納めてください。
Result.pde
class Result{
private int japanese = 0;
private int math = 0;
private int social = 0;
private int science = 0;
private int english = 0;
public int setJapanese(int j){
japanese = j;
return j;
}
public int getJapanese(){
return japanese;
}
public int setMath(int m){
math = m;
return m;
}
public int getMath(){
return math;
}
public int setSocial(int v){
social = v;
return v;
}
public int getSocial(){
return social;
}
public int setScience(int v){
science = v;
return v;
}
public int getScience(){
return science;
}
public int setEnglish(int e){
english = e;
return e;
}
public int getEnglish(){
return english;
}
}
Result
では、
合計点の取得のユースケースを実装する
合計点を取得するユースケースの実装を行います。合計点を取得するユースケースを、<<uses>>
という関係を持っていると表現できます。

sketchは次のTestExUsecase2.
のようになります。このスケッチで使用するクラスResult
はTestExUsecase.
に使用したものと同じです。sketchフォルダTestExUsecase2
内にResult.
のコピーを置いてください。
TestExUsecase2.pde
// 合計点の取得のユースケースを実装する
Result r = new Result(); // 成績を保持するクラスResultのインスタンス
void setup(){
test();
}
void test(){
noLoop();
println("Test start.");
//ユースケース「点数を入力する」
setResults();
//ユースケース「合計点を取得する」
int sum = r.getJapanese() + r.getMath() + r.getSocial()
+ r.getScience() + r.getEnglish();
assert sum == 350 : "Error";
println("Test done.");
}
void setResults(){
assert r.setJapanese(50) == 50 : "Error";
assert r.setMath(60) == 60 : "Error";
assert r.setSocial(70) == 70 : "Error";
assert r.setScience(80) == 80 : "Error";
assert r.setEnglish(90) == 90 : "Error";
}
平均点の取得のユースケースを実装する
平均点の取得のユースケースを実装したsketch TestExUsecase3.
を次に示します。このスケッチで使用するクラスResult
はTestExUsecase.
に使用したものと同じです。sketchフォルダTestExUsecase3
内にResult.
のコピーを置いてください。
TestExUsecase3.pde
// 平均点の取得のユースケースを実装する
Result r = new Result(); // 成績を保持するクラスResultのインスタンス
void setup(){
test();
}
void test(){
noLoop();
println("Test start.");
//ユースケース「点数を入力する」
setResults();
//ユースケース「合計点を取得する」
getSum();
//ユースケース「平均点を取得する」
float average = ( r.getJapanese() + r.getMath() + r.getSocial()
+ r.getScience() + r.getEnglish() ) / 5;
assert average == 350/5 : "Error";
println("Test done.");
}
void setResults(){
assert r.setJapanese(50) == 50 : "Error";
assert r.setMath(60) == 60 : "Error";
assert r.setSocial(70) == 70 : "Error";
assert r.setScience(80) == 80 : "Error";
assert r.setEnglish(90) == 90 : "Error";
}
void getSum(){
int sum = r.getJapanese() + r.getMath() + r.getSocial()
+ r.getScience() + r.getEnglish();
assert sum == 350 : "Error";
}
ユースケース図を描きながらコーディングしよう
今回のような大変単純なコーディングをする際にユースケース図を几帳面に描くのは無駄な作業のように感じられるかもしれません。しかしながら、
演習
演習1(難易度:easy)
合計点と平均点はテストの結果の一部と考えることができます。そう考えるならばこれらはクラスResult
に組み込むべきです。クラスResult
にgetSum
メソッドとgetAverage
メソッドを実装しましょう。Result
クラスのインスタンスを持ち、TestExUsecase4.
としてください。Result
クラスのファイル名はそのままResult.
としましょう。
演習2(難易度:easy)
テレビのユースケース図を描きましょう。このテレビはとても単純で、
まとめ
- ユースケース図の描き方、
使い方を学びました。 - ユースケース図を描くことで、
問題を整理し、 多面的に考えることができます。
学習の確認
それぞれの項目で、
- ユースケース図とは何かが理解できましたか?
- 理解できた。気持ちよく納得した。
- 理解できた。しかし、
今ひとつスッキリしない。 - 理解できない。
- ユースケース図のメリットが理解できましたか?
- 理解できた。気持ちよく納得した。
- 理解できた。しかし、
今ひとつスッキリしない。 - 理解できない。
参考文献
- 『これだけでわかる!初歩のUMLモデリング―基礎から各種テクニックまで第一人者が伝授!! (@ITハイブックス)』
(萩本順三 著、 技術評論社) - UML入門の良書。絶版であるのが残念。古書をあたってください。
- 『オブジェクトモデリング表記法ガイド―例題で学ぶUML』
(MISCOオブジェクト指向研究会 編著、 今野睦 監修、 プレンティスホール出版) - 私はUMLをこの書籍で学びました。大変分かりやすく記述されています。同じく絶版本。更に出版社は既に無いようです。これもよろしければ古書をあたってください。
演習解答
- 以下のファイルをsketchフォルダ
TestExUsecase4
に納めます。 - 私にとって最低限必要な機能を持ったテレビのユースケース図を次に示します。皆さんはどんなユースケースを考えたでしょうか。
