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.
Per un riepilogo dei tipi di modello, vedere Tipi di elemento del modello.
Per informazioni dettagliate sull'API, vedere Riferimento API per l'estensibilità di modellazione UML.
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.
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.11.0.dll) |
Consente di raggruppare modifiche in transazioni. |
Procedura: collegare aggiornamenti di modelli tramite transazioni |
Microsoft.VisualStudio.Shell .SVsServiceProvider (in Microsoft.VisualStudio.Shell.Immutable.11.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:
Utilizzare il Model Bus di Visual Studio per creare collegamenti tra elementi in modelli diversi.Per ulteriori informazioni, vedere Procedura: integrare i modelli UML con altri modelli e strumenti.
Caricare un progetto di modello e diagrammi in modalità sola lettura senza renderlo visibile nell'interfaccia utente di Visual Studio.Per ulteriori informazioni, vedere Procedura: leggere un modello UML nel codice del programma.
Aprire un progetto di modello e relativi diagrammi in Visual Studio, quindi accedere al contenuto.Per ulteriori informazioni, vedere Procedura: aprire un modello UML tramite l'API di Visual Studio.