Практическое руководство. Навигация по UML-модели
В этом разделе представлены основные типы UML-модели.
Элементы модели, модель и ее хранилище
Типы, определенные в сборке Microsoft.VisualStudio.Uml.Interfaces.dll, соответствуют типам, определенным в спецификации UML версии 2.1.2.
Типы в UML-спецификации реализуются как интерфейсы в Visual Studio Ultimate. Перед именем каждого типа добавляется буква "I". Например, IElement, IClass, IInteraction, IOperation.
Все типы, кроме IElement, наследуют свойства от одного или нескольких супертипов.
Краткое описание типов модели см. в разделе Типы элементов модели.
Полные сведения об интерфейсе API см. в разделе Справочник по API для расширения моделей UML.)
Связи
Свойства и связи, определенные в 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>())
{...}
Доступ к другой модели или схемам
Обеспечиваются следующие возможности.
Создание ссылок между элементами в разных моделях с помощью шины модели Visual Studio. Дополнительные сведения см. в разделе Практическое руководство. Интеграция моделей UML с другими моделями и средствами.
Загрузка проекта моделирования и схем в режиме только для чтения, не делая их видимыми в пользовательском интерфейсе Visual Studio. Дополнительные сведения см. в разделе Практическое руководство. Чтение модели UML в программном коде.
Откройте проект моделирования и его схему в Visual Studio и начните работу с содержимым. Дополнительные сведения см. в разделе Практическое руководство. Открытие модели UML с помощью API Visual Studio.