ここから本文です

最後に質問させてください. http://note.chiebukuro.yahoo.co.jp/detail/n373872 ...

michimikochiさん

2016/1/2717:45:36

最後に質問させてください.
http://note.chiebukuro.yahoo.co.jp/detail/n373872
で作成していただいたプログラムの中で

void abstreat_machine()を作成して
PlantUMLtxtを抽象化していただきたいです.

抽象化の説明をさせていただきます.
抽象化モデルは仕様に対する関連要素と関連要素間の遷移によって
作成されます.関連要素は与えられた要求仕様に対して影響を与える
状態,メッセージ,変数と定義します.また,関連要素に影響を与える要素も
間接的に仕様に影響を与えるため関連要素であると定義できます.
関連要素の判定は入力された状態マシン図の遷移に着目して
定めることができます.状態に対しての関連要素はその状態を
遷移先とする遷移に,メッセージに対しての関連要素はそのメッセージを
アクションに含む遷移に,変数に対しての関連要素はその変数を
アクションの左辺に持つ遷移にそれぞれ着目し,その遷移に記述されている
アクション,ガードにある変数,遷移元の状態であると定義します.

例として,図1に示す状態マシン図に対して仕様としてsafe(S2)が
与えられたときの,関連要素の抽出について示します.
仕様として与えられた要素はS2です.S2は状態であるので,
S2を遷移先とする遷移に着目し,遷移元の状態であるS1は
関連要素となります.次に,S1の関連要素を求めます.
S1もS2と同様に状態であるので,S1を遷移先とする遷移に
変数bは関連要素となります.上記のように仕様と関連する
要素を再帰的に求めていきます.図2に,仕様safe(S2)と
関連する要素のみを抽出して得られた状態マシン図を
示します.
PlantUMLtxtで記述すると
@startuml{stm M1.png}

[*] -> S1
S1 -> S2 : a
S2 -> S1 : [b==0]
S2 -> S3
S3 --> [*]

@enduml

@startuml{stm M2.png}

[*] -> S4
S4 -> S5 : /a
S5 -> S4 : /b=0

@enduml
抽象化前のPlantUMLtxt
@startuml{stm M1.png}

[*] -> S1
S1 -> S2 : a
S2 -> S1 : [b==0]

@enduml

@startuml{stm M2.png}

[*] -> S4
S4 -> S5 : /a
S5 -> S4 : /b=0

@enduml
抽象化後の状態マシン図
となります.
次にテンプレートを用いて与えられた仕様に対して
関連要素を抽出するアルゴリズムを記述します.
以下は関連要素抽出アルゴリズムの擬似コードです.
input e; //求める仕様
output set C(e),X; //仕様に関連する要素の集合と遷移

X={};
C(e)={e}; //最初はe自身のみとする
Checked={};

do{
e=∈C(e)-Checked;
T={};
if(e is state){ //eが状態の場合
for(全ての遷移に対して){
if(tの遷移先がe)
add(T,t) //Tにtを加える
}
}
if(e is message){ //eがメッセージの場合
for(全ての遷移に対して){
if(tの遷移先がe)
add(T,t) //Tにtを加える
}
}
if(e is message){ //eが変数の場合
for(全ての遷移に対して){
if(tの遷移先がe)
add(T,t) //Tにtを加える
}
}
for(t<-T){
add(C(e),tのアクション) //遷移tのアクションをC(e)に追加
add(C(e),tのガードにある変数) //遷移tのガードにある変数をC(e)に追加
add(C(e),tの元の状態) //遷移tの元の状態をC(e)に追加
}
add(Checked,e) //Checkedにeを追加
X=X+T;
}until(C(e)==Checked)

これらのことをC++で行いたいです.
どうかよろしくお願いします.

補足@startuml{stm M3.png}

[*] -> S1
S1 -> S2 : /x=j この遷移はt1
S2 -> S1 : /j=i+1 この遷移はt2
S2 -> S3
S3 --> [*]

@enduml

@startuml{stm M4.png}

[*] -> S4
S4 -> S5 この遷移はt3
S5 -> S4 : /i=1 この遷移はt4

@enduml
状態マシン図のPlantUMLtxt
下記は上記をそれぞれ抽出した状態マシン図のPlantUMLtxt
@startuml{stm M3.png}

[*] -> S1
S1 -> S2 : /x=j この遷移はt1
S2 -> S1 : /j=i+1 この遷移はt2

@enduml

@startuml{stm M4.png}

[*] -> S4
S4 -> S5 この遷移はt3
S5 -> S4 : /i=1 この遷移はt4

@enduml
例として状態マシン図に対してreachable(S2)が
与えられたときの擬似コードの動きについて述べます.
例では,求める仕様はreachable(S2)であるのでeは
状態S2となります.したがって,初期状態はe=S2,X={},C(e)={2},
Checked={}となります.eは状態であるので,遷移先がeとなるt1を
Tに加えます.C(e)には,遷移t1の要素,Checkedにはe,XにはTを
加えます.ここでe=S2,X={t1},C(e)={S2,S1,j},Checked={S2}となり,
C(e)!=Checkedのための処理を続けます.
eはC(e)==Checkedを除いた要素{S1,j}のどちらかに更新されます.
以下C(e)==Checkedになるまで上記の処理を関連要素が抽出されます.

startuml,enduml,PlantUMLtxt,stm M1.png,stm M2.png,stm M4.png,stm M3.png

この質問は、trekfareastさんに回答をリクエストしました。

閲覧数:
122
回答数:
1
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

trekfareastさん

リクエストマッチ

2016/1/2801:08:20

今仕様を解析中ですが…他事もしてますので時間がかかりそうです。
(^_^;

------------------------------------------------------------
Q1.「メッセージ」という単語が出てきますがこれはPlantUML.txtの何を指していますか?
------------------------------------------------------------
Q2. 前の質問で遷移にID(T1,T2...)を自動で振るようにしましたが、質問にあるt1~t4のようにIDを振らないといけないのですか?

@startuml{stm M3.png}

[*] -> S1
S1 -> S2 : /x=j この遷移はt1←★これ(Q2)
S2 -> S1 : /j=i+1 この遷移はt2
S2 -> S3
S3 --> [*]

@enduml

@startuml{stm M4.png}

[*] -> S4
S4 -> S5 この遷移はt3
S5 -> S4 : /i=1 この遷移はt4

@enduml
------------------------------------------------------------
Q3.@startuml{stm M3.png}と@startuml{stm M4.png}は、1つのファイルですか?それとも別ファイルですか?
------------------------------------------------------------
Q4.ガードやアクションの変数を認識する必要がありますが、「変数はアルファベットの組み合わせのみ」で良いですか?

良ければ
「/abc=def+1」 等をアルファベット以外を空白に変換すれば、
「_abc_def__」(_は半角スペースとする)のようにスペース区切りになり、簡単に変数名を取り出すことができます。
------------------------------------------------------------
とりあえず今はこのくらいです。
(^_^;

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2016/2/2 01:13:03

ありがとうございました.
どうかもう一度回答のほうを
お願いいたします.

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

[PR]お得情報

日本最大級のお試しサイト!
1700円相当の商品が864円で試せる♪
先着順のため、お早めに!(モラタメ)
年会費永年無料!Yahoo! JAPANカード
最短2分でTポイント3,000ptプレゼント
≪期間限定≫2/29(月)11:59まで!

その他のキャンペーン

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。