Gewusst wie: Navigieren im UML-Modell
In diesem Thema werden die Haupttypen des UML-Modells vorgestellt.
Modellelemente, Modell und Modellspeicher
Die in der Microsoft.VisualStudio.Uml.Interfaces.dll der Assembly definierten Typen entsprechen den Typen, die in der UML-Spezifikation 2.1.2 definiert sind.
Die Typen in der UML-Spezifikation werden in Visual Studio Ultimate als Schnittstellen realisiert. Dem Namen jedes Typs wird der Buchstabe "I" vorangestellt. Beispiel: IElement, IClass, IInteraction, IOperation.
Alle Typen mit Ausnahme von IElement erben Eigenschaften von einem oder mehreren Obertypen (Supertypes).
Eine Zusammenfassung der Modelltypen finden Sie unter Modellelementtypen.
Detaillierte Informationen zur API finden Sie unter API-Referenz für UML-Modellierungserweiterbarkeit.
Beziehungen
Eigenschaften und Beziehungen, die in der UML-Spezifikation definiert sind, werden als .NET-Eigenschaften implementiert.
Die meisten Beziehungen ermöglichen eine bidirektionale Navigation. Eine Beziehung entspricht einem Eigenschaftenpaar mit je einer Eigenschaft im Typ an beiden Enden. Beispielsweise stellen die IElement.Owner-Eigenschaft und die IElement.OwnedElements-Eigenschaft zwei Enden einer Beziehung dar. Daher ergibt dieser Ausdruck immer "true":
IElement c; ... c.OwnedElements.All(x => x.Owner == c)
Viele Beziehungen wie IAssociation werden auch durch ein Objekt dargestellt, das über eigene Eigenschaften verfügen kann.
Wenn Sie ein Element aus dem Modell löschen, werden alle Beziehungen, in denen es vorkommt, automatisch gelöscht, und die Eigenschaft am anderen Ende wird aktualisiert.
Wenn die UML-Spezifikation einer Eigenschaft eine Multiplizität von 0..1 zuweist, kann diese den Wert null haben. Eine Multiplizität mit einem höheren Maximalwert als 1 bedeutet, dass die .NET-Eigenschaft den folgenden Typ hat: IEnumerable<Typ>.
Weitere Informationen über das Traversieren von Beziehungen finden Sie unter Gewusst wie: Navigieren in Beziehungen mit der UML-API.
Besitzstruktur
Ein Modell enthält eine Struktur von IElement-Objekten. Jedes Element verfügt über die OwnedElements-Eigenschaft und über die Owner-Eigenschaft.
In den meisten Fällen wird auf die Ziele der Owner-Eigenschaft und der OwnedElements-Eigenschaft auch von anderen Eigenschaften verwiesen, die über spezifischere Namen verfügen. So befindet sich jeder UML-Vorgang beispielsweise im Besitz einer UML-Klasse. IOperation verfügt daher über eine Class-Eigenschaft, und in jedem IOperation-Objekt gilt Class == Owner.
Das oberste Element der Struktur, das nicht über einen Besitzer verfügt, ist ein IModel. Das IModel ist in einem IModelStore enthalten und stellt dessen Root dar.
Jedes Modellelement wird mit einem Besitzer erstellt. Weitere Informationen finden Sie unter Gewusst wie: Erstellen von Elementen und Beziehungen.
Formen und Diagramme
Elemente im UML-Modell können in einem Diagramm angezeigt werden. Je nach Diagrammtyp können unterschiedliche Untertypen von IElement anzeigen.
In einigen Fällen kann ein Element in mehr als einem Diagramm angezeigt werden. IUseCase-Elemente können z. B. über mehrere IShapes verfügen, die in einem Diagramm oder in unterschiedlichen Diagrammen angezeigt werden können.
Formen werden in einer Struktur angeordnet. Die Ränder der Struktur werden durch die ParentShape-Eigenschaft und die ChildShapes-Eigenschaft dargestellt. Diagramme sind die einzigen Formen, die keine übergeordneten Elemente haben. Die Formen auf der Oberfläche eines Diagramms bestehen aus kleineren Teilen. So weist eine Klassenform etwa Depots für Attribute und Operationen auf.
Weitere Informationen über Formen finden Sie unter Gewusst wie: Anzeigen eines Modells in Diagrammen.
Zugreifen auf das Modell in Erweiterungen
In Visual Studio-Erweiterungen, die als MEF-Komponenten definiert werden, können Sie Eigenschaften deklarieren, die Informationen aus dem Kontext importieren, in dem die Erweiterung ausgeführt wird.
Attributtyp |
Bietet Zugriff auf |
Weitere Informationen |
---|---|---|
Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation .IDiagramContext (in Microsoft.VisualStudio.ArchitectureTools.Extensibility.dll) |
Aktuelles Fokusdiagramm |
Gewusst wie: Definieren eines Menübefehls in einem Modellierungsdiagramm |
Microsoft.VisualStudio.Modeling.ExtensionEnablement .ILinkedUndoContext (in Microsoft.VisualStudio.Modeling.Sdk.10.0.dll) |
Gruppieren von Änderungen in Transaktionen |
Gewusst wie: Verknüpfen von Modellaktualisierungen mithilfe von Transaktionen |
Microsoft.VisualStudio.Shell .SVsServiceProvider (in Microsoft.VisualStudio.Shell.Immutable.10.0.dll) |
Visual Studio-Host. Von dort können Sie auf Dateien, Projekte und andere Aspekte zugreifen. |
Gewusst wie: Öffnen eines UML-Modells mit der Visual Studio-API |
So rufen Sie den Kontext ab
Deklarieren Sie eine oder beide der folgenden Schnittstellen in der Erweiterungsklasse:
[Import] public IDiagramContext DiagramContext { get; set; }
Das Managed Extensibility Framework (MEF) bindet diese Schnittstellen an Definitionen, aus denen Sie das aktuelle Diagramm, den Modellspeicher, das Stammobjekt usw. abrufen können:
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>) {...}
So rufen Sie die aktuelle Auswahl ab
// 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>())
{...}
Zugriff auf ein anderes Modell oder Diagramme
Sie haben folgende Möglichkeiten:
Erstellen Sie mit Visual Studio-ModelBus Links zwischen Elementen in unterschiedlichen Modellen. Weitere Informationen finden Sie unter Gewusst wie: Integrieren von UML-Modellen in andere Modelle und Tools.
Laden Sie ein Modellierungsprojekt und Diagramme im schreibgeschützten Modus, ohne sie in der Visual Studio-Benutzeroberfläche anzuzeigen. Weitere Informationen finden Sie unter Gewusst wie: Lesen eines UML-Modells im Programmcode.
Öffnen Sie ein Modellierungsprojekt und die darin enthaltenen Diagramme in Visual Studio, und greifen Sie dann auf den Inhalt zu. Weitere Informationen finden Sie unter Gewusst wie: Öffnen eines UML-Modells mit der Visual Studio-API.