Практическое руководство. Навигация по 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.11.0.dll) |
Позволяет группировать изменения в транзакции. |
Практическое руководство. Связывание обновлений модели с использованием транзакций |
Microsoft.VisualStudio.Shell .SVsServiceProvider (в Microsoft.VisualStudio.Shell.Immutable.11.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.