로그인

검색

OBG
조회 수 1707 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 게시글 수정 내역 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 게시글 수정 내역 댓글로 가기 인쇄 첨부

streetPyghter.jpg

 

 

클릭하면 커진다.

 

클래스 다이어그램을 그린 것이다. 자세한 설명은 http://www.obg.co.kr/doku/doku.php?id=programming:design_pattern:uml 을 참고한다. (3강에서도 클래스 다이어그램에 대해 간단히 다루겠다. 궁금한 사람은 3강 앞부분을 먼저 보고 와도 좋다.)

 

맨 처음 위 다이어그램을 보면 정신이 없을 것이다. 프로그래밍을 한지 얼마 안된 사람이 위 다이어그램을 한번에 이해할거라 전혀 기대하지 않는다. 프로그래밍을 좀 해본 사람도 한눈에 볼 수 없다. 나 또한 위 다이어그램을 그리는데 3시간 넘게 걸렸다.

 

클래스가 많기 때문에 여기에다 설명을 일일이 다 적을 순 없다. 위 이미지를 다운 받아 클래스, 메쏘드의 이름을 통해 그 역할을 유추해보기 바란다. 소스 코드와도 비교해 본다.

 

흰색으로 표시한 클래스는 Singleton 패턴을 적용한 클래스이다. 이 클래스들은 오브젝트를 오직 하나만 생성할 수 있다. 몇몇 클래스는 object 클래스를 상속받는데 사실 파이썬의 모든 클래스는 object 클래스를 암묵적으로 상속받는다. 그래서 이 부분은 표시하지 않았다.

 

다이어그램에서 한눈에 띄는 것은 Player 클래스의 메쏘드 개수이다. 굳이 따로 얘기하지 않아도 제일 중요한 클래스임을 유추할 수 있을 것이다.

 

이전 농장 게임과의 차이점은 pygame.sprite.Sprite 클래스를 상속받는 클래스가 없다는 것이다. 이 게임에선 오브젝트가 플레이어 2명 + Fireball이기 때문에 굳이 쓰지 않은 것으로 생각한다.

 

위 다이어그램에서 알 수 있는 또다른 사실은 오른쪽 menu.py 부분에서 YesNo 클래스는 어디에도 연결된 부분이 없다. 그리고 왼쪽 game.py 부분에서 Vector2P 클래스 또한 Vector 클래스를 상속받아 정의되었을 뿐 다른 어디에도 연결된 부분이 없다. 이 두 클래스는 개발자가 추후에 쓸 목적으로 미리 클래스를 만들었겠지만 현재는 전혀 필요없는 클래스임을 알 수 있다. (Point 클래스는 너무 많은 곳에서 쓰여 일부로 표시하지 않은 것이니 유의하자)

 

UML을 어느 정도 알고 StarUML의 사용법을 안다면 첨부 파일의 uml 파일을 다운받아 열어보기 바란다. 그리고 클래스 다이어그램을 하나 더 추가하고 우측의 Model Explorer 클릭 후 design Model 아래의 클래스 중 관심 있는 몇개를 클래스 다이어그램으로 드래그해보자. 예를 들면 Player 클래스와 Game 클래스를 드래그해보자. 두 클래스 사이의 관계가 자동으로 보여질 것이다. 이런 식으로 위 다이어그램 중 보고 싶은 부분만 골라 새로운 클래스 다이어그램을 쉽게 만들 수 있다.

 

덧1 : 이 클래스 다이어그램은 필자가 게임을 좀 더 쉽게 분석하고자 만든 것이므로 그냥 넘어가도 상관 없다.

덧2 : 생략된 부분도 있는데 이는 중요하지 않다 판단하여 생략한 것이다. 그러나 생략하지 말아야할 것을 생략한 부분이 있을지도 모른다.

덧3 : 틀린 부분이 있을 수도 있다.

 

?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 Tool/etc Programming 게시판 관련 2 MoA 2014.11.01 5346
88 API/MFC #pragma MoA 2013.07.28 839
87 Graphic DirectX 9.0c SDK을 Visual Studio2008에 적용방법 MoA 2013.07.28 710
86 Graphic Video Preview and Frames Capture MoA 2013.07.28 1709
85 API/MFC MFC TIP MoA 2013.07.28 992
84 Site 이미지공학(IE) 연구실 MoA 2013.07.28 652
83 API/MFC CString class MoA 2013.07.28 956
82 API/MFC Visual C++ 시리얼 통신(RS-232) 강좌 (2) 1 MoA 2013.07.28 5374
81 API/MFC Visual C++ 시리얼 통신(RS-232) 강좌 (1) MoA 2013.07.28 7140
80 Library High-speed Charting Control MoA 2013.07.28 1004
79 API/MFC DLL 이란 MoA 2013.07.28 1422
78 C/C++ extern "C" 에 관하여 MoA 2013.07.28 1188
77 API/MFC UpdateData(TRUE) or UpdateData(FALSE) 구분 MoA 2013.07.28 1037
76 API/MFC InvalidateRect 함수, flag성 메세지 MoA 2013.07.25 959
75 API/MFC UpdateWindow 함수에 대하여.. MoA 2013.07.25 1041
74 API/MFC 다이얼로그 resize 시 child control의 그래픽 깨짐 해결 2 MoA 2013.07.25 1913
73 API/MFC Property Sheet의 버튼 속성 변경하기 MoA 2013.07.25 1136
72 API/MFC CPaneDialog 초기화 (OnInitDialog) MoA 2013.07.18 1576
71 API/MFC CDockablePane 버튼 비활성화 문제 MoA 2013.07.17 2056
70 API/MFC CDockablePane 배경화면 회색으로 변경 MoA 2013.07.11 1467
69 JAVA/Android What to use instead of “addPreferencesFromResource” in a PreferenceActivity? MoA 2013.06.13 1152
Board Pagination Prev 1 ... 6 7 8 9 10 11 12 13 14 15 Next
/ 15