Procedura: esplorare il modello UML

Questo argomento introduce i tipi principali del modello UML.

Elementi di modello, modello e archivio modelli

I tipi definiti nell'assembly Microsoft.VisualStudio.Uml.Interfaces.dll corrispondono ai tipi definiti nella versione 2.1.2 della specifica UML (la pagina potrebbe essere in inglese).

In Visual Studio Ultimate, i tipi nella specifica UML vengono rappresentati come interfacce. La lettera ''I" viene anteposta al nome di ogni tipo. Ad esempio: IElement, IClass, IInteraction, IOperation.

Tutti i tipi ad eccezione di IElement ereditano le proprietà da uno o più supertipi.

Relazioni

Le proprietà e le relazioni definite nella specifica UML vengono implementate come proprietà .NET.

La maggior parte delle relazioni è esplorabile in entrambe le direzioni. Una relazione corrisponde a una coppia di proprietà, ognuna delle quali è nel tipo presente in una delle due estremità. Ad esempio, le proprietà IElement.Owner e IElement.OwnedElements rappresentano le due estremità di una relazione. Pertanto, questa espressione restituirà sempre true:

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

Molte relazioni, ad esempio IAssociation, vengono rappresentate anche da un oggetto che può presentare proprietà.

Se si elimina un elemento dal modello, qualsiasi relazione a cui tale elemento prende parte viene eliminata automaticamente e la proprietà all'altra estremità viene aggiornata.

Se la specifica UML assegna una molteplicità di 0..1 a una proprietà, è possibile che il valore sia null. Una molteplicità con valore massimo maggiore di 1 indica che il tipo della proprietà .NET è IEnumerable<Tipo>.

Per ulteriori informazioni sull'attraversamento di relazioni, vedere Procedura: esplorare relazioni con l'API UML.

Struttura ad albero di proprietà

Un modello contiene una struttura ad albero di oggetti IElement. Ogni elemento presenta le proprietà OwnedElements e Owner.

Nella maggior parte dei casi, anche altre proprietà con nomi più specifici fanno riferimento alle destinazioni delle proprietà Owner e OwnedElements. Ad esempio, ogni operazione UML è di proprietà di una classe UML. Pertanto, IOperation presenta una proprietà denominata Class e, in ogni oggetto IOperation, Class == Owner.

L'elemento di livello principale della struttura ad albero, per cui non esiste alcun proprietario, è un oggetto IModel. L'oggetto IModel è contenuto all'interno di un oggetto IModelStore, in cui rappresenta l'oggetto Root.

Ogni elemento di modello viene creato con un proprietario. Per ulteriori informazioni, vedere Procedura: creare elementi e relazioni.

Diagramma classi: modello, diagramma, forma ed elemento

Forme e diagrammi

Gli elementi del modello UML possono essere visualizzati in diagrammi. Tipi diversi di diagrammi possono visualizzare sottotipi diversi di IElement.

In alcuni casi, un elemento può essere visualizzato in più diagrammi. Ad esempio, un elemento IUseCase può presentare vari oggetti IShapes, che possono essere visualizzati in un unico diagramma o in più diagrammi.

Le forme vengono disposte in una struttura ad albero. I bordi della struttura ad albero vengono rappresentati dalle proprietà ParentShape e ChildShapes. I diagrammi sono le uniche forme prive di elementi padre. Le forme sulla superficie di un diagramma sono composte da parti più piccole. Ad esempio, una forma di classe presenta raggruppamenti per attributi e operazioni.

Per ulteriori informazioni sulle forme, vedere Procedura: visualizzare un modello nei diagrammi.

Accesso al modello nelle estensioni

Nelle estensioni di Visual Studio definite come componenti MEF è possibile dichiarare proprietà che importano informazioni dal contesto di esecuzione dell'estensione.

Tipo di attributo

Oggetto a cui viene fornito l'accesso

Ulteriori informazioni

Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation

.IDiagramContext

(in Microsoft.VisualStudio.ArchitectureTools.Extensibility.dll)

Diagramma avente lo stato attivo corrente.

Procedura: definire un comando di menu in un diagramma di modellazione

Microsoft.VisualStudio.Modeling.ExtensionEnablement

.ILinkedUndoContext

(in Microsoft.VisualStudio.Modeling.Sdk.10.0.dll)

Consente di raggruppare modifiche in transazioni.

Procedura: collegare aggiornamenti di modelli tramite transazioni

Microsoft.VisualStudio.Shell .SVsServiceProvider

(in Microsoft.VisualStudio.Shell.Immutable.10.0.dll)

Visual Studio host. Da qui è possibile accedere a file, progetti e ad altri aspetti.

Procedura: aprire un modello UML tramite l'API di Visual Studio

Per ottenere il contesto

Dichiarare una o entrambe le interfacce seguenti nella classe dell'estensione:

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

Managed Extensibility Framework (MEF) le assocerà alle definizioni da cui è possibile ottenere il diagramma corrente, l'archivio modelli, l'oggetto radice e così via:

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

Per ottenere la selezione corrente

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

Accesso a un altro modello o diagrammi

È possibile:

Vedere anche

Concetti

Estensione di modelli e diagrammi UML

Programmazione con l'API UML