방법: 요소 및 관계 만들기
Visual Studio Ultimate 확장의 프로그램 코드에서 요소 및 관계를 만들고 삭제할 수 있습니다.
모델 요소 만들기
네임스페이스 가져오기
다음과 같은 using 문을 포함해야 합니다.
만들기 메서드는 이 네임스페이스에서 확장 메서드로 정의됩니다.
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml;
만들 요소의 소유자 가져오기
모델은 단일 트리를 구성하므로 모델 루트를 제외한 모든 항목은 소유자를 하나씩 가집니다. 모델 루트는 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 메서드 호출
메서드 이름은 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"; ...
연결 만들기
연결을 만들려면
연결의 소유자를 가져옵니다. 대개 관계의 소스 끝을 포함하는 모델 또는 패키지입니다.
소유자에서 필요한 Create 메서드를 호출합니다.
관계의 속성(예: 이름)을 설정합니다.
예를 들면 다음과 같습니다.
IAssociation association = subject.Package.CreateAssociation(subject, observer); association .Name = "Observes";
관계의 각 끝에 대한 속성을 설정합니다. 항상 두 개의 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();
모델에서 요소를 삭제하는 경우
해당 요소에 연결되는 모든 관계도 삭제됩니다.
다이어그램에서 해당 요소를 나타낸 모든 모양도 삭제됩니다.