C++에서 UML로 변환으로 소스 코드 해석

변환이 생성하는 UML 요소는 사용자가 변환의 소스로 지정하는 C++ 코드의 특성에 따라 결정됩니다. C++에서 UML로 변환을 실행할 때 변환은 생성하는 모델에 C++ 변환 프로파일을 적용하고 생성하는 UML 요소에 프로파일의 스테레오타입도 적용합니다.

기본적으로 변환은 소스 C++ 요소와 이름 및 가시성이 같은 UML 요소를 생성합니다. 변환이 C++ 요소를 변환할 수 없는 경우 변환은 요소를 무시합니다. 다음 표는 변환이 C++ 코드 요소를 UML 모델 요소로 변환할 때 생성하는 출력을 나열합니다.

C++ 요소 UML 요소
클래스
  • 소스 C++ 클래스와 이름 및 가시성이 같은 클래스
  • UML 패키지 계층 구조는 소스 C++ 프로젝트의 소스 폴더 계층 구조와 같습니다.
  • C++ 클래스가 수퍼클래스를 확장하는 경우 변환은 클래스와 수퍼클래스 사이에 일반화 관계를 생성합니다.
열거
  • 소스 C++ 패키지와 이름이 같은 패키지에서 이름 및 가시성이 같은 열거
  • 익명 열거의 경우, 변환은 «cpp_enum»이 적용되고 스테레오타입의 isAnonymousEnum 특성을 true로 설정하는 UML 열거를 생성합니다.
네임스페이스
  • «cpp_namespace» 스테레오타입이 적용된 패키지
  • 스테레오타입의 NameSpaceName 속성은 C++ 네임스페이스의 값과 같습니다.
중첩 클래스, 구조체 또는 공용체
  • 중첩 클래스, 구조체 또는 공용체
  • 변환은 최상위 레벨 클래스, 구조체 또는 공용체와 동일한 특성을 갖는 중첩 클래스, 구조체 또는 공용체를 생성합니다.
구조체
  • «cpp_struct» 스테레오타입이 적용된 클래스(이름 및 가시성이 소스 C++ 구조체와 같음)
  • 패키지 계층 구조는 소스 C++ 프로젝트의 소스 폴더 계층 구조와 같습니다.
  • C++ 구조체가 수퍼클래스를 확장하는 경우 변환은 클래스와 수퍼클래스 사이에 일반화 관계를 생성합니다.
Typedef
  • «cpp_typedef»가 적용된 클래스. 스테레오타입의 ImplementationType 속성은 typedef 지정자의 값과 같습니다.
  • 예를 들어, 변환은 typedef 선언 typedef int MyInt를 «cpp_typedef»가 적용된 클래스로 변환하고, 스테레오타입의 ImplementationType 속성을 int로 설정합니다.
공용체
  • «cpp_union» 스테레오타입이 적용된 클래스(이름 및 가시성이 소스 C++ 공용체와 같음)
  • 패키지 계층 구조는 소스 C++ 프로젝트의 소스 폴더 계층 구조와 같습니다.
  • C++ 공용체가 수퍼클래스를 확장하는 경우 변환은 클래스와 수퍼클래스 사이에 일반화 관계를 생성합니다.

글로벌 변수 및 글로벌 함수

변환은 글로벌 변수를 다음 특성의 속성으로 변환합니다.
  • «cpp_type» 스테레오타입이 적용됨
  • isGlobal 특성이 true로 설정됨
  • 생성된 속성이 있는 UML 클래스의 이름이 글로벌 변수가 있는 C++ 소스 파일과 같습니다.
변환은 글로벌 함수를 다음 특성의 오퍼레이션으로 변환합니다.
  • «cpp_operation» 스테레오타입이 적용됨
  • isGlobal 특성이 true로 설정됨
  • 생성된 오퍼레이션이 있는 UML 클래스의 이름이 글로벌 함수가 있는 C++ 소스 파일과 같습니다.

프리프로세서 지시문

변환은 C++ 코드에 있는 프리프로세서 지시문을 변환하지 않습니다. 이 C++ 요소는 UML로 표시할 수 없기 때문입니다. C++ 소스 파일의 사용자 정의 섹션에는 사용자 정의 프리프로세서 지시문을 지정해야 합니다.

C++ 템플리트 클래스

소스 C/C++ 개발 도구(CDT) 프로젝트에 소스 CDT 프로젝트에 없는 클래스를 인스턴스화하는 템플리트 인스턴스화가 포함된 경우, 변환은 템플리트 인스턴스화를 UML 기본 유형으로 변환합니다. 변환은 템플리트 인스턴스화에 대한 참조사항을 대상 모델의 UML 기본 유형에 대한 해당 참조사항으로 변환합니다.

다음 표는 템플리트 인스턴스화가 소스 프로젝트에서 클래스를 인스턴스화할 때 C++에서 UML로 변환이 템플리트 클래스를 변환하는 방법을 나열합니다.
C++ 템플리트 클래스 UML 요소
템플리트 클래스 정의
  • 매개변수화된 클래스(템플리트 매개변수가 클래스(Class) 유형인 경우)
  • 변환은 다른 모든 템플리트 매개변수를 무시하며, 부분 템플리트 클래스도 무시합니다.
  • 다음 예제는 변환이 템플리트 클래스 정의를 UML 매개변수화된 클래스로 변환하는 방법을 보여 줍니다.
    template <class T=""> class stack {
       public:
    	void push(T ob);
    	T pop();
    };
  • 변환은 다음 UML 매개변수화된 클래스를 생성합니다.
    UML 매개변수화된 클래스 stack(push 오퍼레이션과 pop 오퍼레이션이 있음).
typedef 정의에 있는 템플리트 클래스 인스턴스화
  • typedef 선언과 이름이 같은 클래스
  • 변환은 템플리트 클래스 인스턴스화에서 UML 매개변수화된 클래스로 지시하는 바인딩 관계를 생성합니다.
  • 예를 들어, 변환은 typedef 선언 typedef stack<A> myStackA;를 다음 UML 클래스 myStackA로 변환한 후 스택 클래스와의 바인딩 관계를 작성합니다.
    템플리트 클래스 인스턴스화 및 UML 매개변수화된 클래스 사이의 바인딩 관계가 있는 클래스 다이어그램.
typedef 정의에 없는 템플리트 클래스 인스턴스화
  • 대상 UML 모델의 템플리트 인스턴스화 폴더에 있는 클래스
  • 변환은 템플리트 클래스 인스턴스화에서 UML 매개변수화된 클래스로 지시하는 바인딩 관계를 생성합니다.
  • 변환이 템플리트 인스턴스화 폴더에서 생성하는 UML 클래스는 다음 다이어그램에 표시된 이름 지정 스키마를 보유하며 소스 C++ 파일에서의 템플리트 인스턴스화에 해당됩니다.
  • 다음 예제는 변환이 typedef 정의에 없는 템플리트 클래스 인스턴스화를 변환하는 방법을 보여 줍니다.
    class B {
    	stack<A> stackA;
    };
  • 변환은 다음 UML 클래스 stack_A를 생성하고 스택 클래스와의 바인딩 관계를 생성합니다.
    class B에서 stack_A로의 방향 지정된 연관 관계와 stack_A 및 stack 사이의 바인딩 관계

클래스, 구조체 또는 공용체의 C++ 구성원 변수

변환은 클래스, 구조체 또는 공용체의 C++ 구성원 변수를 다음 특성의 UML 특성으로 변환합니다.
  • 생성된 특성의 이름 및 가시성이 C++ 구성원 변수와 같습니다.
  • C++ 구성원 변수의 해당 유형이 C++ 기본 유형인 경우 변환은 유형(Type) 특성을 기존의 C++ 기본 유형으로 설정합니다. 다음 코드를 고려하십시오.
    class Class1{
        int x;
    } 
    변환은 UML 클래스 Class1에 있는 특성 x의 유형과 int C++ 기본 유형 사이의 맵핑을 작성합니다. C++ 유형 라이브러리에는 int 기본 유형이 있습니다.

    다음 표는 C++ 구성원 변수의 해당 유형이 사용자 정의 유형인 경우 변환이 유형(Type) 특성을 설정하는 방법을 나열합니다.

C++ 구성원 변수의 유형이 사용자 정의 유형인 경우 변환은 UML 유형 특성을 대상 UML 모델에 있는 사용자 정의 유형에 해당되는 UML 요소 값으로 설정합니다. 변환이 사용자 정의 유형에 해당되는 모델에서 UML 요소를 판별할 수 없는 경우 변환은 UML 요소와 같은 이름의 UML 기본 유형을 작성하고 새 UML 기본 유형의 이름과 동일하게 UML 특성의 유형을 설정합니다.

다음 표에 있는 예제는 변환이 UML 유형 특성의 값을 설정하는 방법을 나열합니다.
C++ 코드 샘플 유형 특성의 값
class Class2{
};

class Class3{
Class2 x1;
};
변환은 UML 클래스 Class3에 있는 x1 특성의 유형을 Class2(변환이 대상 UML 모델에서 작성)로 설정합니다.

다음 표의 예제는 C++ 구성원 변수의 유형이 다른 CDT 프로젝트에 정의된 유형을 참조할 때 변환이 UML 유형 특성의 값을 설정하는 방법을 나열합니다.

C++ 코드 샘플 유형 특성의 값
CDTProject1 프로젝트에 Class1 클래스가 있습니다.

CDTProject2 프로젝트에 Class2 클래스가 있습니다.

#include "CDTProject1/Class1"
class Class2{
	Class1 x;
};
변환은 UML 특성 x의 유형과 C++ 소스 프로젝트 CDTProject1에 있는 클래스 Class1에 해당되는 시각적 요소 사이의 맵핑을 작성합니다.

다음 표에서는 변환이 특정 구성원 변수에 대해 생성하는 추가 정보를 나열합니다.

C++ 구성원 변수 변환 출력의 추가 특성
const isStatic 특성이 true
mutable 변환은 «cpp_type» 스테레오타입을 특성에 적용하고 스테레오타입의 isMutable 특성이 true로 설정됨
static isStatic 특성이 true
volatile 변환은 «cpp_type» 스테레오타입을 특성에 적용하고 스테레오타입의 isVolatile 특성이 true로 설정됨

클래스, 구조체 또는 공용체의 C++ 구성원 함수

변환은 클래스, 구조체 또는 공용체의 C++ 구성원 함수를 해당되는 UML 클래스의 UML 오퍼레이션으로 변환합니다. 변경이 생성하는 UML 오퍼레이션의 이름 및 가시성은 C++ 구성원 함수와 같습니다. 다음 표는 변환이 특정 함수 매개변수에 대해 생성하는 추가 정보를 나열합니다.

C++ 구성원 함수 변환 출력의 추가 특성
Assignment 변환은 «cpp_assignment» 스테레오타입을 적용하고 생성되는 오퍼레이션의 이름 및 가시성은 = 대입 연산자와 같습니다.
Const 변환이 isQuery 특성을 true로 설정합니다.
Constructor 변환이 «cpp_constructor» 스테레오타입을 적용합니다. C++ 코드의 constructor 메소드가 오버로드되는 경우, 변환은 코드의 constructor 메소드마다 대상 모델에서 해당되는 constructor 메소드를 생성합니다.

변환이 코드에서 중복되는 constructor 메소드를 발견하면, 발견되는 첫 번째 메소드에 대해 constructor 메소드를 생성합니다.

CopyConstructor 변환이 «cpp_copy_constructor» 스테레오타입을 적용합니다. C++ 코드의 copy constructor 메소드가 오버로드되는 경우, 변환은 코드의 copy constructor 메소드마다 대상 모델에서 해당되는 copy constructor 메소드를 생성합니다.

변환이 코드에서 중복되는 copy constructor 메소드를 발견하면, 발견되는 첫 번째 메소드에 대해 copy constructor 메소드를 생성합니다.

Destructor 변환이 «cpp_destructor» 스테레오타입을 적용합니다. C++ 코드의 destructor 메소드가 오버로드되는 경우, 변환은 코드의 destructor 메소드마다 대상 모델에서 해당되는 destructor 메소드를 생성합니다.

변환이 코드에서 중복되는 destructor 메소드를 발견하면, 발견되는 첫 번째 메소드에 대해 destructor 메소드를 생성합니다.

Friend 변환이 «cpp_operation» 스테레오타입을 적용하고 isFriend 특성을 true로 설정합니다.
Inline 변환이 «cpp_operation» 스테레오타입을 적용하고 isInline 특성을 true로 설정합니다.
Pure virtual 변환이 isAbstract 특성을 true로 설정합니다.
Static 변환이 isStatic 특성을 true로 설정합니다.
Virtual 변환이 «cpp_operation» 스테레오타입을 적용하고 isVirtual 특성을 true로 설정합니다.

C++ 함수 매개변수

변환은 C++ 함수 매개변수를 다음 특성의 UML 매개변수로 변환합니다.
  • 생성되는 매개변수의 이름은 C++ 매개변수와 같습니다. C++ 매개변수가 리턴 매개변수인 경우 변환은 매개변수 유형 name을 보유하는 매개변수를 생성합니다.
  • 변환은 매개변수의 유형 특성을 기본 유형이나 모델의 기존 UML 요소로 설정합니다.
  • 변환은 UML 매개변수의 기본값을 C++ 매개변수 값과 동일하게 설정합니다. 다음 C++ 코드를 고려하십시오.
    class one{
        int op(int  x=5);
    }
    변환은 생성된 UML 매개변수 x를 오퍼레이션 op에서 5로 설정합니다.
다음 표는 변환이 특정 함수 매개변수에 대해 생성하는 추가 정보를 나열합니다.
C++ 함수 매개변수 변환 출력
참조 변환이 방향 특성을 inout으로 설정합니다.
리턴 변환이 방향 특성을 return으로 설정합니다.
일반(참조나 리턴 매개변수가 아님) 변환이 방향 특성을 in으로 설정합니다.

유형 수정자

C++ 구성원 변수, 구성원 함수 및 매개변수는 유형에 대한 포인터, 참조 유형 및 배열 유형과 같은 유형 수정자를 지정할 수 있습니다. 이 유형 수정자는 UML에서 표시할 수 없습니다. 다음 표에서는 변환이 유형 수정자를 변환하는 방법을 나열합니다.

유형 수정자 변환 출력
C++ 유형에 대한 포인터 변환은 생성되는 UML 매개변수나 특성에 «cpp_type» 스테레오타입을 적용하고 qualifier 속성을 포인터 오퍼레이터로 설정합니다. 다음 C++ 코드를 고려하십시오.
class MyClass {
	private: char* name;
};

변환은 다음 특성의 name 변수가 있는 UML 클래스 MyClass를 생성합니다.

이 이미지는 qualifier 특성이 별표로 표시되는 포인터 오퍼레이터로 설정됨을 보여 줍니다.
C++ 유형에 대한 참조 변환이 qualifier 속성을 참조 오퍼레이터로 설정합니다.

변환은 소스 코드에서 여러 개의 참조 유형을 변환하는 경우에만 «cpp_type» 스테레오타입을 적용합니다.

변환이 참조 유형의 C++ 매개변수를 변환하는 경우 UML 매개변수의 direction 속성을 inout으로 설정합니다.

다음 C++ 코드를 고려하십시오.

class MyClassClone {
	private:
	MyClassClone clone(MyClassClone& copy);
};

변환은 다음 특성의 리턴 매개변수가 있는 UML 클래스 MyClassClone을 생성합니다.

이 이미지는 qualifier 특성이 앰퍼샌드로 표시되는 참조 오퍼레이터로 설정됨을 보여 줍니다.
배열

1차원 배열의 경우 변환은 UML 매개변수 또는 특성의 다중성을 1차원 값과 동일하게 설정합니다.

변환은 소스 코드에서 여러 개의 차원 배열을 변환하는 경우에만 «cpp_type» 스테레오타입을 적용합니다.

다음 예제는 변환이 유형 int x[10]의 속성에 대한 다중성을 설정하는 방법을 보여 줍니다.

이 이미지는 특성 보기의 일반 페이지를 보여 줍니다. x 특성의 다중성이 10으로 설정됩니다.

변환은 다중성 특성의 하한 및 상한을 속성의 1차원 값으로 설정합니다.


피드백