변환은 UML 연관 관계에서 구성원 변수를 생성합니다. 비컴포지션 연관을 통해, 변환은 포인터 오퍼레이터(*)를 속성의 유형 규정자에 추가합니다. 다음 표에서는 변환이 C++ 요소를 생성하기 위해 사용하는 연관 종료점 특성을 나열합니다.
| UML 특성 | C++ 요소 |
|---|---|
| 이름 | 새 구성원 변수 |
| 가시성 | 구성원 변수의 가시성 |
변환은 UML 일반화 관계의 대상에 대한 상속을 생성하고 다중 상속을 지원합니다. 변환은 생성된 헤더 파일에 대상 헤더 파일을 포함시킵니다. «cpp_generalization» 스테레오타입의 특성을 설정하여 상속 범위와 상속의 가상 여부를 지정할 수 있습니다.
종속 관계는 보통 클래스 또는 열거를 참조합니다. 기본적으로 변환은 C++ 헤더 파일에서 포워드 참조를 생성하고 본문 파일에서 #include 지시문을 생성합니다.
종속 관계를 헤더 파일의 #include 지시문으로 변환하려면 «cpp_dependency» 스테레오타입의 isInclusionInHeader 필드를 true로 설정하십시오. 또한 «cpp_friend» 스테레오타입을 종속 관계에 적용하면 헤더 파일에 #include 지시문이 생성되고 종속성 요소 이름 앞에 friend 키워드가 추가됩니다.
UML 클래스는 UML 인터페이스를 구현할 수 있습니다. 변환은 이 관계를 C++ 클래스에 대한 상속으로 변환합니다. «cpp_generalization» 스테레오타입이 실현(realization) 관계에 적용되고 GeneralizationKind 특성 값이 public인 경우 변환은 public 키워드를 상속에 적용합니다.
다음 표에서는 변환이 Class2 및 Interface1 사이의 구현 관계와 Class2 및 Class1 사이에 «cpp_friend» 스테레오타입이 적용된 종속 관계를 변환할 때 생성하는 코드를 나열합니다.
| UML 요소 | 변환 출력 |
|---|---|
![]() |
#ifndef CLASS2_H
#define CLASS2_H
//Begin section for file Class2.h
//TODO: Add definitions that you want preserved
//End section for file Class2.h
#include "Interface1.h"
#include "Class1.h"
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
class Class2 : Interface1
{
//Begin section for Class2
//TODO: Add attributes that you want preserved
//End section for Class2
public:
friend class Class1;
}; //end Class Class2
#endif
|
변환은 템플리트 매개변수가 있는 UML 클래스에서 템플리트 클래스를 생성합니다.
변환은 Class1이라는 템플리트 클래스와 바인딩 관계가 있는 UML 클래스를 템플리트 클래스 Class1의 인스턴스화로 변환합니다. 변환은 정규 매개변수를 실제 매개변수로 분석하기 위해 바인딩 관계에서 지정하는 매개변수 대체를 사용합니다.
클래스가 여러 바인딩 관계에서 이용자인 경우 변환은 발견하는 첫 번째 바인딩 관계만 변환합니다.
변환은 인스턴스화된 클래스 포함 목록에 템플리트 매개변수의 데이터 유형을 추가합니다.
변환은 정규 매개변수로 사용되는 매개변수화된 클래스 및 템플리트에서 정적 변수를 포함하는 것과 같이 템플리트 클래스를 복합적으로 사용하는 패턴을 지원하지 않습니다.
| UML 요소 | 변환 출력 |
|---|---|
![]() |
TemplateClass1.h:#ifndef TEMPLATECLASS1_H
#define TEMPLATECLASS1_H
//Begin section for file TemplateClass1.h
//TODO: Add definitions that you want preserved
//End section for file TemplateClass1.h
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
template <class T1>
class TemplateClass1
{
//Begin section for TemplateClass1
//TODO: Add attributes that you want preserved
//End section for TemplateClass1
private:
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
T1 attribute1;
public:
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Operation1(T1 Parameter1);
}; //end Class TemplateClass1
#endif
TemplateClass.cpp:
#include "TemplateClass1.h"
//Begin section for file TemplateClass1.cpp
//TODO: Add definitions that you want preserved
//End section for file TemplateClass1.cpp
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
template <class T1> int TemplateClass1<T1>::Operation1(T1 Parameter1)
{
//TODO Auto-generated method stub
return 0;
}
ParamClass1.h:
#ifndef PARAMCLASS1_H
#define PARAMCLASS1_H
//Begin section for file ParamClass1.h
//TODO: Add definitions that you want preserved
//End section for file ParamClass1.h
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
class ParamClass1
{
//Begin section for ParamClass1
//TODO: Add attributes that you want preserved
//End section for ParamClass1
}; //end Class ParamClass1
#endif
UserClass1.h:
#ifndef USERCLASS1_H
#define USERCLASS1_H
//Begin section for file UserClass1.h
//TODO: Add definitions that you want preserved
//End section for file UserClass1.h
#include "TemplateClass1.h"
#include "ParamClass1.h"
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
class UserClass1
{
//Begin section for UserClass1
//TODO: Add attributes that you want preserved
//End section for UserClass1
private:
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
TemplateClass1<ParamClass1> attribute1;
}; //end Class UserClass1
Binding1.h:
#ifndef BINDING1_H #define BINDING1_H //Begin section for file Binding1.h //TODO: Add definitions that you want preserved //End section for file Binding1.h #include "TemplateClass1.h" #include "ParamClass1.h" typedef TemplateClass1<ParamClass1> Binding1; #endif |