方法: UML モデル内を移動する
ここでは、主要な UML モデルの種類について説明します。
モデル要素、モデル、およびモデル ストア
アセンブリ Microsoft.VisualStudio.Uml.Interfaces.dll に定義されている型は、UML Specification, version 2.1.2 (UML 仕様、バージョン 2.1.2) に定義された型に対応します。
UML 仕様の型は、Visual Studio Ultimate においてインターフェイスとして実現されます。それぞれの型の前には、"I" という文字が付加されています。たとえば、IElement、IClass、IInteraction、IOperation のようになります。
IElement 以外のすべての型は、1 つ以上のスーパータイプのプロパティを継承します。
モデルの型の概要については、「モデル要素の型」を参照してください。
API の詳細については、「UML モデリング機能拡張の API リファレンス」を参照してください。
関係
UML 仕様に定義されているプロパティおよび関係は、.NET プロパティとして実装されます。
ほとんどの関係では、両方向への移動が可能です。関係はプロパティのペアであり、各端の型の 1 つのプロパティどうしを結び付けるものです。たとえば、プロパティ IElement.Owner および IElement.OwnedElements が関係の両端を表します。したがって、次の式は常に true と評価されます。
IElement c; ... c.OwnedElements.All(x => x.Owner == c)
IAssociation など、多くの関係は、固有のプロパティを指定できるオブジェクトによっても表されます。
モデルの要素を削除すると、その要素が参加する関係が自動的に削除され、もう一方の端のプロパティが更新されます。
UML 仕様で 0..1 の多重度がプロパティに割り当てられている場合、その値は null になることがあります。最大値が 1 を超える多重度は、.NET プロパティの型が IEnumerable<型> であることを示します。
関係の走査の詳細については、「方法: UML API を使用して関係をナビゲートする」を参照してください。
所有権ツリー
モデルには IElement オブジェクトのツリーがあります。どの要素にもプロパティ OwnedElements および Owner があります。
ほとんどの場合、Owner プロパティおよび OwnedElements プロパティの対象は、より具体的な名前を持つ他のプロパティでも参照されます。たとえば、UML 操作は、いずれも UML クラスによって所有されます。したがって、IOperation には Class というプロパティがあり、いずれの IOperation オブジェクトでも Class == Owner です。
ツリーの最上位要素 (Owner がない) は IModel です。IModel は IModelStore に含まれ、そこでは Root になります。
すべてのモデル要素には、作成時に Owner を指定します。詳細については、「方法: 要素および関係を生成する」を参照してください。
図形と図
UML モデル内の要素を図で表示することができます。IElement のサブタイプをそれぞれ異なる種類の図に表示できます。
場合によっては、1 つの要素を複数の図に表示できます。たとえば、IUseCase 要素には複数の IShapes を追加でき、それらの IShapes を 1 つの図または複数の種類の図に表示できます。
図形はツリー内に位置付けられます。ツリーの各端は、ParentShape プロパティと ChildShapes プロパティで表されます。図は、親のない唯一の図形です。図のサーフェイス上の図形は、より小さなパートで構成されます。たとえば、クラスの図形には、属性と操作のコンパートメントがあります。
図形の詳細については、「方法: 図にモデルを表示する」を参照してください。
拡張機能でのモデルへのアクセス
MEF コンポーネントとして定義される Visual Studio 拡張機能では、拡張機能が実行されるコンテキストから情報をインポートするプロパティを宣言できます。
属性の型 |
アクセスを提供する対象 |
詳細情報 |
---|---|---|
Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation .IDiagramContext (Microsoft.VisualStudio.ArchitectureTools.Extensibility.dll 内) |
現在のフォーカス図。 |
|
Microsoft.VisualStudio.Modeling.ExtensionEnablement .ILinkedUndoContext (Microsoft.VisualStudio.Modeling.Sdk.11.0.dll) |
一連の変更をトランザクションにグループ化できます。 |
|
Microsoft.VisualStudio.Shell .SVsServiceProvider (Microsoft.VisualStudio.Shell.Immutable.11.0.dll) |
ホスト Visual Studio。ここから、ファイル、プロジェクト、および他の側面にアクセスできます。 |
コンテキストを取得するには
次に示すインターフェイスのいずれか一方または両方を拡張機能クラス内で宣言します。
[Import] public IDiagramContext DiagramContext { get; set; }
MEF (Managed Extensibility Framework) によりこれらのインターフェイスが定義にバインドされ、これから現在の図、モデル ストア、ルート オブジェクトなどを取得できるようになります。
IDiagram diagram = this.DiagramContext.CurrentDiagram;
IClassDiagram classDiagram = diagram as IClassDiagram;
// or diagrams of other types
IModelStore modelStore = diagram.ModelStore;
IModel model = modelStore.Root;
foreach (IDiagram diagram in modelStore.Diagrams) {...}
foreach (IElement element in modelStore.AllInstances<IUseCase>) {...}
現在の選択項目を取得するには
// All selected shapes and their elements
foreach (IShape shape in diagram.SelectedShapes)
{
IDiagram selectedDiagram = shape as IDiagram;
if (selectedDiagram != null)
{ // no shape selected - user right-clicked the diagram
... Context.CurrentDiagram ...
}
else
{
IElement selectedElement = shape.Element;
...}
// All selected shapes that display a specfic type of element
foreach (IShape<IInterface> in
diagram.GetSelectedShapes<IInterface>())
{...}
別のモデルまたは図へのアクセス
次の操作を行うことができます。
Visual Studio Modelbus を使用し、さまざまなモデルの要素間のリンクを生成します。詳細については、「方法: UML モデルを他のモデルおよびツールと統合する」を参照してください。
モデリング プロジェクトと図を Visual Studio ユーザー インターフェイスに表示させず、読み取り専用で読み込みます。詳細については、「方法: プログラム コードで UML モデルを読み取る」を参照してください。
Visual Studio でモデリング プロジェクトと図を開き、コンテンツにアクセスします。詳細については、「方法: Visual Studio API を使用して UML モデルを開く」を参照してください。