Como: navegar no modelo UML
Este tópico apresenta os tipos principais do modelo UML.
Os Elementos de Modelo, Modelo e Armazenamento de Modelo
Os tipos definidos no assembly Microsoft.VisualStudio.Uml.Interfaces.dll correspondem aos tipos definidos na Especificação UML, versão 2.1.2.
Tipos na Especificação UML são percebidos como interfaces no Visual Studio Ultimate. A letra 'I' é acrescentada ao nome de cada tipo. Por exemplo: IElement, IClass, IInteraction, IOperation.
Todos os tipos, exceto IElement, herdam propriedades de um ou mais supertipos.
Para um resumo dos tipos de modelo, consulte Tipos de elemento de modelo.
Para obter detalhes completos da API, consulte Referência de API para extensibilidade de modelagem UML.
Relações
As propriedades e relações definidas na Especificação de UML são implementadas como propriedades .NET.
A maioria das relações são navegáveis em ambas as direções. Uma relação corresponde a um par de propriedades, com uma propriedade no tipo em cada final. Por exemplo, as propriedades IElement.Owner e IElement.OwnedElements representam dois fins de uma relação. Portanto, essa expressão sempre será avaliada como verdadeira:
IElement c; ... c.OwnedElements.All(x => x.Owner == c)
Muitas relações, como IAssociation, também são representadas por um objeto que pode ter suas próprias propriedades.
Se você excluir um elemento do modelo, qualquer relacionamento no qual ele participa é excluído automaticamente, e a propriedade é atualizada no extremo oposto.
Se a especificação de UML atribuir uma multiplicidade de 0..1 a uma propriedade, ela poderá ter o valor null. Uma multiplicidade com máximo maior que 1 significa que a propriedade .NET tem o tipo: IEnumerable<Type>.
Para obter mais informações sobre relações de atravessamento, consulte Como navegar em relações com a API UML.
A árvore de propriedade
Um modelo contém uma árvore de objetos IElement. Cada elemento tem propriedades OwnedElements e Owner.
Na maioria dos casos, os destinos das propriedades Owner e OwnedElements também são referenciados por outras propriedades que têm um nome mais específico. Por exemplo, cada operação de UML é pertencente a uma classe de UML. Portanto, IOperation tem uma propriedade chamada Class e em cada objeto IOperation, Class == Owner.
O elemento no topo da árvore, que não tem nenhum Proprietário, é um IModel. O IModel está contido em um IModelStore, no qual ele é o Root.
Cada elemento de modelo é criado com um proprietário. Para obter mais informações, consulte Como criar elementos e relações.
Formas e diagramas
Os elementos no modelo de UML podem ser exibidos em diagramas. Os diferentes tipos de diagramas podem exibir subtipos diferentes de IElement.
Em alguns casos, um elemento pode aparecer em mais de um diagrama. Por exemplo, um elemento de IUseCase pode ter vários IShapes, que podem aparecer em um diagrama ou em diagramas diferentes.
As formas são organizadas em uma árvore. As bordas de árvore são representadas pelas propriedades ParentShape e ChildShapes. Os diagramas são as únicas formas que não têm pais. As formas na superfície de um diagrama são compostas de partes menores. Por exemplo, uma forma de classe tem compartimentos para atributos e operações.
Para obter mais informações sobre formas, consulte Como exibir um modelo em diagramas.
Acesso ao modelo em extensões
Nas extensões do Visual Studio definidas como componentes de MEF, você pode declarar as propriedades que importam informações do contexto no qual a extensão é executada.
Tipo de atributo |
Permite o acesso a |
Mais informações |
---|---|---|
Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation .IDiagramContext (em Microsoft.VisualStudio.ArchitectureTools.Extensibility.dll) |
O diagrama atual de foco. |
|
Microsoft.VisualStudio.Modeling.ExtensionEnablement .ILinkedUndoContext (em Microsoft.VisualStudio.Modeling.Sdk.12.0.dll) |
Permite o agrupamento das alterações em transações. |
|
Microsoft.VisualStudio.Shell .SVsServiceProvider (em Microsoft.VisualStudio.Shell.Immutable.12.0.dll) |
O host Visual Studio. Lá você pode acessar arquivos, projetos e outros aspectos. |
Para obter o Contexto
Declare uma ou ambas as seguintes interfaces dentro da classe de extensão:
[Import] public IDiagramContext DiagramContext { get; set; }
O MEF (Managed Extensibility Framework) as associará às definições das quais você pode obter o diagrama atual, o armazenamento de modelo, o objeto raiz e assim por diante:
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 obter a seleção atual
// 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>())
{...}
Acessando outro modelo ou diagramas
Você pode:
Use o barramento o modelo de Visual Studio para criar links entre elementos em modelos diferentes. Para obter mais informações, consulte Como integrar modelos UML a outros modelos e ferramentas.
Carregar um projeto de modelagem e diagramas no modo somente leitura sem torná-los visíveis na interface do usuário do Visual Studio. Para obter mais informações, consulte Como ler um modelo UML no código do programa.
Abra um projeto de modelagem e seus diagramas no Visual Studio e acesse o conteúdo. Para obter mais informações, consulte Como abrir um modelo UML usando a API do Visual Studio.