Procedural (또는 Structured) 에 의한 방법.
- Top-Down 에 의한 문제의 분해
- 문제 분해 또는 재정의
- 추후 독립적인 모듈. 한쪽 모듈의 변경이 다른 모듈의 세부 내용에 영향을 미치지 않는다.
- 순차, 반복, 비교. 모듈들.
Object 에 의한 방법.
- 주요 개념들
- 클래스
- 클래스를 생성하다 - 인스턴스화 시키다
- C++ 에서의 클래스 생성
- Python 에서의 클래스 생성
- 클래스들 간의 대화
- 부가적 개념들
실습 관련 필요화일 ¶
- 실습관련 필요 프로그램 + 클래스(http://zeropage.org/~reset/zb/download.php?id=KDP_board_image&page=1&page_num=20&category=&sn=off&ss=on&sc=on&keyword=&prev_no=&select_arrange=headnum&desc=asc&no=66&filenum=1)
- Python2.2(http://python.org/ftp/python/2.2.1/Python-2.2.1.exe)
실습 Tutorial ¶
- Python 2.2 를 인스톨한다.
- 실습관련 필요 프로그램인 idlefork 를 설치한다.
- idlefork 를 실행. (idle.pyw, idle.py, idle.bat 등)
- Run -> Python Shell 을 실행한다. 인터프리터가 뜰 것이다.
- 다음의 사항을 인터프리터에 한줄씩 입력하면서 코드를 생각해 보기.
예제 코드
~cpp
from StarCraft import StarCraft
sc = StarCraft ()
gateway = sc.createGateway ()
z1 = gateway.createZealot ()
z1.move (160,160)
d1 = gateway.createDragoon ()
d1.move (180,180)
z1.printHp()
z1.getPosition()
d1.printHp()
d1.getPosition()
z1.setAttackTarget(d1)
z1.printAttackTarget()
z1.getAttackTarget().printHp()
z1.getAttackTarget().getPosition()
z1.attack()
d1.printHp()
실습 Tutorial2 ¶
C++ 에서의 클래스의 구현. 이용예
~cpp
#ifndef _OBJECT_H_
#define _OBJECT_H_
class Object
{
public:
Object ();
~Object ();
void setValue(int number) {
value = number;
}
int getValue() {
return value;
}
protected:
int value;
}
#endif
int main (void) {
Object* o = new Object ();
o->setValue = 10;
printf ("object value : %d.. \n", o->getValue());
delete o;
}
(데블스캠프이후 페이지 이름 변경 필요)
Table Of Contents
- Computer S & E 관련 전반적인 흐름. 전체중 부분. 그 부분중 OOP.
- 프로그래밍에 대한 접근방법.
- Divide & Conquer. Top-Down 형으로 문제를 나누기.
- 문제에 대한 전개. 재정의하기.
- 객체지향 프로그래밍식 접근.
- 객체지향 프로그래밍의 일반적인 개념
- class
- instance 화 시키다. - class -> object
- private, protected, encapsulation 과 Information Hiding
- class를 어떻게 이용할까? 이미 만들어진 class를 이용하기 - 실습.
실습 Tutorial - Python Interpreter 의 이용 관련.
이미 만들어진 class file 준비하기.
인터프리터에 객체생성 - 동작시키기 예제 만들기.
- 객체 간의 대화하기 - object, message. 해당 객체의 메소드를 호출한다.
- 실습 - 객체간 레퍼런스의 참조, 한 객체가 다른 객체에게 메시지를 날리기.
- 부연 설명 - 윈도우즈 프로그램에 대한 OO 개념적 관점. (만일 전날 Window Programming 설명이 어느정도 되었냐에 따라)
- 윈도우즈 class
- 윈도우즈에서 돌고 있는 프로그램 - instance
- Message Driven Programming - 윈도우 창 메시지를 보내다. 메시지를 받아서 처리하다.
- 전반적인 OOP 식 프로그래밍. 디자인의 접근 - Class 에 Responsibility을 부여한다. 그리고 다른 클래스들과 Colloboration 하면서 프로그램을 구성한다.
- 객체의 재사용. 기반을 만들어나가기 : 부품들을 조합하기.
- 포함 (Delegation) 의 방법 (Has - a)
- 상속 (Inheritance) 의 방법 (Is - a)
- 단일 상속과 다중 상속
- 구현 상속과 인터페이스 상속.
- Polymorpism
- 실습 예제 준비. - 1시간 30분 가량. 풀기 예상.
- 상속에서의 문제점들.
- SubClass와 SubType의 구분.
- SubClass - To say that A is a subclass of B merely asserts that A is formed using inheritance.
- SubType - To say that A is a subtype of B asserts that A preserves the meaning of all the operations in B.
- 근친 상간(?) 의 문제 - 하나의 조상으로부터 시작된 동성동본 클래스들.
- 오래된 코드의 재사용.
- 상속에서의 Trade - Off
재사용, Layer 구조, 다형성 : 수행속도, 프로그램의 복잡도.
- 클래스들과의 관계 - 1 : n 구조. 자료구조체들과 결합.
- 추후에 읽을 거리들. 앞으로의 공부할 것들.
* Last. 문제 풀이
제기된 문제:
- 내용이 너무 많다. 세미나는 책과 다르다.
- 휴식시간의 명시 필요.
- 문제제기꺼리 - 현재의 내용이 'OOP를 쓰면 왜 좋을까?', 'OOP를 안써도 문제를 해결할 수 있을텐데...' 에 대해 어떤 답을 해줄까?
학습자가 세미나를 끝내고 집으로 돌아와서는 다음 질문에 자답할 수 있다면 성공적인 세미나였다고 할 수 있지 않을까:
- OOP가 도대체 무엇인가
- OOP가 나에게 어떤 가치를 주는가
- 내가 왜 OOP를 익혀야 하는가
- OOP를 익히기 위해 어떤 공부가 필요한가
즉, OOP를 공부하려는 사람에게 OOP를 제대로 공부할 준비가 되게 해주는 것으로 충분하다고 생각합니다.