方法: 要素および関係を生成する
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"; ...
関連の生成
関連を生成するには
関連の所有者を取得します。通常、所有者は、関係のソース端を含むパッケージまたはモデルです。
所有者上で必要な Create メソッドを呼び出します。
関係のプロパティ (たとえば、名前) を設定します。
次に例を示します。
IAssociation association = subject.Package.CreateAssociation(subject, observer); association .Name = "Observes";
関係の両端のプロパティを設定します。 常に 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();
モデルから要素を削除すると、次の操作が行われます。
要素にリンクしているすべての関係も削除されます。
図内で要素を表していたすべてのシェイプも削除されます。