HOW TO:巡覽 UML 模型

本主題介紹 UML 模型的主要型別。

模型項目、模型和模型存放區

Microsoft.VisualStudio.Uml.Interfaces.dll 組件中定義的型別會對應於 UML 規格 2.1.2 版中定義的型別。

UML 規格中的型別會實現為 Visual Studio Ultimate 中的介面。每一個型別的名稱前面都會加上字母 'I'。例如:IElementIClassIInteractionIOperation

除了 IElement 之外,所有型別的屬性都繼承自一個或多個超級型別。

Ee330925.collapse_all(zh-tw,VS.110).gif關聯性

UML 規格中定義的屬性和關聯性會實作為 .NET 屬性。

大部分關聯性都可以雙向巡覽。一個關聯性對應於一對屬性,而每一端各有一個型別屬性。例如,IElement.Owner 和 IElement.OwnedElements 屬性代表關聯性的兩端。因此,此運算式一律會評估為 true:

IElement c; ... c.OwnedElements.All(x => x.Owner == c)

有許多關聯性 (如 IAssociation) 也可以由具有專屬屬性的物件來代表。

如果您刪除模型中的項目,則會自動刪除該項目所參與的任何關聯性,而另一端的屬性會隨之更新。

如果 UML 規格指派多重性 0..1 給屬性,則其值可能為 null。多重性的最大值大於 1 時,表示 .NET 屬性的型別為:IEnumerable<型別>。

如需周遊關聯性的詳細資訊,請參閱 HOW TO:使用 UML API 瀏覽關聯性

Ee330925.collapse_all(zh-tw,VS.110).gif擁有權樹狀結構

包含 IElement 物件樹狀結構的模型。每一個項目都具有 OwnedElements 和 Owner 屬性。

在大多數情況下,Owner 和 OwnedElements 屬性的目標也會在名稱更明確的其他屬性中參考。例如,每一項 UML 作業是由 UML 類別所擁有。因此,IOperation 具有名稱為 Class 的屬性,而且在每一個 IOperation 物件中,Class == Owner。

樹狀結構的最上層項目 (該項目沒有 Owner) 為 IModel。IModel 包含在 IModelStore 中,而且是其中的 Root

每一個模型項目都是使用 Owner 建立的。如需詳細資訊,請參閱HOW TO:建立項目與關聯性

類別圖表:模型、圖表、圖案和項目

圖案和圖表

UML 模型中的項目可以顯示在圖表上。不同類型的圖表可以顯示不同子類型的 IElement。

在某些情況下,項目可能會出現在多個圖表上。例如,IUseCase 項目可以有數個 IShape,而這些圖案可能會出現在一個圖表或不同圖表上。

圖案可以樹狀結構排列。樹狀結構的邊緣是由 ParentShape 和 ChildShapes 屬性來表示。圖表是唯一沒有父代的圖案。圖表表面上的圖案是由許多小部分所組成。例如,類別圖案具有屬性和作業的區間。

如需圖案的詳細資訊,請參閱 HOW TO:在圖表上顯示模型

存取擴充功能中的模型

在已定義為 MEF 元件的 Visual Studio 擴充功能中,您可以宣告用於從擴充功能執行所在環境匯入資訊的屬性。

屬性型別

這可供存取

詳細資訊

Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation

.IDiagramContext

(在 Microsoft.VisualStudio.ArchitectureTools.Extensibility.dll 中)

目前的焦點圖表。

HOW TO:在模型圖表上定義功能表命令

Microsoft.VisualStudio.Modeling.ExtensionEnablement

.ILinkedUndoContext

(在 Microsoft.VisualStudio.Modeling.Sdk.11.0.dll 中)

可讓您將變更分組為不同的交易。

HOW TO:使用交易連結模型更新

Microsoft.VisualStudio.Shell .SVsServiceProvider

(在 Microsoft.VisualStudio.Shell.Immutable.11.0.dll 中)

主機 Visual Studio。您可以從該處存取檔案、專案和其他層面。

HOW TO:使用 Visual Studio API 開啟 UML 模型

Ee330925.collapse_all(zh-tw,VS.110).gif若要取得內容

在擴充功能類別內,宣告下列一個或兩個介面:

[Import] public IDiagramContext DiagramContext { get; set; }

Managed Extensibility Framework (MEF) 會將這些項目繫結至您可從中取得目前圖表、模型存放區、根物件等的定義:

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>) {...}

Ee330925.collapse_all(zh-tw,VS.110).gif若要取得目前選項

// 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>()) 
{...}

存取其他模型或圖表

您可以:

請參閱

概念

擴充 UML 模型與圖表

使用 UML API 進行程式設計