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

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

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

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

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

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

Ee330925.collapse_all(ru-ru,VS.110).gifСвязи

Свойства и связи, определенные в 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.

Ee330925.collapse_all(ru-ru,VS.110).gifДерево собственности

В модели содержится дерево объектов 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.11.0.dll)

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

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

Microsoft.VisualStudio.Shell .SVsServiceProvider

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

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

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

Ee330925.collapse_all(ru-ru,VS.110).gifПолучение контекста

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

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

Ee330925.collapse_all(ru-ru,VS.110).gifПолучение текущего выделения

// 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