次の方法で共有


方法: 要素および関係を生成する

Visual Studio Ultimate の拡張機能のプログラム コードにおいて、要素や関係を生成および削除できます。

モデル要素の生成

名前空間インポート

次の using ステートメントを含める必要があります。

生成メソッドは、拡張メソッドとしてこの名前空間に定義されます。

using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml;

生成する要素の所有者の取得

1 つのモデルは 1 つのツリーを構成します。したがって、モデル ルートを除き、すべての項目は 1 つの所有者を持ちます。 モデル ルートは、IPackage の型である IModel 型です。

特定の図 (たとえば、ユーザーの現在の図) に表示される要素を作成する場合、通常は、その図にリンクされているパッケージ内に要素を生成する必要があります。 次に例を示します。

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<所有されている型>() 形式で記述します。 次に例を示します。

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. 関係の両端のプロパティを設定します。 常に 2 つの 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 モデルと図の拡張

方法: 図にモデルを表示する