ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
それにしてもあれから全くコメント付かないなあ。
まあ他の作品もそうなので気にするほどの事でもないのですが。
締め切り早かった意味があまりないように思います。
それはさておき今回はシーケンス図の話をします。
astah* communityを起動して図→シーケンス図を選択してください。
とりあえずライフラインを2つ追加してください。
ライフラインは使用するオブジェクトを表現するとからしいです。
次にメッセージボタンを選択後ライフラインを選択してメッセージを作成してください。
この際表示される四角形は実行指定という名前らしいです。
生成したメッセージを選択すれば、左下のウィジェットから引数等を設定できます。
戻り値変数 = 名前(引数):戻り値
と表記されるみたいです。
ちなみに破線の矢印は同期メッセージで呼び出された処理が終了した事を表現しています。
上のメッセージとの違いが分かりづらいですが、以下の矢印の場合非同期メッセージになります。
ちなみに以下の矢印は同期メッセージです。
同期メッセージはライフライン2(送信先のライフライン)の処理が完了するまでライフライン1(送信元のライフライン)の処理は待機します。
一方、非同期メッセージはライフライン2の処理の完了を待つことはありません。
さらに生成メッセージは以下のように表現します。
生成メッセージを送信することにより、新たにオブジェクトを生成します。
破棄メッセージは以下のように表現します。
これにより送信先のオブジェクトを破棄します。
自分自身の内部処理等を呼び出す場合は以下のように表現します。
非同期メッセージ、生成メッセージ、破棄メッセージ、同期メッセージの戻りを生成する場合は以下のボタンから選択後、ライフラインを選択してください。
別のダイアグラムの相互作用を参照する場合は以下のように表現するらしいです。
ちなみにシーケンス図3は以下のようになっています。
追加する場合は相互作用の利用ボタンを選択後、適当な大きさを設定してください。
さらに作成した要素を選択して、左下のウィジェットから設定してください。
複合フラグメントボタンを選択後、適当な大きさを設定することで複合フラグメントを作成できます。
上の図のopt(オプト)はガード条件を満たす場合に相互作用を実行します。
設定は複合フラグメントを選択して左下のウィジェットから設定してください。
以下のようにalt(オルタナティブ)に設定するとガード条件によって分岐します。
ガード条件は左下のウィジェットのオペランドタブで追加してください。
以下のようにloop(ループ)を設定することで繰り返し処理を表現できます。
以下のようにpar(パラレル)とすることで複数のメッセージの並行した送受信を表現できます。
以下のようにcritical(クリティカル領域)とすることで、他の処理からの割り込みを許可しない事を表現できます。
以下のようにseq(弱シーケンス)とするとメッセージを送信する順番に関する制約が弱く、strict(強シーケンス)とすると制約が強くなるらしいですが、具体的にどういう違いが生じるのかあまり理解できていません。
以下のようにbreak(ブレイク)と設定することでbreakの複合フラグメントを含む複合フラグメントを中断できます。
以下のようにneg(否定)とした場合は正常に動作できないかもしれない事を表現しているらしいです。
つまり、negに設定しても動作自体には何の影響もないということでしょうかね?
以下のようにignore(無効)とすると、あるメッセージの送受信を一時的に行わないことを表現できます。
この場合、メッセージ11の送受信を行わないという事でしょうかね?
consider(有効)とする事で、あるメッセージの送受信のみ行うという事を表現できるとからしいです。
この場合、メッセージ11以外のメッセージは送受信しないということになるとかならないとからしいです。
assert(アサーション)に設定すると、処理の流れをテストすると言う事を表現できるとからしいです。
今日はこのぐらいにしておきます。
明日はコンポーネント図をやります。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
まあ他の作品もそうなので気にするほどの事でもないのですが。
締め切り早かった意味があまりないように思います。
それはさておき今回はシーケンス図の話をします。
astah* communityを起動して図→シーケンス図を選択してください。
とりあえずライフラインを2つ追加してください。
ライフラインは使用するオブジェクトを表現するとからしいです。
次にメッセージボタンを選択後ライフラインを選択してメッセージを作成してください。
この際表示される四角形は実行指定という名前らしいです。
生成したメッセージを選択すれば、左下のウィジェットから引数等を設定できます。
戻り値変数 = 名前(引数):戻り値
と表記されるみたいです。
ちなみに破線の矢印は同期メッセージで呼び出された処理が終了した事を表現しています。
上のメッセージとの違いが分かりづらいですが、以下の矢印の場合非同期メッセージになります。
ちなみに以下の矢印は同期メッセージです。
同期メッセージはライフライン2(送信先のライフライン)の処理が完了するまでライフライン1(送信元のライフライン)の処理は待機します。
一方、非同期メッセージはライフライン2の処理の完了を待つことはありません。
さらに生成メッセージは以下のように表現します。
生成メッセージを送信することにより、新たにオブジェクトを生成します。
破棄メッセージは以下のように表現します。
これにより送信先のオブジェクトを破棄します。
自分自身の内部処理等を呼び出す場合は以下のように表現します。
非同期メッセージ、生成メッセージ、破棄メッセージ、同期メッセージの戻りを生成する場合は以下のボタンから選択後、ライフラインを選択してください。
別のダイアグラムの相互作用を参照する場合は以下のように表現するらしいです。
ちなみにシーケンス図3は以下のようになっています。
追加する場合は相互作用の利用ボタンを選択後、適当な大きさを設定してください。
さらに作成した要素を選択して、左下のウィジェットから設定してください。
複合フラグメントボタンを選択後、適当な大きさを設定することで複合フラグメントを作成できます。
上の図のopt(オプト)はガード条件を満たす場合に相互作用を実行します。
設定は複合フラグメントを選択して左下のウィジェットから設定してください。
以下のようにalt(オルタナティブ)に設定するとガード条件によって分岐します。
ガード条件は左下のウィジェットのオペランドタブで追加してください。
以下のようにloop(ループ)を設定することで繰り返し処理を表現できます。
以下のようにpar(パラレル)とすることで複数のメッセージの並行した送受信を表現できます。
以下のようにcritical(クリティカル領域)とすることで、他の処理からの割り込みを許可しない事を表現できます。
以下のようにseq(弱シーケンス)とするとメッセージを送信する順番に関する制約が弱く、strict(強シーケンス)とすると制約が強くなるらしいですが、具体的にどういう違いが生じるのかあまり理解できていません。
以下のようにbreak(ブレイク)と設定することでbreakの複合フラグメントを含む複合フラグメントを中断できます。
以下のようにneg(否定)とした場合は正常に動作できないかもしれない事を表現しているらしいです。
つまり、negに設定しても動作自体には何の影響もないということでしょうかね?
以下のようにignore(無効)とすると、あるメッセージの送受信を一時的に行わないことを表現できます。
この場合、メッセージ11の送受信を行わないという事でしょうかね?
consider(有効)とする事で、あるメッセージの送受信のみ行うという事を表現できるとからしいです。
この場合、メッセージ11以外のメッセージは送受信しないということになるとかならないとからしいです。
assert(アサーション)に設定すると、処理の流れをテストすると言う事を表現できるとからしいです。
今日はこのぐらいにしておきます。
明日はコンポーネント図をやります。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
PR
今回はパッケージ図の話をします。
astah* communityを起動して図→クラス図を選択してください。
適当にパッケージを追加してください。
まずは入れ子構造を定義してみます。
以下のようにネスト接続するかパッケージを含んで表現する方法があります。
入れ子構造にすることでパッケージをグループ化できるとからしいです。
依存ボタンを選択後、パッケージを選択することで依存を定義できます。
この場合はパッケージ0がパッケージ2に依存しており、パッケージ2を利用していると言う事らしいです。
なんだかあまり書くこともないようなので構造設計時のダイアグラムについて書いておきます。
以下のダイアグラムがあるらしいです。
コンポジット構造図はクラス等の内部構造を表現するとからしいです。
正直なところ、パッケージ図、コンポーネント図、クラス図の明確な違いがよくわからないのですが、粒度としてはパッケージ>コンポーネント>クラスとなるらしいです。
Javaとかでもクラスをパッケージにまとめる事ができますが、そういう事をするという解釈でいいのでしょうかね?
となるとコンポーネントは一体何を表現しているのでしょうね?
wikipediaでコンポーネント図を調べてみると、「ファイル、ヘッダ、ライブラリ、モジュール、実行可能ファイルやパッケージなど」とからしいです。
クラスやパッケージと明確な区別があるようには思えないのですが、どういう違いなのか詳しい人がいれば教えてください。
今日はこのぐらいにしておきます。
明日はシーケンス図をやります。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
astah* communityを起動して図→クラス図を選択してください。
適当にパッケージを追加してください。
まずは入れ子構造を定義してみます。
以下のようにネスト接続するかパッケージを含んで表現する方法があります。
入れ子構造にすることでパッケージをグループ化できるとからしいです。
依存ボタンを選択後、パッケージを選択することで依存を定義できます。
この場合はパッケージ0がパッケージ2に依存しており、パッケージ2を利用していると言う事らしいです。
なんだかあまり書くこともないようなので構造設計時のダイアグラムについて書いておきます。
以下のダイアグラムがあるらしいです。
- パッケージ図
- コンポーネント図
- コンポジット構造図
- クラス図
- オブジェクト図
コンポジット構造図はクラス等の内部構造を表現するとからしいです。
正直なところ、パッケージ図、コンポーネント図、クラス図の明確な違いがよくわからないのですが、粒度としてはパッケージ>コンポーネント>クラスとなるらしいです。
Javaとかでもクラスをパッケージにまとめる事ができますが、そういう事をするという解釈でいいのでしょうかね?
となるとコンポーネントは一体何を表現しているのでしょうね?
wikipediaでコンポーネント図を調べてみると、「ファイル、ヘッダ、ライブラリ、モジュール、実行可能ファイルやパッケージなど」とからしいです。
クラスやパッケージと明確な区別があるようには思えないのですが、どういう違いなのか詳しい人がいれば教えてください。
今日はこのぐらいにしておきます。
明日はシーケンス図をやります。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
今回はクラス図の話をします。
astah* communityを起動して図→クラス図を選択してください。
とりあえず適当にクラスを追加してみます。
次に黄色のひし形のマークをクリックすると属性が追加されます。
また、クラスを選択して左下の操作ウィジェットからも追加できます。
追加した属性をクリックすると以下のウィジェットから設定できるようになると思うので、適当に設定してみます。
可視性は上の設定ウインドウではわかりやすいですが、クラス図では以下のように+がpublic、-がprivate、#がproctected、~がpackageとなるので覚えておきましょう。
正直よくわからないのですけど、以下のように接続することで関連を定義できるらしいです。
他のクラスの属性として保持するなり何らかのつながりさえあれば関連を定義できるということでしょうかね?
さらに以下のように多重度を設定すると、クラス0がクラス1を属性として保持する場合にクラス1のオブジェクトをいくつ保持できるかを表現しているとかそうではないとからしいです。
つまりこの場合、1..*は1以上のオブジェクトを保持しているということを表しているという解釈で合っているのでしょうか?
C++等で実装する場合はvectorとかlistとかを使うという事だとは思いますが、よくわかりません。
汎化ボタンを選択後、クラスを選択することで汎化を定義できます。
この場合、クラス0は抽象的なスーパークラス、クラス2は具体的なサブクラスになるらしいです。
C++等で実装する場合はクラス2がクラス0を継承するという解釈でいいのですかね?
集約ボタンを選択後クラスを選択することで集約を定義できます。
この場合、クラス1はクラス4の一部になるとかならないとからしいです。
コンポジションボタンを選択後クラスを選択することでコンポジションを定義できます。
この場合もクラス1はクラス4の一部になるとからしいですけど、コンポジションの場合はクラス4(全体側)が終了するとクラス1(部分側)も終了します。
集約の場合はクラス4が終了してもクラス1は存在し続けるとからしいです。
依存ボタンを選択後、クラスを選択することで依存を定義できます。
この場合、クラス0がクラス1に依存しているということだとは思います。
関連との違いが今一わからないのですが、他のクラスの操作を呼び出す場合等に使うらしいです。
今日はこのぐらいにしておきます。
明日はパッケージ図をやります。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
astah* communityを起動して図→クラス図を選択してください。
とりあえず適当にクラスを追加してみます。
次に黄色のひし形のマークをクリックすると属性が追加されます。
また、クラスを選択して左下の操作ウィジェットからも追加できます。
追加した属性をクリックすると以下のウィジェットから設定できるようになると思うので、適当に設定してみます。
可視性は上の設定ウインドウではわかりやすいですが、クラス図では以下のように+がpublic、-がprivate、#がproctected、~がpackageとなるので覚えておきましょう。
正直よくわからないのですけど、以下のように接続することで関連を定義できるらしいです。
他のクラスの属性として保持するなり何らかのつながりさえあれば関連を定義できるということでしょうかね?
さらに以下のように多重度を設定すると、クラス0がクラス1を属性として保持する場合にクラス1のオブジェクトをいくつ保持できるかを表現しているとかそうではないとからしいです。
つまりこの場合、1..*は1以上のオブジェクトを保持しているということを表しているという解釈で合っているのでしょうか?
C++等で実装する場合はvectorとかlistとかを使うという事だとは思いますが、よくわかりません。
汎化ボタンを選択後、クラスを選択することで汎化を定義できます。
この場合、クラス0は抽象的なスーパークラス、クラス2は具体的なサブクラスになるらしいです。
C++等で実装する場合はクラス2がクラス0を継承するという解釈でいいのですかね?
集約ボタンを選択後クラスを選択することで集約を定義できます。
この場合、クラス1はクラス4の一部になるとかならないとからしいです。
コンポジションボタンを選択後クラスを選択することでコンポジションを定義できます。
この場合もクラス1はクラス4の一部になるとからしいですけど、コンポジションの場合はクラス4(全体側)が終了するとクラス1(部分側)も終了します。
集約の場合はクラス4が終了してもクラス1は存在し続けるとからしいです。
依存ボタンを選択後、クラスを選択することで依存を定義できます。
この場合、クラス0がクラス1に依存しているということだとは思います。
関連との違いが今一わからないのですが、他のクラスの操作を呼び出す場合等に使うらしいです。
今日はこのぐらいにしておきます。
明日はパッケージ図をやります。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
書くことないなあ。
仕方ないのでUMLの話でもします。
僕もよくわからないのでUMLとRTミドルウェアによるモデルベースロボットシステム開発を読みながら書きます。
まずは、このページからastah* communityをダウンロードしてください。
最初はアクティビティ図から作ってみます。
図→アクティビティ図を選択してください。
とりあえず使いそうな要素を並べてみました。
とりあえず、簡単なアクティビティ図を作ってみました。
開始後アクション1の処理を実行して終了します。
正直矢印の見ためが同じなので区別しづらいのですが、上の図のように矢印が処理の流れを表現する場合はコントロールフロー、以下のようにオブジェクトノードによりデータやオブジェクトをやり取りする場合はオブジェクトフローと呼ぶようです。
さらにピンを使用した場合もデータ等をやりとりするオブジェクトフローになります。
フォークノード、ジョインノードにより複数の処理への分岐、統合を記述できます。
この場合、アクション1の実行後、並列にアクション2、アクション3を実行、その後アクション4を実行します。
アクティビティ終了ノードとフロー終了ノードの違いが分かりづらいのですが、分岐した全てのフローが終了する場合はアクティビティ終了ノード、到達したフローのみが終了する場合はフロー終了ノードを使用するらしいです。
以下のようにまずフォークノードによりアクション3とアクション2にフローが分岐、アクション2を実行後デシジョンノードによりデシジョンノードによりアクティビティ終了ノードとフロー終了ノードに条件分岐する場合を考えてみます。
アクティビティ終了ノードに分岐した場合、アクション3に分岐したフローも含めて全てのフローが終了します。
一方フロー終了ノードに分岐した場合、アクション3に分岐したノードはそのまま処理が継続されます。
今日はこのぐらいにしておきます。
明日はクラス図をやります。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
仕方ないのでUMLの話でもします。
僕もよくわからないのでUMLとRTミドルウェアによるモデルベースロボットシステム開発を読みながら書きます。
まずは、このページからastah* communityをダウンロードしてください。
最初はアクティビティ図から作ってみます。
図→アクティビティ図を選択してください。
とりあえず使いそうな要素を並べてみました。
とりあえず、簡単なアクティビティ図を作ってみました。
開始後アクション1の処理を実行して終了します。
正直矢印の見ためが同じなので区別しづらいのですが、上の図のように矢印が処理の流れを表現する場合はコントロールフロー、以下のようにオブジェクトノードによりデータやオブジェクトをやり取りする場合はオブジェクトフローと呼ぶようです。
さらにピンを使用した場合もデータ等をやりとりするオブジェクトフローになります。
フォークノード、ジョインノードにより複数の処理への分岐、統合を記述できます。
この場合、アクション1の実行後、並列にアクション2、アクション3を実行、その後アクション4を実行します。
アクティビティ終了ノードとフロー終了ノードの違いが分かりづらいのですが、分岐した全てのフローが終了する場合はアクティビティ終了ノード、到達したフローのみが終了する場合はフロー終了ノードを使用するらしいです。
以下のようにまずフォークノードによりアクション3とアクション2にフローが分岐、アクション2を実行後デシジョンノードによりデシジョンノードによりアクティビティ終了ノードとフロー終了ノードに条件分岐する場合を考えてみます。
アクティビティ終了ノードに分岐した場合、アクション3に分岐したフローも含めて全てのフローが終了します。
一方フロー終了ノードに分岐した場合、アクション3に分岐したノードはそのまま処理が継続されます。
今日はこのぐらいにしておきます。
明日はクラス図をやります。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
この作品に3週間ぐらい前に投稿したコメントの返信があったみたいです。
ソースコードを読んでみた感じ、moveCircularCartesianAbsとmoveCircularCartesianRelとgoHome関数に似たコードがあるように見えます。
まあ何か理由があるのかもしれないのですけど、これ以上追及するのはやめておきます。
相対位置での円弧補間動作が定義されていないのですか。
という事は、マニュアルに載っていたM1~M35は誰が定義したものなのでしょうか?
直線補間の相対指令のmoveLinearCartesianRel関数では絶対位置に変換しているようですが、sprintf(char_buffer,M11_Command,~としているので最終的に相対指令で入力しているように見えます。
正直よくわからないのでORiN2の仕様書を読んでみたところ重大な勘違いをしている事に気付きました。Moveというメソッドの引数は、補間指定、ポーズ列、オプションとなっているようです。つまり補間指定でPTP、直線、円弧のいずれかを指定して、ポーズ列で目標位置を指定することになると言う事だと思うので、絶対位置か相対位置か指定する項目はないという事になります。
それじゃあ、わざわざchar_bufferの先頭にM11とか付けていたのは動作にはなんの影響もなかったということなのでしょうか?ポーズ列の指定方法が各メーカーに依存するとORiN2の仕様書に書いてあるのですが、その指定方法を自力調べる方法がないので知っている人がいれば教えてください。
いやでも関係ないのだとすれば、直線補間ではsprintf(char_buffer,M11_Command,~と相対指令のコマンドを入力しているにもかかわらず、円弧補間ではsprintf(char_buffer,M31_Command,~と絶対指令のコマンドを入力しているのは何故なのかわかりません。
あと、クラスにまとめたほうがバグが発生しにくくはなると思いますけどね。
おそらくですが、以下の点が問題になるのではないでしょうか?
これで今までに投稿した全てのコメントに返信が来たという事にはなります。
正直なところ人の作品にコメントしたら自分の作品にもコメントしてくれるかなとか思っていたのですが、なかなかそう上手くはいかないようです。
他の作品にコメントをすればするほど他の作品がベストサポート賞等を取る可能性が高くなるわけで、相対的に自分が不利になっている感はあります。むしろ作品の出来を考えたら他の参加者が僕が有利になるようにコメント等を投稿してくれるぐらいのハンデがあっても良いと思うのですが、まあ僕なんかに構っている余裕はないですよね。
補足ですが、Ogre3Dで作成した2D、3Dゲーム作成ツールを更新しました。
Qtのバージョンが古かったのでQt-5.3.2でビルドしました。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
ソースコードを読んでみた感じ、moveCircularCartesianAbsとmoveCircularCartesianRelとgoHome関数に似たコードがあるように見えます。
まあ何か理由があるのかもしれないのですけど、これ以上追及するのはやめておきます。
相対位置での円弧補間動作が定義されていないのですか。
という事は、マニュアルに載っていたM1~M35は誰が定義したものなのでしょうか?
直線補間の相対指令のmoveLinearCartesianRel関数では絶対位置に変換しているようですが、sprintf(char_buffer,M11_Command,~としているので最終的に相対指令で入力しているように見えます。
正直よくわからないのでORiN2の仕様書を読んでみたところ重大な勘違いをしている事に気付きました。Moveというメソッドの引数は、補間指定、ポーズ列、オプションとなっているようです。つまり補間指定でPTP、直線、円弧のいずれかを指定して、ポーズ列で目標位置を指定することになると言う事だと思うので、絶対位置か相対位置か指定する項目はないという事になります。
それじゃあ、わざわざchar_bufferの先頭にM11とか付けていたのは動作にはなんの影響もなかったということなのでしょうか?ポーズ列の指定方法が各メーカーに依存するとORiN2の仕様書に書いてあるのですが、その指定方法を自力調べる方法がないので知っている人がいれば教えてください。
いやでも関係ないのだとすれば、直線補間ではsprintf(char_buffer,M11_Command,~と相対指令のコマンドを入力しているにもかかわらず、円弧補間ではsprintf(char_buffer,M31_Command,~と絶対指令のコマンドを入力しているのは何故なのかわかりません。
あと、クラスにまとめたほうがバグが発生しにくくはなると思いますけどね。
おそらくですが、以下の点が問題になるのではないでしょうか?
- どこの関数で変更されるのかわかりにくいので処理の流れが分かりづらくなる
- 名前の衝突が起きやすくなる
これで今までに投稿した全てのコメントに返信が来たという事にはなります。
正直なところ人の作品にコメントしたら自分の作品にもコメントしてくれるかなとか思っていたのですが、なかなかそう上手くはいかないようです。
他の作品にコメントをすればするほど他の作品がベストサポート賞等を取る可能性が高くなるわけで、相対的に自分が不利になっている感はあります。むしろ作品の出来を考えたら他の参加者が僕が有利になるようにコメント等を投稿してくれるぐらいのハンデがあっても良いと思うのですが、まあ僕なんかに構っている余裕はないですよね。
補足ですが、Ogre3Dで作成した2D、3Dゲーム作成ツールを更新しました。
Qtのバージョンが古かったのでQt-5.3.2でビルドしました。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・