会話による ソフトウェア工学の開発実践11 - シーケンス図を書く

Posted by WZhong on Sunday, January 21, 2024

TOC

単語

重点を置く じゅうてんをおく 重点放在…
基づく もとづく 基于
時系列 じけいれつ 时间顺序
時間序列 じかんじょれつ 时间顺序
テンプレート template
システムの制御 せいぎょ 系统控制
交信する こうしん 通信,信息交换
果たす はたす 实现,完成
適応性 てきおうせい 适应范围
コラボレーション図 collaboration 协同图
アクティビティ図 activity 活动图
変身する へんしん 演变,变化
すべき 应该的
要求次第 ようきゅうしだい 根据要求而确定
まちまち 各有不同
セッション session
逆に ぎゃくに 相反地
検証する けんしょうする 验证
条件を付ける 附加条件
生成する せいせい 生成,创建
消滅する しょうめつ 消亡,删除
自己交信する じここうしん 自我通信,递归通信
並列プロセス へいれつ 并行过程
矢印 やじるし 箭头
頭が半分しかない矢印 半箭头
非同期 ひどうき 异步
呼び出し側 よびだしがわ 调用一方
ブロック block
受信側 じゅしんがわ 接收信息一方
待たずに(待たない) 不再等待

ポイント

  • これは静的なモデリングと言われます。 → 这被称为静态建模。

  • 動的なモデリングって、~いくつかの種類がありますか? → 所谓动态建模,有几种种类?

  • 本来はそうすべきですが。 → 本来应该是那样子的。

会話

会話の背景

  • システムモデリングには、静的なモデリングと動的なモデリングがある。静的なモデリングがクラスに重点を置くと言うなら、動的なモデリングはオブジェクトに注目している。今回と次回は動的あるいはダイナミック的なモデリングについて話す。
  • 動的なモデリングはいくつかあるが、よく使われているのは、シーケンス図と状態図である。どちらでも静的なクラスに基づいて設計する。シーケンス図の特徴は、オブジェクト間の相互動作を時系列で表現することである。

登場人物

  • 近藤:システムアーキテクト
    鈴木:開発チームリーダー
    山田、田中:開発チームメンバー

会話内容

  • 鈴木:

    • こんにちは。
    • 先々週からはクラス図を書いてきました。それは静的なモデリングと言われます。今週からは動的なモデリングをします。作業としては、シーケンス図と状態図を書く予定です。今日は、まず、シーケンス図に関して、近藤さんに説明してもらいましょう。近藤さん、お願いします。
  • 近藤:

    • そうですね。ここまで書いてもらったクラス図では、主にオブジェクトのテンプレートとなるクラスの名前、属性、および操作を定義し、その上各クラスの関係付けも記述しておきます。
    • それに対して、システムが実行するときに、システムの制御の流れがどうなるか?各オブジェクトがどう動くか?お互いにどう交信しながら機能を果たすか?また各オブジェクトが自分のライフサイクルでどう変化するか?などを記述することを動的なモデリングと言います。
  • 田中:

    • すみませんけど、動的なモデリングって、具体的に言うと、いくつかの種類がありますか?それぞれの特徴および適応性はどうでしょうか?
  • 近藤:

    • そうですね。いろいろありますが、よく使われているのは、コラボレーション図(collaboration diagram)、シーケンス図(sequence diagram)、状態図(state diagram)、それとアクティビティ図(activity diagram)があります。
    • コラボレーション図は各オブジェクトがイベントにより交信することを重視したもので、時間には関係なさそうな振る舞いを表現するにはいいと思います。
    • それに対して、シーケンス図は関係オブジェクト間の時間序列により交信することを表現するので、時系列にかかわる機能には表現しやすいです。
  • 田中:

    • もしかしたら、アクティビティ図と状態図もオブジェクト間の振る舞いを表現するのでしょうか。
  • 近藤:

    • それはちょっと違いがあります。
    • アクティビティ図はシステムの制御の流れは表示しやすいと思います。昔のフローチャートやデータフロー図から変身してきたと思います。ここでは流れの主体はオブジェクトになっています。
    • 状態図はオブジェクト間の関係ではなく、ある特定のオブジェクトに対して、そのそのライフサイクルの中で状態の変化を表現します。もちろん、その状態の変化とともに、イベントが発生しますから、それも一緒に記述します。
  • 田中:

    • なるほど。大体わかりました。我々も今回この4種類の図を書かなければなりませんか?
  • 鈴木:

    • 本来はそうすべきですが、しかしプロジェクトによりお客様の要求次第でまちまちですから。今回はとにかくシーケンス図と状態図だけを書けばいいことになりました。
  • 田中:

    • そうですか。そうしたら、シーケンス図に関して今回の作業ではどう書けばいいでしょうか。
  • 近藤:

    • この前も言いましたが、シーケンス図にはハイレベルとローレベルの書き方があります。今回の開発はこのシステムがそんなに大きくないので、ローレベルの書き方を薦めたいです。
  • 田中:

    • ローレベルの書き方って、どんな意味でしょうか?
  • 近藤:

    • ローレベルの書き方とは、コーディングと緊密に関係した方法です。具体的に言うと、ここまで設計したクラスとこれから書こうとするJSPやJavaの名称や操作などを直接使いながら書きます。
    • たとえば、お客さんが見積記入という振る舞いを記述してみると、NewQuotationJSP、NewQuotationAction、Quotation、Approvalなどのクラスがある。その場合、これらのクラスのオブジェクト間の交信を時系列で書けばいいと思います。具体的には、サンプルも書いておきますから、参考にしてください。
  • 田中:

    • どうもありがとうございます。
  • 山田:

    • それと、シーケンス図に対して何か特徴や注意点などがあるでしょうか?
  • 近藤:

    • そうですね。まずは、今我々はローレベルで書いていますので、大抵1つのセッションには1つのシーケンス図があります。そうすると、シーケンス図を読むと、コーディングがすぐできるような状態になります。逆に言うと、コーディングがあれば、シーケンス図により、検証することもできます。
  • 山田:

    • それは大変助かります。
  • 近藤:

    • それと、シーケンス図には、細かく言うと、オブジェクト間でメッセージ通信する時に、条件を付けることがよくありますから、条件を書いた方がいいと思います。
    • 2番目は、関係したオブジェクトが流れの間に生成されたり(new,create)、消滅されたり(destroy,delete)、自己交信する(self)こともよくありますので、UMLの記号を正しく使ってちゃんと表示してほしいです。
  • 山田:

    • ところで、シーケンス図が、並列プロセスも表現できるでしょうか?
  • 近藤:

    • もちろんです。シーケンス図で並列プロセスを表示するため、頭が半分しかない矢印を使って非同期メッセージを送信するように表現できます。
    • 一般的に言うと、シーケンス図では、あるオブジェクトが相手のオブジェクトに送信し、相手のオブジェクトが処理を終えた後、次の操作へ進む。これにより、時系列を守ります。図を書く時には、こんな送信は普通の矢印を使います。
    • しかし、並列プロセスあるいは非同期の場合は、非同期メッセージを送信した後、呼び出し側をブロックしませんので、自身の処理を継続して実行できます。というのは受信側オブジェクトの処理完了を待たずに、すぐ次の動作を続けます。
  • 山田:

    • 分かりました。
  • 鈴木:

    • それでは、具体的にはまだいろいろがあると思いますが、書きながらまた議論していただければ勉強になると思います。
    • 今日のミーティングはここまで終わらせてもらいます。皆明日から早速書いてもらいましょう。
    • もう遅くなりましたので、近藤さん、皆さん、お疲れ様でした。
  • 皆:

    • お疲れ様。

「真诚赞赏,手留余香」

WZhong

真诚赞赏,手留余香

使用微信扫描二维码完成支付