最後に質問させてください. http://note.chiebukuro.yahoo.co.jp/detail/n373872 ...
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になるまで上記の処理を関連要素が抽出されます.
この質問は、trekfareastさんに回答をリクエストしました。
- 閲覧数:
- 122
- 回答数:
- 1
- お礼:
- 500枚
ベストアンサーに選ばれた回答
リクエストマッチ
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__」(_は半角スペースとする)のようにスペース区切りになり、簡単に変数名を取り出すことができます。
------------------------------------------------------------
とりあえず今はこのくらいです。
(^_^;
-
この返信は取り消されました。
返信を取り消しますが
よろしいですか?
- 取り消す
- キャンセル
あわせて知りたい
- たびたび申し訳ありません. C++で作成していただいたhttp://note.chiebukuro.yah...
- C言語について質問です. #include <stdio.h> #include <string.h> #include <s...
- mugenで前はキャラが使用できたのにエラーが出て使えません。 エラー文はこん...
- C言語についての質問です 学び始めて浅く、どうしてもわからないことがあったの...
- MT4で枠外に行ってしまったツールバーはどうやったら復活出来ますか?
- 先日ガソリンスタンドでバッテリーを 点検してもらったら、『比重が下がってい...
- FX MT4 テキストオブジェクトについて こんにちは、現在オブジェクトの作成の...
- EA開発初心者です。EAを自力で開発し運用中です。 先日、取引証拠金を追加・入...
- ユーロとスイスフランとの関係で、 ユーロが対スイスフランで安くなりすぎると、...
- C++についてです。 ダイアログで、同様な処理(ダイアログに配列の値を入れる)...
- FX MT4 OrderHisotryを逆から表示するには みなさん、おはようございます。現...
- C言語プログラムでMallocに失敗します。 visualstudio2005のスタック領域設定を...
- MT4インジケーターPeriod_Converter_OptMirror.mq4を表示したいのですが、ダウン...
- ドリームキャストに詳しい方質問です。 電源ONしたら写メのような状態になります...
- 私はダメな人です。 大好きな信頼した彼氏がいます。 彼は精神的に弱い私を助...
- MT4のチャートで、現在の値に水平線を連動させて動かしているのを見たことがあ...
- これからC言語を勉強しようと思うのですが、本当に初心者なので使う開発環境でど...
- 甘デジの悪魔城ドラキュラって、129分の1なのに初当たり重たくないでちか? ...
- 不眠症で悩んでおります。病院で診察も検討しているのですが何科を受診すればよい...
- 「致しかねます」 「致しかねません」の 違い ・・・
この質問につけられたタグ
専門家が解決した質問
-
小学1から3年生60人でできる室内ゲームって何がありますか? 普段5、6人のグループになっているのでグループ対戦の奴でも大丈夫です。 じゃんけん列車 新聞ゲ...
はじめまして。元小学校で教師をしていました。 小学1年生から3年生までの60名のお子さんが参加できるゲームですね。 大勢なので場所は...
- 鈴木あづみ
- 教師
-
現場監督さんに質問です。 鉄筋に継手の検査の事で教えてください。 質問1 民間工事でD19以上の継手の検査は通常超音波試験で 行っていますか? それとも...
建築設計・ホームインスペクション(住宅診断・住宅検査)を行っている建築士の鈴木です。現場監督経験はありませんが、公共・民間建築...
- 鈴木 賢
- ホームインスペクター
気になる人がいます
回答受付中の質問
カテゴリQ&Aランキング
- 戻る
- 次へ
総合Q&Aランキング
みんなのお悩み相談室
みんなのアンテナ
Yahoo!知恵袋カテゴリ
お客様自身の責任と判断で、ご利用ください。
[PR]お得情報