Cómo: Navegar por el modelo UML
En este tema se presentan los principales tipos del modelo UML.
Modelo, elementos del modelo y almacén de modelos
Los tipos definidos en el ensamblado Microsoft.VisualStudio.Uml.Interfaces.dll corresponden a los tipos definidos en la especificación de UML versión 2.1.2.
Los tipos de la especificación de UML se realizan como interfaces en Visual Studio Ultimate. La letra 'I' se antepone al nombre de cada tipo. Por ejemplo: IElement, IClass, IInteraction, IOperation.
Todos los tipos excepto IElement heredan las propiedades de uno o varios supertipos.
Para obtener un resumen de los tipos del modelo, vea Tipos de elementos del modelo.
Para obtener todos los detalles sobre la API, vea Referencia de la API para la extensibilidad del modelado UML.
Relaciones
Las propiedades y relaciones que se definen en la especificación de UML se implementan como propiedades .NET.
En la mayoría de las relaciones, la navegación puede hacerse en ambas direcciones. Una relación se corresponde con un par de propiedades, con una única propiedad del tipo en cada extremo. Por ejemplo, las propiedades IElement.Owner e IElement.OwnedElements representan dos extremos de una relación. Por tanto, esta expresión siempre se evaluará como true:
IElement c; ... c.OwnedElements.All(x => x.Owner == c)
Muchas relaciones, como IAssociation, también se representan mediante un objeto que puede tener sus propias propiedades.
Si elimina un elemento del modelo, se elimina automáticamente cualquier relación de la que forme parte y se actualiza la propiedad situada en el otro extremo.
Si la especificación de UML asigna una multiplicidad de 0..1 a una propiedad, puede tener el valor null. Una multiplicidad con un valor máximo mayor que 1 significa que la propiedad .NET tiene el tipo: IEnumerable<Type>.
Para obtener más información acerca de cómo se recorren las relaciones, vea Cómo: Navegar por las relaciones con la API de UML.
Árbol de propiedad
Un modelo contiene un árbol de objetos IElement. Cada elemento tiene las propiedades OwnedElements y Owner.
En la mayoría de los casos, también existen referencias a los destinos de las propiedades Owner y OwnedElements en otras propiedades que tienen nombres más específicos. Por ejemplo, cada una de las operaciones de UML pertenece a una clase UML. Por lo tanto, IOperation tiene una propiedad denominada Class, y en cada objeto IOperation, Class == Owner.
El elemento del nivel superior del árbol, que no tiene propietario, es un IModel. El objeto IModel está incluido en un objeto IModelStore, donde es la propiedad Root.
Cada elemento del modelo se crea con un propietario. Para obtener más información, vea Cómo: Crear elementos y relaciones.
Formas y diagramas
Los elementos del modelo UML se pueden representar en diagramas. Pueden aparecer diferentes subtipos de IElement en distintos tipos de diagramas.
En algunos casos, un elemento puede aparecer en varios diagramas. Por ejemplo, un elemento IUseCase puede tener varios objetos IShapes, que pueden aparecer en un único diagrama o en varios diagramas diferentes.
Las formas están organizadas en un árbol. Los bordes del árbol se representan mediante las propiedades ParentShape y ChildShapes. Los diagramas son las únicas formas que no tienen elementos primarios. Las formas de la superficie de un diagrama se crean a partir de elementos más pequeños. Por ejemplo, la forma de una clase tiene compartimientos para los atributos y las operaciones.
Para obtener más información sobre las formas, vea Cómo: Mostrar un modelo en diagramas.
Acceso al modelo en las extensiones
En las extensiones de Visual Studio definidas como componentes MEF, puede declarar propiedades que importen información a partir del contexto en el que se ejecuta la extensión.
Tipo de atributo |
Objeto al que proporciona acceso |
Más información |
---|---|---|
Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation .IDiagramContext (en Microsoft.VisualStudio.ArchitectureTools.Extensibility.dll) |
Diagrama que tiene el foco en la actualidad. |
|
Microsoft.VisualStudio.Modeling.ExtensionEnablement .ILinkedUndoContext (en Microsoft.VisualStudio.Modeling.Sdk.12.0.dll) |
Permite agrupar cambios en transacciones. |
Cómo: Vincular actualizaciones del modelo mediante transacciones |
Microsoft.VisualStudio.Shell .SVsServiceProvider (en Microsoft.VisualStudio.Shell.Immutable.12.0.dll) |
Ejecución de Visual Studio que constituye el host. Desde allí se puede obtener acceso a los archivos, proyectos y otros aspectos. |
Para obtener el contexto
Declare una o las dos interfaces siguientes en la clase de la extensión:
[Import] public IDiagramContext DiagramContext { get; set; }
Managed Extensibility Framework (MEF) establecerá enlaces entre las interfaces y las definiciones a partir de las cuales podrá obtener el diagrama actual, el almacén del modelo, el objeto raíz, etc.
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>) {...}
Para obtener la selección actual
// 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>())
{...}
Tener acceso a otro modelo o diagramas
Puede realizar lo siguiente:
Use Model Bus de Visual Studio para crear vínculos entre elementos de modelos diferentes. Para obtener más información, vea Cómo: Integrar modelos UML con otros modelos y herramientas.
Cargue un proyecto y diagramas de modelado en el modo de solo lectura sin hacerlo visible en la interfaz de usuario de Visual Studio. Para obtener más información, vea Cómo: Leer un modelo UML en el código del programa.
Abra un proyecto de modelado y sus diagramas en Visual Studio y, a continuación, tenga acceso al contenido. Para obtener más información, vea Cómo: Abrir un modelo UML mediante la API de Visual Studio.