web-dev-qa-db-ja.com

UMLシーケンス図で<<作成>>メッセージが非同期になるのはなぜですか?

私が知る限り、シーケンス図でオブジェクトの作成を示す適切な方法は、非同期矢印を使用することです。たとえば、

enter image description here

ただし、Java(および他のOO言語))では、私の知る限り、new()操作がブロックされています。

一部の参照(Craig Larman)がハイブリッドメッセージ(点線と黒矢印)を使用していることに気づきました。

enter image description here

特にコンストラクターが関係する場合、createsynchronous呼び出しであることが重要です。つまり、コンストラクターが終了すると戻ります。 UMLでの非同期メッセージについての私の理解によれば、:Aオブジェクトは:Bのコンストラクターが完了するまで待機しません。

私の生徒はよくこの質問をしますが、これにはいくつかの歴史があると思います。なぜこれが矛盾しているように見えるのか、私は興味があります。

7
Fuhrmanator

相互作用図の各UMLメッセージには、相互に排他的な一意のMessageSortがあります(セクション17.4.2)。

synchCall
asynchCall
asynchSignal
createMessage
deleteMessage
応答

メッセージのグラフィカル表記は、MessageSortに応じて定義されます(セクション17.4.4.1)。

  • 非同期メッセージ(messageSortはasynchCallまたはasynchSignalに等しい)には、開いた矢印の頭があります。
  • 同期メッセージ(messageSortはsynchCallと等しい)には、塗りつぶされた矢印の頭があります。
  • 返信メッセージ(messageSortは返信)には、開いた矢印または塗りつぶされた矢印の付いた破線があります。
  • オブジェクト作成メッセージ(messageSortはcreateMessageと等しい)には、開いた矢印の付いた破線があります。
  • オブジェクト削除メッセージ(messageSortはdeleteMessageと等しい)は、
  • ...

したがって、この グラフィック表現 は慣習であり、セマンティクスをそこから導出するように誤解させないでください!矢印が開いた« create »メッセージが表示された場合、それは非同期であるためではなく、UMLが作成を表すことを決定した方法であるためです。

あいまいであることに同意します。それは返信メッセージのように見え、矢印に与えられた意味と一致しません。たぶんUML標準委員会に提案するいくつかの改善?市場は待たなかった:通常の同期メッセージ矢印を使用する 一部のツール がすでにあります。

8
Christophe