Wednesday, December 27, 2006
YanneDesigner2
YanneDesigner는 C++의 모든 특징들을 제공하는 것은 아니다. C++의 모든 기능들을 그림으로 표현하는 것은 무리이기 때문이다. YanneDesigner는 C/C++ 프로그램을 간단한 몇가지 모델을 사용하여 표현한다. 가장 기본적인 두 모델은 CObject와 Class 이다.
1. Class는 말 그대로 C++의 Class를 나타낸다. 각 Class는 public/protected/private의 3가지 영역으로 이루어지는데, 각 영역을 ClassRegion이라고 정의했다. 각 ClassRegion은 Member Variable과 Method들을 포함하게 된다.
2. CObject는 Class로 표현되지 않는 프로그램 구성 요소들을 표현하기 위해서 사용한다. 예를 들면, 전역 변수(Global Variable)이나, C-Function, struct/union 같은 타입 정의, MACRO 등이 여기에 포함된다.
다음에 설명하는 모델들은 위의 CObject/Class 모델을 구성하는 것으로 실제 프로그램을 나타낸다.
3. Variable : Class 변수나 전역 변수등을 나타낸다 (Class, CObject가 사용).
4. Function : Class의 Method나 일반적인 Function을 나타낸다. Class, CObject가 사용).
5. Macro : C에서 제공하는 Macro 혹은 Macro 함수를 나타낸다. CObject에서만 사용한다. (C++ 언어는 이러한 Macro보다는 const 변수나 inline 함수를 사용할 것을 권장하고 있다).
6. CType : CType은 C에서 제공하는 struct나 union등의 타입 정의를 나타낸다. 이 모델은 Variable들의 집합으로 이루어진다. CObject에서만 사용된다. (C++ 프로그램에서는 struct나 union은 거의 사용하지 않는다. 실제로 C++에서 struct는 public region만으로 이루어진 class와 동일하다.)
7. Typedef : C/C++에서 제공하는 "typedef"를 나타낸다. Class,CObject에서 사용된다.
다음 그림들은 YanneDesigner에서 각 모델이 어떻게 이루어지는 지를 보여준다. 먼저 전체 구조는 다음과 같다.

Class 모델인 YClipBoard의 내부는 다음과 같다. 주황색으로 표시된 개체는 Typedef를, 보라색은 Method를 그리고 분홍색은 Member Variable을 나타낸다. Class는 Typedef, Variable, Function의 3개 개체들로 이루어진다.

CObject는 Typedef, Variable, Function, CType, Macro 모델들을 포함한다. 다음 그림은 GUISupport CObject의 내용을 표시한 것이다.

위 에서 설명한 7개 모델은 프로그램을 작성하는데 필요한 가장 기본적인 모델들이다. 프로그램을 효율적으로 작성하기 위해서는 서로 밀접한 연관을 가지는 요소들을 하나의 큰 단위로 묶어서 관리하는 것이 필수적이다. 이것을 Abstraction이라고 부르는데, Class단위가 아닌 좀 더 큰 단위에서의 Abstraction을 말한다. 예를 들면, Graph data structure는 Node, Edge, Graph, UtilFunc 들로 이루어지는데, 이것들을 하나의 큰 단위인 "GraphUnit"으로 묶어서 관리하면 외부에서 GraphUnit을 사용하는 것이 좀 더 쉬워진다. "Module" 모델은 이러한 Abstraction 기능을 제공한다.
8. Module : 프로그램을 구성하는 개체들을 묶어서 하나의 큰 단위로 나타낸다. 이 모델은 YanneDesigner에서 프로그램을 계층적으로 구성할 수 있게 만드는 핵심 모델이다. Module은 그 내부에 Module을 포함할 수 있으므로, 체계적인 계층구조를 설계하는데 도움을 준다.
다음 그림은 GraphModule의 내부 구조를 나타낸 것이다.

다음에 설명할 Import/ImportedClass 모델은 C/C++에서 "include" 명령을 나타낸다고 보면 된다. 즉, 이미 작성되어 있는 라이브러리등을 불러서 쓸 때 사용하는 모델이다.
9. Import : 외부에서 Include할 파일들의(개체들의) 목록을 나타낸다. 예를 들어, 프로그램이 STL을 사용한다고 하면 "STL"이라는 Import 모델을 생성하고, 그 내용을 [include "string"], [include "map"] 등으로 채우면 된다.
10. ImportedClass : 이것은 외부에서 선언된 Class 이름을 현재 작성 중인 프로그램에 소개하기 위한 모델이다. 프로그램 내에서 사용하는 Class가 외부 Class에서 상속받는 경우, 외부 Class를 그림으로 나타내기 위해 사용하는 모델이다.
다음 그림은 STL Import의 내부 구조를 보여준다. STL 개체는 standard template library를 사용하기 위한 헤더 파일들의 목록을 가지고 있다.

이 밖에 Misc 모델이 있는데, 이것은 그냥 필요할 것 같아서 넣어 놓은 것일뿐, 아직 특별한 기능은 없다. 현재는 문서화를 위한 목적으로 사용하고 있다.
1. Class는 말 그대로 C++의 Class를 나타낸다. 각 Class는 public/protected/private의 3가지 영역으로 이루어지는데, 각 영역을 ClassRegion이라고 정의했다. 각 ClassRegion은 Member Variable과 Method들을 포함하게 된다.
2. CObject는 Class로 표현되지 않는 프로그램 구성 요소들을 표현하기 위해서 사용한다. 예를 들면, 전역 변수(Global Variable)이나, C-Function, struct/union 같은 타입 정의, MACRO 등이 여기에 포함된다.
다음에 설명하는 모델들은 위의 CObject/Class 모델을 구성하는 것으로 실제 프로그램을 나타낸다.
3. Variable : Class 변수나 전역 변수등을 나타낸다 (Class, CObject가 사용).
4. Function : Class의 Method나 일반적인 Function을 나타낸다. Class, CObject가 사용).
5. Macro : C에서 제공하는 Macro 혹은 Macro 함수를 나타낸다. CObject에서만 사용한다. (C++ 언어는 이러한 Macro보다는 const 변수나 inline 함수를 사용할 것을 권장하고 있다).
6. CType : CType은 C에서 제공하는 struct나 union등의 타입 정의를 나타낸다. 이 모델은 Variable들의 집합으로 이루어진다. CObject에서만 사용된다. (C++ 프로그램에서는 struct나 union은 거의 사용하지 않는다. 실제로 C++에서 struct는 public region만으로 이루어진 class와 동일하다.)
7. Typedef : C/C++에서 제공하는 "typedef"를 나타낸다. Class,CObject에서 사용된다.
다음 그림들은 YanneDesigner에서 각 모델이 어떻게 이루어지는 지를 보여준다. 먼저 전체 구조는 다음과 같다.
Class 모델인 YClipBoard의 내부는 다음과 같다. 주황색으로 표시된 개체는 Typedef를, 보라색은 Method를 그리고 분홍색은 Member Variable을 나타낸다. Class는 Typedef, Variable, Function의 3개 개체들로 이루어진다.
CObject는 Typedef, Variable, Function, CType, Macro 모델들을 포함한다. 다음 그림은 GUISupport CObject의 내용을 표시한 것이다.
위 에서 설명한 7개 모델은 프로그램을 작성하는데 필요한 가장 기본적인 모델들이다. 프로그램을 효율적으로 작성하기 위해서는 서로 밀접한 연관을 가지는 요소들을 하나의 큰 단위로 묶어서 관리하는 것이 필수적이다. 이것을 Abstraction이라고 부르는데, Class단위가 아닌 좀 더 큰 단위에서의 Abstraction을 말한다. 예를 들면, Graph data structure는 Node, Edge, Graph, UtilFunc 들로 이루어지는데, 이것들을 하나의 큰 단위인 "GraphUnit"으로 묶어서 관리하면 외부에서 GraphUnit을 사용하는 것이 좀 더 쉬워진다. "Module" 모델은 이러한 Abstraction 기능을 제공한다.
8. Module : 프로그램을 구성하는 개체들을 묶어서 하나의 큰 단위로 나타낸다. 이 모델은 YanneDesigner에서 프로그램을 계층적으로 구성할 수 있게 만드는 핵심 모델이다. Module은 그 내부에 Module을 포함할 수 있으므로, 체계적인 계층구조를 설계하는데 도움을 준다.
다음 그림은 GraphModule의 내부 구조를 나타낸 것이다.
다음에 설명할 Import/ImportedClass 모델은 C/C++에서 "include" 명령을 나타낸다고 보면 된다. 즉, 이미 작성되어 있는 라이브러리등을 불러서 쓸 때 사용하는 모델이다.
9. Import : 외부에서 Include할 파일들의(개체들의) 목록을 나타낸다. 예를 들어, 프로그램이 STL을 사용한다고 하면 "STL"이라는 Import 모델을 생성하고, 그 내용을 [include "string"], [include "map"] 등으로 채우면 된다.
10. ImportedClass : 이것은 외부에서 선언된 Class 이름을 현재 작성 중인 프로그램에 소개하기 위한 모델이다. 프로그램 내에서 사용하는 Class가 외부 Class에서 상속받는 경우, 외부 Class를 그림으로 나타내기 위해 사용하는 모델이다.
다음 그림은 STL Import의 내부 구조를 보여준다. STL 개체는 standard template library를 사용하기 위한 헤더 파일들의 목록을 가지고 있다.
이 밖에 Misc 모델이 있는데, 이것은 그냥 필요할 것 같아서 넣어 놓은 것일뿐, 아직 특별한 기능은 없다. 현재는 문서화를 위한 목적으로 사용하고 있다.