導入
プログラミングを学び始めた人が最初に習う図法は,
展開
シーケンス図とは
シーケンス図と,
- シーケンス図:複数のオブジェクトの生死を縦の平行線で示し,
相互作用を水平の矢印で示した図。 - オブジェクト:ここでのオブジェクトとは,
主にソフトウェア実行時に生成されたクラスの実体のこと。
上部のスティックマンや矩形がオブジェクトを表します。オブジェクトから下に伸びる線がオブジェクトの生死を時系列で表すためのものです。破線の時はオブジェクトが生成されていない,
例えばオブジェクトAはソフトウェアの実行中ずっと存在するオブジェクトです。実行しているソフトウェアそのものであるときもあります。オブジェクトBはAが生成したオブジェクトです。オブジェクトCはBによって生成され,C1がBから呼ばれている様子を図示しています。
UMLの規定では,
細かく言えば,
- 同期処理:命令Aが実行されると,
Aの実行が完了するまで次の命令Bを実行しないような仕組み。 - 非同期処理:命令Aの実行が開始した後,
Aの完了を待たずに次の命令Bが実行できるような仕組み。
先ほどの例では,C1を呼び出しています。C1は同期メソッドで,B1を実行して,
Bが仕事をしている間,A1,A2というメソッドを実行しています。その後ユーザからメソッドA3を実行する要請を受けてA3を実行しました。メソッドA1,A2,A3はオブジェクトBやCに対して非同期のメソッドであると言えます。
以上がこのシーケンス図の表現した動作です。
sketchをシーケンス図で表現する
次のskecthをシーケンス図で表現してみます。
ArrayList<Bubble> a = new ArrayList();
void setup(){
background(0);
}
void draw(){
background(0);
Bubble b = new Bubble();
a.add(b);
for(Bubble o : a){
o.show();
}
delay(500);
if (a.size() > 2) a.remove(0);
}class Bubble{
int x;
int y;
int r;
public Bubble(){
x = (int) random(100);
y = (int) random(100);
r = (int) random(20);
}
public void show(){
ellipse(x,y,r,r);
}
}かなり大まかに描いたシーケンス図ですが,
ステートチャート図(状態遷移図)とは
ステートチャート図と,
- ステートチャート図:外部からか,
内部からかのアクションによって, システムの状態が変化するさまを図示します。
このステートチャート図では,
このステートチャート図をsketchにしてみます。
boolean isDrawMode = false;
color ViewModeColor = color(0,255,0);
color DrawModeColor = color(255,255,255);
color CurrentModeColor = ViewModeColor;
void setup(){
background(CurrentModeColor);
}
void draw(){
background(CurrentModeColor);
}
void mouseClicked() {
if (isDrawMode == false) {
isDrawMode = true;
CurrentModeColor = DrawModeColor;
} else {
isDrawMode = false;
CurrentModeColor = ViewModeColor;
}
}
void keyPressed() {
if (keyCode == 'q' || keyCode == 'Q') {
exit();
}
}sketchExStateChartDiagram.pdeを実行すると,qまたはQのキーが押下されるとsketchが終了します。確かにステートチャート図通りの動きをしています。これだけの動作なら,drawメソッドのフローチャート,mouseClickedメソッドのフローチャート,keyPressedメソッドのフローチャートと……,