如何:创建元素和关系

在 Visual Studio 旗舰版的扩展的程序代码中,可以创建和删除元素和关系。

创建模型元素

命名空间导入

必须包括以下 using 语句。

创建方法作为此命名空间中的扩展方法来定义:

using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml;

获取要创建的元素的所有者

模型构成单个树,以使除模型根以外的每一项都有一个所有者。 模型根的类型为 IModel,它属于 IPackage 类型。

如果要创建的元素将显示在特定关系图中(例如,用户的当前关系图),则通常应在链接到该关系图的包中创建它。 例如:

IPackage linkedPackage = Context.CurrentDiagram.Element as IPackage;

下表汇总了常用模型元素的所有权:

要创建的元素

所有者

IActor, IUseCase, IComponent, IClass, IInterface, IEnumeration

IActivity, IInteraction

IPackage, IModel

IAttribute, IOperation

IClass, IInterface

IPart, IPort

IComponent

IAction, IObjectNode

IActivity

ILifeline, IMessage, ICombinedFragment

IInteraction

对所有者调用 Create 方法

方法名称的形式为:CreateOwnedType()。 例如:

IUseCase usecase1 = linkedPackage.CreateUseCase();

某些类型具有更为复杂的创建方法,尤其是在序列图中。 请参见如何:使用 UML API 编辑序列图

对于某些类型的元素,可以使用 SetOwner(newOwner) 在元素的生存期中更改元素的所有者。 

设置名称和其他属性

usecase1.Name = "user logs in";

 

示例

 using Microsoft.VisualStudio.Uml.Classes;
 using Microsoft.VisualStudio.Uml.Extensions;
 ...
  void InstantiateObserverPattern (IPackage package, string namePrefix)
  {    IInterface observer = package.CreateInterface();
       observer.Name = namePrefix + "Observer";
       IOperation operation = observer.CreateOperation();
       operation.Name = "Update";
       IClass subject = package.CreateClass();
       subject.Name = namePrefix + "Subject"; ...

创建关联

创建关联

  1. 获取关联的所有者,它通常是包含关系的源端的包或模型。

  2. 对所有者调用所需的 Create 方法。

  3. 设置关系的属性,例如关系的名称。

    例如:

    IAssociation association = subject.Package.CreateAssociation(subject, observer);
    association .Name = "Observes";
    
  4. 设置关系每一端的属性。 始终有两个 MemberEnds。 例如:

    association .MemberEnds[0].Name = "subject";   // role name
    association .MemberEnds[1].Name = "observers"; // role name
    association .MemberEnds[1].SetBounds("0..*");         
                // multiplicity defaults to "1"
    association.MemberEnds[0].Aggregation = AggregationKind.Composite;
    

创建泛化

IGeneralization generalization = 
  subclass.CreateGeneralization(superClass);

从模型中删除元素、关系或泛化

anElement.Delete();

从模型中删除某个元素时:

  • 也将删除与该元素链接的每个关系。

  • 也将删除在关系图上表示该元素的每个形状。

 

请参见

概念

扩展 UML 模型和关系图

如何:在关系图上显示模型