UMLのシーケンス図の同期メッセージと非同期メッセージの違い
先日、UML表記法を教えていた時のこと、同期と非同期が分からないので教えて欲しいと言われました。
それが、ソフトウェア経験がほぼない方だったので、即興で日常の例で説明しました。腑に落ちたそうなので、紹介します。
同期メッセージは矢印が塗りつぶし、非同期メッセージは開いた矢印です。
ソフトウェアエンジニアでプログラミングで、プロセス間通信/スレッド間通信を知っている、RTOSのタスク間通信を知っている、など、イメージが湧く人も多いのですが、そのような知見がなく全くイメージできない人もいます。
宅配で説明
シーケンス図で描くと、
「荷物受取お願いしまーす」ってピンポーン、ってするのが、送信しているメッセージで、
メッセージの引数で、荷物が渡されている感じです。
それを「荷物受取(配達物:荷物)」って表記しています。
同期メッセージ
荷物受取でピンポーンして、荷物受取人が出てきて渡して受取りを確認してから次に行くのが同期メッセージ。(上図の1つ目のメッセージ)
ハンコを貰う場合と貰わない場合があって、戻り値の違いになる。(上図の2つ目のメッセージ)
2023/4/30追記:「荷物受取():ハンコ」の引数が欠けてました。「荷物受取(配達物 荷物):ハンコ」が正しいです。
非同期メッセージ
荷物受取でピンポーンして、玄関前に荷物置いて、すぐにササっと立ち去って、次に行くのが非同期メッセージ(置き配)。(上図の3つ目のメッセージ)
ただし、ピンポーンってしないで、荷物を置いて行ってしまうのは、メッセージを送ってないので、非同期メッセージのイメージとは違いますね。
時事ネタかも知れませんが
コロナ禍での時事ネタかも知れませんね (^^