UML은 OMG에 의해서 표준 객체지향 모델링 언어로 승인 받았다. 그러나, UML을 지원하는 몇몇의 CASE 도구들이 생성한 C++ 코드는 1대 n 관계나 aggregation 관계의 의미를 정확히 반영하지 못하고 있다. 또한, 상용 CASE 도구들이 하나의 UML 클래스 다이어그램에서 너무 많은 프로그래밍 언어를 지원하기 때문에, 그들은 C++언어가 가지는 특징을 효율적으로 지원하지 못하고 있다. 제안된 C++코드 생성기는 1대 n의 관계, aggregation 관계, 코드 패턴(code pattern), 디자인 패턴(design pattern)을 지원한다.본 논문에서는 UML 클래스 다이어그램 기반의 효율적인 C++ 코드 생성기의 설계와 구현에 대하여 기술한다.
UML은 OMG에 의해서 표준 객체지향 모델링 언어로 승인 받았다. 그러나, UML을 지원하는 몇몇의 CASE 도구들이 생성한 C++ 코드는 1대 n 관계나 aggregation 관계의 의미를 정확히 반영하지 못하고 있다. 또한, 상용 CASE 도구들이 하나의 UML 클래스 다이어그램에서 너무 많은 프로그래밍 언어를 지원하기 때문에, 그들은 C++언어가 가지는 특징을 효율적으로 지원하지 못하고 있다. 제안된 C++코드 생성기는 1대 n의 관계, aggregation 관계, 코드 패턴(code pattern), 디자인 패턴(design pattern)을 지원한다.본 논문에서는 UML 클래스 다이어그램 기반의 효율적인 C++ 코드 생성기의 설계와 구현에 대하여 기술한다.
The Unified Modeling Language(UML) became the standard object oriented modeling language approved by Object Management Group(OMG). However, C++ codes which are generated by some CASE tools supporting UML do not reflect the correct semantics of one-to-many relationship and aggregation relationship. A...
The Unified Modeling Language(UML) became the standard object oriented modeling language approved by Object Management Group(OMG). However, C++ codes which are generated by some CASE tools supporting UML do not reflect the correct semantics of one-to-many relationship and aggregation relationship. Additionally, since the commercial CASE tools support too many programming languages on one UML class diagram, they do not support efficiently the characteristics of C++ language. Our C++ code generator supports one-to-many relationship, aggregation relationship, code patterns and design patterns. In this paper, we describe design and implementation of the efficient C++ code generator based on UML class diagram.
The Unified Modeling Language(UML) became the standard object oriented modeling language approved by Object Management Group(OMG). However, C++ codes which are generated by some CASE tools supporting UML do not reflect the correct semantics of one-to-many relationship and aggregation relationship. Additionally, since the commercial CASE tools support too many programming languages on one UML class diagram, they do not support efficiently the characteristics of C++ language. Our C++ code generator supports one-to-many relationship, aggregation relationship, code patterns and design patterns. In this paper, we describe design and implementation of the efficient C++ code generator based on UML class diagram.
* AI 자동 식별 결과로 적합하지 않은 문장이 있을 수 있으니, 이용에 유의하시기 바랍니다.
문제 정의
본 코드 생성기에서 사용하고 있는 코드 패턴의 대해서 알아보도록 하자.
것이다. 이 설계는 각 모듈간의 독립성을 보장하고, 유지 보수에 적은 비용이 들 수 있도록 하는 것이다. 유지 보수를 하는 프로그래머는 전체적인 시스템의 기능을 알기 위해서, 전체 코드를 다 살펴보지 않고도 쉽게 이해할 수 있어야 한다.
가설 설정
. 시스템 설계자가 의사 소통, 문서화, 새로운 설계 대안을 말할 때, 공용어 역할을 한다.
. 클래스 라이브러리를 배울 때, 배우는 시간을 줄일 수 있다. 왜냐 하면, 설계의 이유를 파악할 수 있기 때문이다.
제안 방법
UML을 지원하는 많은 상용 CASE 도구들은 디자인패턴을 지원하고 있대4 5], 본 논문의 코드 생성기는 하나의 디자인 패턴을 하나의 템플릿으로 만들어서, 사용자는 필요한 정보만을 추가하여, 각 디자인 패턴이 가지는 장점을 이용할 수 있게 하였다.
디자인 패턴은 그 자체가 UML 클래스 다이어그램으로 표현이 가능하기때문에, C++의 템플릿처럼 제공하여 사용자가 자신에게 필요한 정보를 추가하여 사용하면 유용한 디자인이 될 수 있다. 각각의 디자인 패턴을 C++의 템플릿처럼 제공하여 사용자가 필요한 항목을 추가하여 사용할 수 있도록 하였다. 예를 들어, 본 코드 생성기에서는 (그림 1-a)처럼 Bridge 패턴을 사용할 수 있는 템플릿을 제공한다.
것을 돕는다. 그리고 상용 CASE 도구에서 C++ 코드를 생성할 때 발생하는 의미상의 부적절성을 STL(Standard Template Library) 컨테이너 클래스를 이용하여 해결하고, 나아가서 여러 가지 C++코드 패턴과 디자인 패턴을 제공하여, C++을 사용하여 시스템을 개발하기 위한 객체지향 설계를 도와준다
또한 시스템의 설계보다는 시스템 구현을 도와주는 역할을 수행한다. 논문에서 제안한 코드 생성기는 Code Navigator for C++에서 사용하는 몇 가지 C++코드 패턴을 지원하여 사용자의 반복적인 작업을 자동화하였다.
패러다임 플러스나 래셔널 로즈와 같은 상용 CASE 도구들이 다양한 언어를 지원하기 때문에 C++ 같은 특정 언어를 위한 코드 패턴을 명시적으로 지원하기 힘들고, C++가 가지는 특징을 잘 반영하기도 어렵다 본 코드 생성기는 C++만을 대상으로 하기 때문에 C++ 코드 패턴을 효율적으로 지원할 수 있다. 또한 1대 n 관계나 aggregation 관계를 C++코드로 생성하기 위해서 STL 컨테이너 클래스를 사용하였다. 그러나 상용 CASE 도구에서는 범용성과 호환성을 위해서 라이브러리 수준의 코드 생성을 하지 않았다.
본 논문에서는 사용자가 UML 클래스 다이어그램 기반에서 설계하고, 이것을 C++코드로 직접 생성할 수 있게 함으로써, C++을 사용하여 시스템을 설계하고 구현하는 것을 돕는다. 그리고 상용 CASE 도구에서 C++ 코드를 생성할 때 발생하는 의미상의 부적절성을 STL(Standard Template Library) 컨테이너 클래스를 이용하여 해결하고, 나아가서 여러 가지 C++코드 패턴과 디자인 패턴을 제공하여, C++을 사용하여 시스템을 개발하기 위한 객체지향 설계를 도와준다
generalization 관계는 클래스의 상속관계를 통해서 명확하게 나타난다. 본 코드 생성기는 UML 클래스 다이어그램에서 C++ 코드를 생성할 때, 클래스 다이어그램에서 나타나는 association, aggregation 관계에 대해서 새로운 C++ 표준을 이용하여 적절한 C++ 코드를 생성한다
예를 들어, 본 코드 생성기에서는 (그림 1-a)처럼 Bridge 패턴을 사용할 수 있는 템플릿을 제공한다. 본 코드 생성기에서는 각각의 디자인 패턴을 파일로 저장해서, 사용자가 불러서 사용할 수 있고, 또한 편집도 가능하도록 하였다. 사용자는 (그림 1-b)처럼 자신에게 필요한 정보를 추가하면, 이 디자인 패턴이 제공하는 장점을 이용할 수 있다.
왜냐 하면, 앞으로 C++ 컴파일러는 새로운 C++표준을 지원할 것이기 때문이다. 본 코드 생성기에서는 상용 CASE 도구와 달리 1대 n 관계나 aggregation 관계를 표시하기 위해서 STL 컨테이너 클래스를 이용하였다.
사용자는 UML 클래스 다이어그램 그리기 도구를 이용하여 구현하려는 시스템에 대한 UML 클래스 다이어그램을 작성한다. 사용자가 클래스 객체를 생성하면, 이것은 모두 OODB에 저장이 된다.
하지 않는다. 여기에서는 C++에 대한 코드 패턴을 이용하여 사용자의 반복적인 작업을 자동화하였다. 그러나 특정한 객체지향 방법론을 사용하지 않기 때문에 범용성이 떨어지고, 클래스와 클래스 사이의 정적인 관계를 나타낼 수 있는 방법도 제공하지 않는다.
코드 패턴은 템플릿보다 융통성이 있고, 템플릿이 C++컴파일러에 의해 처리되지만, 코드 패턴은 응용 프로그램에서 특정한 변환기(custom translator)가 제공되어야 한다[11丄 (표 1)에서 C의 매크로와 C++의 템플릿과 코드 패턴에 대하여 비교하였다
대상 데이터
본 코드 생성기는 PC 윈도우 환경에서 마이크로소프트사의 MFC (Microsoft Foundation Class Library) 를 이용하여 구현하였다. 전체 시스템 구성도는 (그림 7) 과같다.
성능/효과
기존의 CASE 도구들이 C++에서 1대 n 관계나 aggregation 관계를 잘 표현하지 못했던 것을, C++의 STL 컨테이너 클래스를 이용함으로써, 생성된 코드가 좀 더 효율성을 가지게 하였다. 또한 C++코드 패턴을 이용하여 사용자의 설계 편의성을 더했고, 디자인 패턴의 지원을 통하여 객체지향 설계의 질을 높을 수 있는 방법을 제공하였다. 그러나, 본 코드 생성기가 가지는 문제점도 있다.
본 논문의 코드 생성기는 UML 클래스 다이어그램으로부터 C++코드와 문서를 생성하는 일을 수행한다 기존의 상용 CASE 도구가 UML 클래스 다이어그램을 통해서 C++코드와 문서를 생성하는 것보다 C++ 표준라이브러리의 STL 컨테이너 클래스를 이용하여 C++만으로 표현하기 어려운 UML 클래스 다이어그램의 표기 (notation)들을 더 잘 표현할 수 있게 하고, 코드 패턴과 디자인 패턴을 지원해서 C++을 위한 객체 지향 설계의 틀을 마련하였다
후속연구
향후 연구 방향은 설계 단계에서 에러를 검출하고 이를 사용자에게 알려 주는 부분에 대한 연구와 OODB에 저장된 데이터를 효율적으로 저장하고 검색할 수 있는 정보 저장소에 대한 연구가 필요할 것이다.
참고문헌 (19)
OCS Ltd, 'C++ New Standard,' http://www.ocsltd.com/ c++/, 1997
K. Scott and M. Fowler, 'UML Distilled,' Addison-Wesley, 1997
S. Khoshafian and R. Abnous. 'Object Orientation,' John Willey & Sons, 1995
Rational Software, 'Rational Rose 98i,' http://www.rational.com/rose, 1999
Quintesoft Company, 'Code Navigator for C++(TM),' http://www.quintessoft.com/, 1997
C. Kramer and L. Prechelt, 'Design Recovery by Automated Search for Structural Design Patternsin OO Software,' Conf. of Reverse Engineering, Nov. IEEE'96, 1996
E. Gamma, et. al., 'Design Patterns - Elements of Reusable Object-Oriented Software,' Addison-Wesley, 1995
M. Meijers, et. al., 'Tool Support for Object-Oriented Design Patterns,' Proceedings of ECOOP'97, 1997
I. Sommerville, 'Software Engineering,' Addison-Wesley, 1995
※ AI-Helper는 부적절한 답변을 할 수 있습니다.