다음 프로젝트를 MFC를 조금 할 줄 알아야 해서 짬이 있는 틈을 타서 시작 해 버렸
습니다. 원래는 기존에 자바로 구현한 Flower를 그대로 리펙토링 할 예정이었는데, 
C++코딩을 너무 안해서 공부를 다시 해야 하고 MFC프레임웍에 익숙해져야 하기 때문에 Flower를 아주 MFC로 구현 해보려고 합니다.

코드가 나름 커졌기 때문에 한번에 똑같이 구현 할 수는 없으니까 작은 단위로 잘라서 구현해 나갈 생각입니다. 이미 구현을 한 것을 다른 언어와 GUI를 이용하는 거라서 크게 어렵지는 않을 것으로 예상합니다.

아자아자~~ 화이팅!!

일단 MFC의 컨트롤들을 잘 못쓰기 때문에 GUI쪽 말고 로직과 자료구조를 구현하는 것에 일단 초점을 맞추고 있습니다.

오늘은 MFC패턴을 적용하여 큰 틀을 잡는 것만 구현 했습니다.

스윙에서는 controller클래스인 DPainter가 있었지만 MFC자체가 controller가 OS가 담당한다고 해서 위와 같은 모양이 되었습니다.DCanvas가 view에 해당되고(실제 MFC의 뷰클래스입니다.) DSymbolManager가 Model이 됩니다. DSymbol은 도형의 최상위 객체이구요.(DFigure와 DProcedure의 틀만 만들었습니다.) DCanvas와 DSymbolManager가 옵저버패턴이 적용되어야 하는데 그건 내일 해야 겠습니다.

마지막으로 오늘 한 코드의 시퀀스 다이어그램을 올립니다.

신고
by danguria 2010.01.21 18:55
도형 객체를 복사하는 루틴을 "prototype pattern"을 적용하고 있는데,

원래 복사 하는 코드에 비효율적인 부분이 있었습니다.

DFigure라고 하는 추상 클래스는 화살표가 아닌 도형을 나타내는데요..

(단말, 처리, 분기도형 등등이 이에 해당합니다.)

여기에는 이 도형이 화살표로 연결되었을 경우 연결된 도형을 알고 있습니다.

또한, 자신에게 들어오거나, 자신으로 부터 나가는 화살표도 알고 있습니다.(알고 있

다는 표현을 한 이유는 정확하게 composition인지, aggregation인지하는 개념에 아

직 익숙하지 않아서 입니다.)

그런데 복사를 할때 자신 도형에 연결된 도형은 복사 하지 않아야 합니다.

그 이유는 그렇게 하기로 정했기 때문이죠..(다른 비슷한 프로그램들도 그렇게 하더

군요..)

하지만 코드에는 이것 들 마져 모두 복사 하고 있었습니다. 그나마 다행? 인것은 그

렇게 복사된 도형들은 도형 꾸러미에 들어가지 않아서 실제로 보여지지는 않았던 것

입니다. 그래서 제가 이런 현상을 눈치채지 못한 것이구요..

가장 비 효율적인 부분은 Procedure도형이 자신과 연결된 procedure 도형 꾸러미

를 모두 복사 하는 것이었습니다. 이것 역시 화면에 보지 지 않습니다만.. 

만일 원래 procedure코드를 변경하더라고 이것이 반영되지 않을 것이라는 버그를 

안고 있더라구요...

어쨌든 다행이 문제를 파악했고, 그에 대한 해답은 간단하기 때문에 룰루랄라 하면

서 고치고 있습니다^^;
신고
by danguria 2010.01.19 11:11
This is demo videos. If you cannot watch the video clearly, please download the demo files and play it.
< Run the program and debug it>



< Create Figure and change its attributes>



< Copy, paste and cut the figures>




< Change figures' level of layer>



< Procedure>



신고
by danguria 2010.01.04 16:03
조금 게을러지긴 했지만 얼추 마무리를 했습니다.

마지막까지 고생을 시킨 것이 있었는데요..

pallet이 생각했던데로 디자인이 되지 않고 자기 멋대로 행동 하더라구요... 

아무튼 이래저래 해서 안정시켜 두었는데 GUI layout을 구성할때 공부가 부족했던것 같습니다.

얕잡아본것이죠...

아무튼 다음주 부터는 controller와 연동하는 것인데 그에 앞서 전체적인 설계를 다시 하면서 연동해야 겠습니다.

함수기능을 염두에 두고 구현 해야 하죠...


신고
by danguria 2009.11.16 00:58
아쉬움이 있는데 디버깅 창을 구현 하였습니다.

디버깅 버튼을 누르면 창이 생기고, 디버깅 종료 버튼을 누르면 창이 사라지도록 했습니다.

이 창은 새로 팝업 되는 창이 아니라, canvas가 위치 하는 곳의 영역 일부를 빌려 위치합니다.

실제 구현은 디버깅 버튼이 눌리면, canvas를 빼내고, JSpiltePane에 canvas와 JTable을 담은 

JScrollPane(JTable담고 있음)을 담아서 canvas가 위치 한 곳에 넣어 줌니다.

실제 디버깅 툴의 UI를 보면 도킹이라고 불리는 기술을 사용하는데 저는 그것을 어떻게 구현하는지도 배울 시

간도 부족 하므로 고정된 곳에 넣어 두었습니다.

그래도 전보다 UI가 이뻐지고 있어 만족 하고 있습니다.

상세한 요구 사항을 만족하도록 커스티마이징 하였고 이제 데이터만 넣으면 됩니다.

아참 이 작업을 하기 전에 property를 구현 하다가 말았는데요.. 그건 다음에 설명 드리죠... 아직 미완성이랍니

다.


신고
by danguria 2009.11.13 20:24
오랜만에 Flower 프로젝트를 했습니다.

요즘.. 개을러 지기도 했고, 학교 과제도 많았기 때문에 조금 지체 되었습니다.

아무튼 이번달 구현해야 하는 것은 크게 몇가지가 있습니다.

GUI 껍데기(?!)구현하기

기존에 구현된 기능을 GUI와 붙이기

위의 둘을 MVC 패턴을 이용하여 구현하기

순서도 그리는 모듈 미완성부분 완성하기

컴파일러 모듈과 통신을 위한 설계 회의 하기

이번주는 GUI껍데기와 기존의 순서도 모듈을 붙이는 것까지가 목표입니다.

오늘은 Property pallet부분과 debugging panel을 제외한 부분을 모두 완성 시켰습니다.

나름 이쁘게 나온 것 같아서 좋습니다.ㅋ


신고
by danguria 2009.11.10 21:44
| 1 |

티스토리 툴바