UML シーケンス図: ガイドライン
Visual Studio Ultimate では、シーケンス図を生成して、相互作用を示すことができます。 相互作用とは、クラス、コンポーネント、サブシステム、またはアクターの一般的なインスタンス間でやり取りされるメッセージのシーケンスのことです。 ビデオ デモについては、「Sketching Interactions by using Sequence Diagrams (シーケンス図を使用した相互作用のスケッチ)」を参照してください。
UML シーケンス図を生成するには、[アーキテクチャ] メニューの [新しい図] をクリックします。
シーケンス図には以下の 2 種類があります。
コード ベースのシーケンス図。.NET プログラム コードから生成できます。 詳細については、「方法: シーケンス図を使ってコードを精査する」を参照してください。
UML シーケンス図。UML モデリング プロジェクトの一部です。
このトピックでは、UML シーケンス図について説明します。
シーケンス図で使用される要素の詳細については、「UML シーケンス図: リファレンス」を参照してください。
このトピックの内容
UML シーケンス図の使用
シーケンス図を生成するための基本的な手順
単純なシーケンス図の生成と使用
クラスと生存線
再利用可能な相互作用シーケンスの生成
生存線のグループの折りたたみ
フラグメントを使用した制御構造の記述
コードからのシーケンス図の生成
UML シーケンス図の使用
シーケンス図は、さまざまなレベルのプログラムの詳細を対象に、幅広い目的で使用できます。 一般には、次のような場合にシーケンス図を生成します。
システムのユーザーとその目的の概要を示すユース ケース図を使用している場合は、シーケンス図を生成して、各ユース ケースの目的を達成するためにシステムの主要コンポーネントが相互にどのように作用するかを示すことができます。 詳細については、「UML ユース ケース図: ガイドライン」を参照してください。
コンポーネントのインターフェイスで受信するメッセージが特定されている場合は、シーケンス図を生成して、各受信メッセージに必要な結果をもたらすためにコンポーネントの内部パーツが相互にどのように作用するかを示すことができます。 詳細については、「UML コンポーネント図: ガイドライン」を参照してください。
シーケンス図を生成することには、次のような利点があります。
コンポーネント間でのタスクの分散状況を簡単に確認できる。
ソフトウェアの更新を困難にする相互作用のパターンを識別できる。
他の図との関係
UML シーケンス図は、いくつかの方法で他の図と併用できます。
生存線と型
シーケンス図で描画する生存線によって、システム内のコンポーネントまたはクラスの一般的なインスタンスを表すことができます。 型から生存線を生成することも、生存線から型を生成することもできます。また、UML クラス図および UML コンポーネント図で型を表示できます。 詳細については、「クラスと生存線」を参照してください。
パラメーターの型
UML クラス図では、生存線間で送信されたメッセージで使用されたパラメーターと戻り値の型も記述できます。
ユース ケースの詳細
ユース ケースは、ユーザーの目的と、その目的を達成するためのステップのシーケンスを表します。 ステップのシーケンスの記述方法にはいくつかあります。 その 1 つは、ユーザーとシステムの主要コンポーネントの間の相互作用を示すシーケンス図を生成する方法です。 詳細については、「UML ユース ケース図: ガイドライン」を参照してください。
ソース コード
ソース コードからシーケンス図を生成できます。 図を改訂し、さまざまな設計オプションを試してみることができます。 必要に応じて、内容をモデリング プロジェクトのシーケンス図にコピーすることもできます。 詳細については、「コードからのシーケンス図の生成」を参照してください。
シーケンス図を生成するための基本的な手順
シーケンス図のすべての要素の一覧については、「UML シーケンス図: リファレンス」を参照してください。
注意
モデル図の詳細な生成手順については、「方法: UML モデルおよび UML 図を編集する」を参照してください。
シーケンス図を生成するには
[アーキテクチャ] メニューの [新しいダイアグラム] をクリックします。
[テンプレート] の [UML シーケンス図] をクリックします。
図に名前を付けます。
[モデリング プロジェクトへの追加] で、ソリューション内の既存のモデリング プロジェクトを選択するか、[新しいモデリング プロジェクトを作成します] を選択し、[OK] をクリックします。
新しいシーケンス図がシーケンス ダイアグラム ツールボックスと共に表示されます。 ツールボックスには、必要な要素およびコネクタが含まれています。
シーケンス図を描画するには
ツールボックスから生存線 (1) を図上にドラッグし、それによってクラス、コンポーネント、アクター、またはデバイスのインスタンスを表現します。
注意
既存のクラス、インターフェイス、アクター、またはコンポーネントを UML モデル エクスプローラーから図上にドラッグして、生存線を生成することもできます。 この場合は、選択した型のインスタンスを表す生存線が生成されます。
特定の目的を達成するために、生存線が相互にどのように作用するかを示すメッセージを生成します。
メッセージ (3、4、6、7) を生成するには、メッセージ ツールをクリックします。 次に、メッセージを開始するポイントの送信生存線をクリックしてから、受信生存線をクリックします。
受信生存線に実行発生 (5) が表示されます。 実行発生は、インスタンスによるメソッドの実行期間を表します。 実行発生から開始される他のメッセージを生成できます。
不明なイベント ソース (9) から受信するメッセージ、または不明な宛先 (10) にブロードキャストされるメッセージを表示するには、図上の空白スペースとの間でやり取りされる非同期メッセージを描画します。 これらのメッセージは、拾得メッセージ (9) または消失メッセージ (10) と呼ばれます。
注意
消失メッセージまたは拾得メッセージのある生存線のグループを移動するには、生存線を選択してから移動します。生存線を選択するには、生存線を囲む四角形を描画するか、Ctrl キーを押しながら各生存線をクリックします。 [すべて選択] を使用するか、Ctrl キーを押しながら A キーを押して生存線を選択してから移動しても、それらの生存線にアタッチされている消失メッセージと拾得メッセージは移動されません。 このような場合には、メッセージを個別に移動します。
同じコンポーネントまたはシステムへの主要なメッセージごとにシーケンス図を描画します。
メッセージの順序を変更するには
生存線内でメッセージを上下にドラッグします。 他のメッセージの上にドラッグすることも、実行ブロックの内外にドラッグすることもできます。
または
メッセージをクリックし、↑キーと↓キーを使用してメッセージの位置を調整します。 メッセージの順序を変更するには、Shift キーを押しながら↑キーを押すか、Shift キーを押しながら↓キーを押します。
シーケンス図上のメッセージ シーケンスを移動またはコピーするには
メッセージ (3、4) を右クリックし、[コピー] をクリックします。
実行発生 (5) か、新しいメッセージの送信側にする生存線 (1) を右クリックし、[貼り付け] をクリックします。 必要に応じて、別の図上の要素を新しい送信側にしてもかまいません。
メッセージとそのすべての付属メッセージのコピーが、実行発生の端か、生存線の端に追加されます。
注意
貼り付けたメッセージは、常に実行発生か生存線の端に表示されます。 貼り付けたメッセージは、元の位置までドラッグできます。
シーケンス図のレイアウトを調整するには
図の空白部分を右クリックし、[レイアウトの再配置] をクリックします。
操作を元に戻すには、[編集] をクリックし、[元に戻す] をクリックします。
相互作用を所有するパッケージを変更するには
UML モデル エクスプローラーで、シーケンス図に表示される相互作用を探します。
注意
最初の生存線をシーケンス図に追加するまで、相互作用は UML モデル エクスプローラーに表示されません。
相互作用をパッケージにドラッグします。
または
相互作用を右クリックし、[切り取り] をクリックします。 パッケージを右クリックし、[貼り付け] をクリックします。
単純なシーケンス図の生成と使用
最も単純で幅広く使用されるシーケンス図は、生存線とメッセージだけが含まれるシーケンス図です。 この種類の図では、設計に含まれるオブジェクト間、またはシステムとそのユーザーの間の一般的な相互作用のシーケンスを明確に示すことができます。 通常は、このようなシーケンス図でも、設計について話し合ったり伝達したりするためには十分役に立ちます。
次に、単純なシーケンス図の生成時に考慮する必要のある点についていくつか説明します。
メッセージの種類
メッセージの生成に使用できるツールは 3 つあります。
受信側から応答 (3) が返されるのを送信側が待機する相互作用を記述する場合は、同期ツールを使用します。
<<return>> 矢印は、実行発生の端に表示されます。 これは、制御が送信側に戻ることを示しています。
受信側 (4) を待機することなく、送信側がすぐに続行できる相互作用を記述する場合は、非同期ツールを使用します。
送信側が受信側 (8) を生成する相互作用を記述する場合は、生成ツールを使用します。
受信側が最初に受信するメッセージは生成メッセージである必要があります。
相互作用に注釈を付ける
シーケンスの詳細を記述する場合は、図上の任意の場所にコメントを配置できます。
[コメント リンク] を使用すると、生存線、実行、相互作用使用、およびフラグメントにコメントをリンクできます。
ヒント
コメントをシーケンスの特定のポイントにアタッチするには、そのコメントを実行発生、相互作用使用、またはフラグメントにリンクします。 生存線にはリンクしないでください。生存線にリンクした場合、シーケンスの適切なポイントへのアタッチが維持されないためです。
コメントは、次のような目的で使用します。
シーケンスの主要なポイントで達成されたことについてメモする。 これにより、相互作用の目的が理解しやすくなります。
シーケンス全体の総体的な目的を説明する。 この場合は、コメントを最初の実行発生にアタッチするか、どの要素にもアタッチしないようにします。 "顧客がメニューから品目を選択し、価格が提示されました" などのコメントが考えられます。
各生存線の役割を説明する。 この場合は、コメントを生存線にアタッチします。 "顧客がメニューから選択した品目を注文マネージャーが収集します" などのコメントが考えられます。
例外、または表示されている通常のシーケンスの代わりに実行できる代替のシーケンスを示す。 "顧客は、このシーケンスの残りのステップをスキップできます" などのコメントが考えられます。
- この種類のメモに代わる正式な注釈として、フラグメントを使用することもできます。 詳細については、「フラグメントを使用した制御構造の記述」を参照してください。
図の範囲の決定
図に何を表示するかを明確にしておくことは重要な作業です。
開始イベント
各図には、1 つの開始イベントから発生した相互作用のシーケンスを表示する必要があります。 次にその例を示します。
ユース ケースを開始したユーザー (料理購入用 Web ページを開いたユーザーなど)。
システム コンポーネント間で渡されたメッセージ (顧客が購入を考えている品目が売り切れていないかどうかを問い合わせるメッセージなど)。
状態の変化によって発生したイベント (品目のストックがしきい値を下回った場合のイベントなど)。
詳細レベル
シーケンス図では、さまざまなレベルの詳細を表示できます。 詳細レベルは、次の 2 つの次元でほぼ別個に決定できます。
生存線では、次のいずれかのレベルの詳細を表現できます。
プログラム コード内のオブジェクト (既に存在するオブジェクトまたは開発中のオブジェクト)。
コンポーネントまたはそのサブコンポーネント (通常、ファサード、プロキシ、およびその他の接続メカニズムは除く)。
システムと外部アクター。
メッセージでは、次のいずれかのレベルの詳細を表現できます。
API または Web インターフェイスのプログラム コード内のソフトウェア メッセージ。
ユーザーとシステムの間、コードとデータベースの間などにおけるトランザクションまたはサブトランザクション。
ユース ケース (ユーザーとシステムの間の主要な相互作用)。
既存のコードを参照する場合でも、新しい設計を記述する場合でも、詳細レベルがそれほど高くないビューを描画して、話し合いに使用すると便利です。
バリエーションの記述
図には一般的な単一のイベント シーケンスが表示されます。 問題が発生した場合のシナリオなど、代替のシーケンスを示す場合は、次のどちらかの方法を使用できます。
別のシーケンス図を生成して、このようなシナリオを記述する。
「フラグメントを使用した制御構造の記述」の手順に従って、ループや代替シーケンスなどを示す。
設計の評価
図を使用すると、オブジェクトとコンポーネントの間でのタスクの分散を評価できます。 次のパターンが認められた場合は、リファクタリングを検討してください。
1 つの生存線がすべてのタスクを担い、他のすべてのタスクを呼び出している。一方、他の生存線は受動的に応答するだけである。
多数のメッセージが生存線を横切る。 各生存線のメッセージの送信先は近くの数箇所にとどめ、さらにその先とはやり取りしないようにする必要があります。 通常、メッセージが生存線を横切る場所がごくわずかになるように生存線を配置することは可能です。生存線を横切るメッセージがある場合は、送信先の生存線も生存線を横切るメッセージをやり取りするようなことがないようにする必要があります。
一部の生存線が複数の種類のタスクを処理している。 各生存線が各受信メッセージに応答して実行する処理を要約して各生存線の役割を記述した簡潔な一文は、見つけるのが簡単です。
クラスと生存線
シーケンス図の生存線には、クラスまたはコンポーネント インターフェイスのインスタンスが示されます。 生存線には、2 つの方法で名前を付けることができます。
目的 |
使用する形式 |
---|---|
型の匿名インスタンス。 各型の生存線が 1 つしかない場合は、こちらを使用します。 |
<型名> |
型の名前付きインスタンス。 同じ型のインスタンスが複数存在するシーケンスを示す場合は、こちらを使用します。 |
<オブジェクト名>:<型名> |
型からの生存線の生成
クラス図などで定義済みのクラスから新しい生存線を生成できます。
注意
このタスクを実行する前に、既存のシーケンス図が存在することを確認してください。
既存の型から生存線を生成するには
UML モデル エクスプローラーからシーケンス図上に、クラス、コンポーネント、またはインターフェイスをドラッグします。
または
クラス、コンポーネント、またはインターフェイスをそれぞれの図で右クリックし、[生存線の生成] をクリックします。
[生存線の生成] ダイアログ ボックスでシーケンス図を選択し、[OK] をクリックします。
ドラッグしたものと同じ型の新しい名前付きインスタンスの生存線が表示されます。
注意
この操作は何度でも繰り返すことができます。 その場合、異なるインスタンス名で生存線が生成されます。
生存線の型を変更するには
生存線を右クリックし、[プロパティ] をクリックします。
プロパティ ウィンドウで、[型] プロパティを設定します。 ドロップダウン メニューから型を選択することも、新しい名前を入力することもできます。
生存線からのクラスの生成
1 つ以上のシーケンス図を生成済みの場合は、生存線からクラスまたはインターフェイスを生成して、生存線の概要を示すことができます。
生存線からクラスまたはインターフェイスを生成するには
生存線を右クリックし、[クラスの生成] または [インターフェイスの生成] をクリックします。
UML モデル エクスプローラーに新しいクラスまたはインターフェイスが表示されます。
生存線が受信するメッセージごとに、クラスまたはインターフェイスに操作を生成します。
含めるメッセージをすべて選択します。
いずれかのメッセージを右クリックし、[メソッドの生成] をクリックします。
新しいクラスまたはインターフェイスに、選択したメッセージごとに操作が設定されます。
操作の名前は、各メッセージの矢印の下と、メッセージの Operation プロパティに表示されます。
メッセージに "(パラメーター : 型)" の形式でパラメーターが含まれていた場合、新しい操作のパラメーター リストにはそのパラメーターが表示されます。
注意
シーケンス図に新しいメッセージを追加するには、この手順を繰り返す必要があります。
新しいクラスまたはインターフェイスの詳細を表示するには、それをクラス図またはコンポーネント図に追加します。
クラス図またはコンポーネント図を開くか、生成します。
新しいクラスまたはインターフェイスを UML モデル エクスプローラーからクラス図にドラッグします。
クラス図に、クラスまたはインターフェイスが表示されます。
または
UML モデル エクスプローラーからコンポーネント図のコンポーネント上またはポート上に新しいインターフェイスをドラッグします。
インターフェイスがコンポーネント上にロリポップとして表示されます。
パラメーターのクラスの生成
シーケンス図のメッセージには、パラメーターを含めることができます。 UML クラス図を使用すると、パラメーターの型を記述できます。
再利用可能な相互作用シーケンスの生成
個々の図を使用して、切り離す必要のある詳細が含まれているシーケンス、または複数の図で共通するシーケンスを記述できます。
図には、別の図に含まれる詳細を指す相互作用使用の四角形 (12) を生成できます。
相互作用使用にリンクされているシーケンス図を開くには、その相互作用使用をダブルクリックします。
再利用可能な相互作用シーケンスを既存の生存線から生成するには
[ツールボックス] の [相互作用使用] をクリックします。
シーケンス図で、マウス ボタンを押したまま、再利用可能なシーケンスに含めるすべての生存線の上をドラッグします。 相互作用使用を挿入する垂直位置から開始してください。
シーケンス図上で、選択したすべての生存線を含んだ相互作用使用が表示されます。
相互作用使用上の名前をダブルクリックし、名前を変更します。この図における再利用可能なシーケンスの効果がわかる名前にします。
または
パラメーターを使用して、関数呼び出しに似た名前を記述します。
相互作用使用を別のシーケンス図にリンクします。 相互作用使用を右クリックし、次のどちらかの操作を行います。
[新しいシーケンスの生成] をクリックし、新しいシーケンス図を生成します。
または
[シーケンスへリンク] をクリックし、既存の図にリンクします。
Visual Studio によって、相互作用使用と新しい相互作用シーケンスの間にリンクが設定されます。
ソリューションに新しいシーケンス図が表示されます。 この図には、相互作用使用を生成するのに使用した生存線が含まれています。
注意
含まれるのは、相互作用使用を生成するのに使用した生存線だけです。 相互作用使用を生成した後に生成された生存線は、現在その相互作用使用に含まれていても、新しい図ではその相互作用使用に含まれません。
再利用可能なシーケンスを既存のメッセージから生成するには
移動するメッセージを右クリックし、[図へ移動] をクリックします。
Visual Studio:
選択したメッセージとその付属メッセージを相互作用使用に置き換えます。
置き換えたメッセージを新しいシーケンス図に移動します。
相互作用使用と新しいシーケンス図の間のリンクを設定します。
相互作用使用によって参照されるシーケンスに移動するには
相互作用使用をダブルクリックします。
または
相互作用使用を右クリックし、[シーケンスへ移動] をクリックします。
相互作用使用を使用したプレースホルダーの生成
別の図へのリンクを設定せずに相互作用使用を生成することもできます。 この相互作用使用は、詳細がまだ決まっていないシーケンスの一部のプレースホルダーとして使用できます。 この相互作用使用には、目的の結果を表す名前を付けてください。
生存線のグループの折りたたみ
一連の生存線が 1 つの生存線に見えるように、まとめて折りたたむことができます。 これにより、オブジェクトのグループを 1 つのコンポーネントとして視覚化できます。 折りたたまれたグループに含まれる生存線間のメッセージと相互作用使用は非表示になります。 他の生存線を含むメッセージと相互作用シーケンスは表示されます。
生存線のグループをまとめて折りたたむには
2 つ以上の生存線を選択します。
そのいずれかを右クリックし、[折りたたみ] をクリックします。
独立した複数の生存線が 1 つの生存線に置き換えられます。
グループ内の生存線だけに関連するメッセージと相互作用使用は、非表示になります。
グループの名前を変更するには、名前をクリックします。
注意
グループを展開すると、グループ名は失われます。
折りたたまれたグループを展開するには
折りたたまれた生存線を右クリックし、[展開] をクリックします。
注意
グループの名前は失われます。グループからコメントまたは作業項目に設定されているリンクも同時に失われます。
フラグメントを使用した制御構造の記述
結合フラグメント (13) を使用すると、ループ、分岐、および同時処理をシーケンス図で定義できます。 シーケンス図の代わりに、アクティビティ図を使用することもできます。 アクティビティ図は、アクター間のメッセージの表示にはそれほど効果的ではありませんが、ループ、分岐、および同時実行については、より適切に表示できる場合があります。
すべてのフラグメントの種類の一覧については、「UML シーケンス図のフラグメントを使用した制御フローの記述」を参照してください。
結合フラグメントを生成するには
同じ実行発生または生存線で開始されるメッセージまたはメッセージのシーケンスを選択します。
注意
メッセージの矢印を選択します。メッセージが指す実行発生ではありません。
いずれかのメッセージを右クリックし、[ブロックの挿入] をポイントして、必要な種類のフラグメントをクリックします。
新しいフラグメントが表示されます。 このフラグメントには、選択したメッセージが含まれています。
複数のフラグメントを生成できる種類の結合フラグメントを選択した場合は、空のフラグメントも表示されます。
フラグメントのガードを設定するには、フラグメントの境界線を右クリックし、[プロパティ] をクリックします。 [ガード] プロパティを設定します。
ガードは、分岐またはループの条件を定義するために使用します。
複数のフラグメントを生成できる種類の場合に、新しいフラグメントを追加するには、フラグメントの境界線を右クリックし、[追加] をポイントします。 [相互作用オペランドを前置] または [相互作用オペランドを後置] をクリックします。
新しいメッセージをフラグメントに追加するには、メッセージ ツールを使用するか、コピーして貼り付けます。
コードからのシーケンス図の生成
Visual C# コード ファイルまたは Visual Basic コード ファイルのメソッド定義から、シーケンス図を生成できます。
生成したシーケンス図は、モデリング プロジェクトで生成したシーケンス図と非常によく似ています。 ただし、生成したシーケンス図内の要素は、UML モデル エクスプローラーには表示されません。
シーケンス図をコードから生成するには
Visual Studio で、メソッド定義が含まれるコード ファイルを開きます。
メソッド定義内の任意の場所を右クリックし、[シーケンス ダイアグラムの生成] をクリックします。
詳細については、「方法: シーケンス図を使ってコードを精査する」を参照してください。
注意
図の生成後に図に加えた変更は、コードには反映されません。また、コードに加えた変更は、図には反映されません。 このような変更を反映させるには、新しいシーケンス図を生成する必要があります。 同じメソッドから、新しいシーケンス図を何度でも生成できます。
生存線とメッセージからは、それらが表すクラスとメソッドのコード定義に移動できます。
生成した生存線とメッセージからコードに移動するには
- 生成した生存線またはメッセージを右クリックし、[定義へ移動] をクリックします。
UML モデルへの生成したシーケンスのコピー
生存線やメッセージなど、生成したシーケンスの一部を、モデリング プロジェクトのシーケンス図にコピーできます。
生成したシーケンス図を UML モデルから、または UML モデルにコピーするには
シーケンス図で、コピーする要素 (生存線、メッセージなど) を選択します。 図のすべての要素をコピーする場合は、[編集] メニューの [すべて選択] をクリックします。
[編集] メニューの [コピー] をクリックします。
モデリング プロジェクトのシーケンス図を生成するか、開きます。 その方法については、「シーケンス図を生成するための基本的な手順」を参照してください。
[編集] メニューの [貼り付け] をクリックします。
選択した要素のコピーが図に表示されます。
注意
場合によっては、貼り付けた要素の色を調整する必要があります。 その場合は、対象の要素を選択し、プロパティ ウィンドウで色を設定します。
参照
参照
概念
その他の技術情報
Video: Sketching Interactions by using Sequence Diagrams (ビデオ: シーケンス図を使用した相互作用のスケッチ)