UML에서 C++로 변환 재실행 시 고려사항

UML에서 C++로 변환은 생성된 특정 요소에 @generated 태그를 추가합니다. 변환을 재실행할 때 변환이 @generated 태그를 보유하는 특정 요소 위에 겹쳐씁니다. 생성된 코드에 대한 변경사항을 보호하려면 @generated 태그의 특정 인스턴스를 제거해야 합니다. 모델링할 수 없는 C++ 요소를 표시하려면 변환 출력에서 사용자 정의 섹션에 코드를 추가하십시오.

변환에서 생성되는 요소

UML에서 C++로 변환은 다음 요소에 @generated 태그를 추가합니다.

생성된 코드 보호

UML에서 C++로 변환을 재실행할 때 기본적으로 변환은 변환에서 생성되거나 사용자가 작성하는 메소드 본문을 겹쳐쓰지 않습니다. @generated 태그를 제거하는지 여부에 관계없이 변환은 항상 메소드 본문을 보존합니다.

다음 요소에서 @generated 태그를 제거하지 않는 경우 변환은 최상위 레벨인지 또는 중첩 상태인지 여부에 관계없이 겹쳐씁니다.
  • 클래스
  • 구조체
  • 공용체
  • Typedef
  • 열거

변환이 항상 메소드 본문을 보존하더라도, 메소드에서 @generated 태그를 제거하여 메소드에 대한 구조적 변경사항을 보존해야 합니다. 예를 들어, 메소드 서명을 변경하거나 생성자에 개시자(initializer)를 추가하거나 메소드에 예외를 추가하거나 소스 코드에 주석을 추가하는 경우 메소드에 대한 @generated 태그를 제거해야 합니다.

@generated 태그를 제거하지 않는 경우 변환은 @generated 태그가 적용되는 요소 위에 겹쳐씁니다. 변환은 다음 요소도 겹쳐씁니다.
  • Mutable, const, volatile, static, auto 및 register 키워드
  • 클래스의 구성원
  • 매개변수
주: 소스 UML 모델에 메소드를 추가하려면 역변환을 실행하십시오.
다음 표에서는 변환이 보존되고 겹쳐쓰는 요소의 예를 나열합니다. 수정된 코드 열에는 다음 변경사항이 포함되는 코드가 나열됩니다.
변환을 재실행할 경우 다음 사항을 수행합니다.
  • @generated 태그가 제거되었으므로 상속을 보존합니다.
  • @generated 태그가 제거되지 않았으므로 메소드 서명에 대한 변경사항을 겹쳐씁니다.
  • 변환에서 새 메소드 본문이 속하는 메소드를 찾을 수 없으므로 메소드 본문에 대한 변경사항이 보존되지 않습니다.
  • Operation2 메소드 본문에 대한 변경사항을 보존합니다.
UML 모델 요소 생성된 코드 수정된 코드 변환을 재실행한 후 생성된 코드
이 이미지는 정수 유형 속성을 포함하는 Class1 UML 클래스와 매개변수가 없는 두 개의 오퍼레이션을 보여 줍니다. Class1.h:
#ifndef CLASS1_H
#define CLASS1_H
//Begin section for file Class1.h
//TODO: Add definitions that you want preserved
//End section for file Class1.h

//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
class Class1
{

    //Begin section for Class1
    //TODO: Add attributes that you want preserved
    //End section for Class1

    private:

        //@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
        int attribute1;
    public:

        //@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
        int Operation1();

        //@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
        int Operation2();


};  //end Class Class1
#endif
Class1.cpp:
#include "Class1.h"
//Begin section for file Class1.cpp
//TODO: Add definitions that you want preserved
//End section for file Class1.cpp


//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation1() 
{
    //TODO Auto-generated method stub
    return 0;
}


//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation2() 
{
    //TODO Auto-generated method stub
    return 0;
}
Class1.h:
#ifndef CLASS1_H
#define CLASS1_H
//Begin section for file Class1.h
#include Class2.h
//End section for file Class1.h

class Class1:public Class2
{

    //Begin section for Class1
    //TODO: Add attributes that you want preserved
    //End section for Class1

    private:

        //@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
        int attribute1;
    public:

        //@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
        int Operation1(int parameter1);

        //@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
        int Operation2();


};  //end Class Class1
#endif
Class1.cpp:
#include "Class1.h"
//Begin section for file Class1.cpp
//TODO: Add definitions that you want preserved
//End section for file Class1.cpp


//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation1(int parameter1) 
{
    int j = 1;
    return j;
}


//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation2() 
{
    int i = 2;
    return i;
}
Class1.h:
#ifndef CLASS1_H
#define CLASS1_H
//Begin section for file Class1.h
#include Class2.h
//End section for file Class1.h

class Class1:public Class2
{

    //Begin section for Class1
    //TODO: Add attributes that you want preserved
    //End section for Class1

    private:

        //@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
        int attribute1;
    public:

        //@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
        int Operation1();

        //@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
        int Operation2();


};  //end Class Class1
#endif
Class1.cpp:
#include "Class1.h"
//Begin section for file Class1.cpp
//TODO: Add definitions that you want preserved
//End section for file Class1.cpp


//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation1() 
{
    //TODO Auto-generated method stub
    return 0;
}


//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation2() 
{
    int i = 2;
    return I;
}

새 코드 보호

사용자가 고의로 @generated 태그를 요소에 추가하지 않는 한, 변환은 사용자가 C++ 코드에 추가하는 속성, 중첩 클래스, 구조체, 공용체 또는 열거를 겹쳐쓰지 않습니다.
주: 소스 UML 모델에 속성, 중첩 클래스, 구조체, 공용체 또는 열거를 추가하려면 역변환을 실행하십시오.
또한 변환에서 작성되는 사용자 정의 섹션에 코드를 추가할 수도 있습니다. 변환은 사용자 정의 섹션에서 사용자가 지정하는 코드를 제거하거나 겹쳐쓰지 않습니다. 다음 표는 변환이 사용자 정의 섹션을 생성하는 위치를 나열하고 섹션을 사용하는 방법에 대한 예제를 제공합니다.
변환 출력 사용자 정의 섹션 위치 및 사용
헤더 파일 및 본문 파일 변환은 이 파일 각각의 맨 앞에 하나의 사용자 정의 섹션을 추가합니다. 이 섹션을 사용하여 다음 유형의 명령문을 지정할 수 있습니다.
  • #include
  • #defines
  • using
클래스, 공용체, 구조체, 열거 이 사용자 정의 섹션을 사용하여 UML에서 모델링할 수 없는 속성이나 오퍼레이션 또는 둘 다를 지정할 수 있습니다. 예를 들어, 사용자 정의 섹션에서 int myFunction(int* myOtherFunction) 속성과 같은 함수 포인터 속성을 지정할 수 있습니다.

@generated 태그와 사용자 정의 섹션이 가능한 문제점을 피하기 위한 융통성을 제공하여도, 생성된 코드 대신 소스 UML 모델에 대한 구조적 변경을 작성해야 합니다. 또한 역변환을 실행하여 새 메소드나 속성을 소스 UML 모델에 추가할 수도 있습니다.

소스 코드에 속성을 추가하는 방법의 예제

다음 표는 이러한 항목을 나열합니다.
  • UML 모델 요소
  • 모델 요소에 대해 변환에서 생성되는 코드
  • 헤더 파일에 추가되지만 사용자 정의 섹션에 없는 새 속성 attribute2를 포함하는 코드
  • 사용자 정의 섹션에 추가된 새 속성 attribute2를 포함하는 코드
이 예제는 속성을 추가하는 방법을 보여주지만, 동일한 방법으로 오퍼레이션과 중첩 요소를 추가할 수 있습니다.
UML 모델 요소 생성된 코드 사용자 정의 섹션 외부에 추가되는 속성 사용자 정의 섹션에 추가되는 속성
이 이미지는 속성을 포함하는 Class1 UML 클래스와 매개변수가 없는 오퍼레이션을 보여 줍니다.
Class1.h:
#ifndef CLASS1_H
#define CLASS1_H
//Begin section for file Class1.h
//TODO: Add definitions that you want preserved
//End section for file Class1.h

//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
class Class1
{

    //Begin section for Class1
    //TODO: Add attributes that you want preserved
    //End section for Class1

    private:

        //@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
        int attribute1;
    public:

        //@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
        int Operation1();

};  //end Class Class1
#endif
Class1.cpp:
#include "Class1.h"
//Begin section for file Class1.cpp
//TODO: Add definitions that you want preserved
//End section for file Class1.cpp


//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation1() 
{
    //TODO Auto-generated method stub
    return 0;
}	
Class1.h:
#ifndef CLASS1_H
#define CLASS1_H
//Begin section for file Class1.h
//TODO: Add definitions that you want preserved
//End section for file Class1.h

//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
class Class1
{

    //Begin section for Class1
    //TODO: Add attributes that you want preserved
    //End section for Class1

    private:

        //@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
        int attribute1;

	  bool attribute2;
    public:

        //@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
        int Operation1();

};  //end Class Class1

#endif
Class1.cpp:
#include "Class1.h"
//Begin section for file Class1.cpp
//TODO: Add definitions that you want preserved
//End section for file Class1.cpp


//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation1() 
{
    //TODO Auto-generated method stub
    return 0;
}
Class1.h:
#ifndef CLASS1_H
#define CLASS1_H
//Begin section for file Class1.h
//TODO: Add definitions that you want preserved
//End section for file Class1.h

//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
class Class1
{

    //Begin section for Class1
        bool attribute2;
    //End section for Class1

    private:

        //@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
        int attribute1;

    public:

        //@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
        int Operation1();

};  //end Class Class1

#endif
Class1.cpp:
#include "Class1.h"
//Begin section for file Class1.cpp
//TODO: Add definitions that you want preserved
//End section for file Class1.cpp


//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation1() 
{
    //TODO Auto-generated method stub
    return 0;
}

피드백