Поделиться через


Практическое руководство. Навигация по UML-модели

В этом разделе представлены основные типы UML-модели.

Элементы модели, модель и ее хранилище

Типы, определенные в сборке Microsoft.VisualStudio.Uml.Interfaces.dll, соответствуют типам, определенным в спецификации UML версии 2.1.2.

Типы в UML-спецификации реализуются как интерфейсы в Visual Studio Ultimate. Перед именем каждого типа добавляется буква "I". Например, IElement, IClass, IInteraction, IOperation.

Все типы, кроме IElement, наследуют свойства от одного или нескольких супертипов.

Связи

Свойства и связи, определенные в UML-спецификации, реализуются в виде свойств .NET.

Большинство связей поддерживают переходы в обоих направлениях. Связи соответствуют паре свойств: по одному свойству на каждом конце. Например, свойства IElement.Owner и IElement.OwnedElements соответствуют двум концам связи. Поэтому значением этого выражения всегда будет true:

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

Многие связи, например IAssociation, представляются также с помощью объекта, у которого могут быть свои собственные свойства.

При удалении элемента из модели все связи, в которых он был задействован, автоматически удаляются с обновлением свойства на другом конце.

Если в UML-спецификации для свойства задается количество элементов 0..1, оно может иметь значение null. Если максимальное значение числа элементов превышает 1, свойство .NET принадлежит к типу IEnumerable<Тип>.

Дополнительные сведения о просмотре связей см. в разделе Практическое руководство. Переход по отношениям с помощью UML API.

Дерево собственности

В модели содержится дерево объектов IElement. У каждого элемента есть свойства OwnedElements и Owner.

В большинстве случаев на свойства Owner и OwnedElements на противоположном конце связи также ссылаются другие свойства с более характерными именами. Например, каждый оператор UML принадлежит классу UML. Поэтому у типа IOperation есть свойство с именем Class и в каждом объекте IOperation его значение равно Class == Owner.

Самый верхний элемент в дереве, у которого нет владельца, — IModel. Тип IModel содержится в объекте IModelStore, в котором он является свойством Root.

Каждый элемент модели создается с владельцем. Дополнительные сведения см. в разделе Практическое руководство. Создание элементов и отношений.

Схема классов: модель, схема, фигура и элемент

Фигуры и схемы

В UML-модели элементы можно отобразить на схемах. На разных типах схем могут отображаться различные подтипы IElement.

В некоторых случаях элемент может отображаться на нескольких схемах. Например, у элемента IUseCase может быть несколько фигур IShape, которые могут отображаться на одной или нескольких схемах.

Фигуры упорядочиваются в виде дерева. Края дерева представлены свойствами ParentShape и ChildShapes. Схемы – это единственные фигуры, у которых нет родительских объектов. Фигуры на поверхности схемы состоят из более мелких частей. Например, у фигуры класса есть секции для атрибутов и операций.

Дополнительные сведения о фигурах см. в разделе Практическое руководство. Отображение модели на схемах.

Доступ к модели в расширениях

В расширениях Visual Studio, определенных в качестве компонентов MEF, можно объявить свойства, импортирующие данные из контекста, в котором выполняется расширение.

Тип атрибута

Доступные объекты

Дополнительные сведения

Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation

.IDiagramContext

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

Текущая фокусная схема.

Практическое руководство. Определение команды меню на схеме моделирования

Microsoft.VisualStudio.Modeling.ExtensionEnablement

.ILinkedUndoContext

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

Позволяет группировать изменения в транзакции.

Практическое руководство. Связывание обновлений модели с использованием транзакций

Microsoft.VisualStudio.Shell .SVsServiceProvider

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

Visual Studio узла. Здесь можно получить доступ к файлам, проектам и другим элементам.

Практическое руководство. Открытие модели UML с помощью API Visual Studio

Получение контекста

Объявите один или оба интерфейса внутри класса расширения:

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

Managed Extensibility Framework (MEF) свяжет их с определениями, из которых можно получить текущую схему, хранилище моделей, корневой объект и т. д.

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

Получение текущего выделения

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

Доступ к другой модели или схемам

Обеспечиваются следующие возможности.

См. также

Основные понятия

Расширение моделей и схем UML

Программирование с UML API