Procedural (또는 Structured) 에 의한 방법. * Top-Down 에 의한 문제의 분해 * 문제 분해 또는 재정의 * 추후 독립적인 모듈. 한쪽 모듈의 변경이 다른 모듈의 세부 내용에 영향을 미치지 않는다. * 순차, 반복, 비교. 모듈들. Object 에 의한 방법. * 주요 개념들 * 클래스 * 클래스를 생성하다 - 인스턴스화 시키다 * C++ 에서의 클래스 생성 * Python 에서의 클래스 생성 * 클래스들 간의 대화 * 부가적 개념들 * 상속 * 포함 === 문제 === * RandomWalk2 === 실습 관련 필요화일 === * [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 실습관련 필요 프로그램 + 클래스] * [http://python.org/ftp/python/2.2.1/Python-2.2.1.exe Python2.2] === 실습 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; } }}} ---- (데블스캠프이후 페이지 이름 변경 필요) * 주제 : Object Oriented Programming * 대상 : 1학년 신입회원들. C에 대한 기본 이해 있음. (포인터, 배열, 구조체 등) OOP 와 관련한 개념 전혀 없음. * 목표 : OOP 에 대한 전반적인 개념들과 원리의 이해 (class, instance, ) 이해, 실제 프로그래밍시의 OOP 식 사고법 등의 이해. * 구체적 목표 결과 : 세미나와 실습을 마친 사람들이 프로그래밍을 할때 프로그램에서의 각 기능들을 보고 객체들을 떠올리며 기능별 책임을 부여하고, 객체들간의 대화를 시키면서 구현하는 모습을 확인해본다. 처음 실습때는 튜토리얼을 따라하게끔 하고, 마지막으론 직접 스스로 구현하는 전체 프로그램으로. * 주어진 시간 : 9시 ~ 6시. (9시간. 실질적으론 중간 휴식 포함 7시간정도) ---- '''Table Of Contents''' 1. Computer S & E 관련 전반적인 흐름. 전체중 부분. 그 부분중 OOP. 1. 프로그래밍에 대한 접근방법. 1. Divide & Conquer. Top-Down 형으로 문제를 나누기. * 구체적인 예제 준비 2. 문제에 대한 전개. 재정의하기. * 수학문제 관련 예제 준비 1. 객체지향 프로그래밍식 접근. 1. 객체지향 프로그래밍의 일반적인 개념 1. class 2. instance 화 시키다. - class -> object 3. private, protected, encapsulation 과 Information Hiding 1. class를 어떻게 이용할까? 이미 만들어진 class를 이용하기 - 실습. 실습 Tutorial - Python Interpreter 의 이용 관련. 이미 만들어진 class file 준비하기. 인터프리터에 객체생성 - 동작시키기 예제 만들기. 1. 객체 간의 대화하기 - object, message. 해당 객체의 메소드를 호출한다. 1. 실습 - 객체간 레퍼런스의 참조, 한 객체가 다른 객체에게 메시지를 날리기. * 구체적인 예제준비 1. 부연 설명 - 윈도우즈 프로그램에 대한 OO 개념적 관점. (만일 전날 Window Programming 설명이 어느정도 되었냐에 따라) * 윈도우즈 class * 윈도우즈에서 돌고 있는 프로그램 - instance * Message Driven Programming - 윈도우 창 메시지를 보내다. 메시지를 받아서 처리하다. 1. 전반적인 OOP 식 프로그래밍. 디자인의 접근 - Class 에 Responsibility을 부여한다. 그리고 다른 클래스들과 Colloboration 하면서 프로그램을 구성한다. 1. 객체의 재사용. 기반을 만들어나가기 : 부품들을 조합하기. 1. 포함 (Delegation) 의 방법 (Has - a) 2. 상속 (Inheritance) 의 방법 (Is - a) 1. 단일 상속과 다중 상속 2. 구현 상속과 인터페이스 상속. 3. Polymorpism * Upcast * Downcast 1. 실습 예제 준비. - 1시간 30분 가량. 풀기 예상. 1. 상속에서의 문제점들. 1. 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. 2. 근친 상간(?) 의 문제 - 하나의 조상으로부터 시작된 동성동본 클래스들. 3. 오래된 코드의 재사용. 4. 상속에서의 Trade - Off 재사용, Layer 구조, 다형성 : 수행속도, 프로그램의 복잡도. 1. 클래스들과의 관계 - 1 : n 구조. 자료구조체들과 결합. 1. 추후에 읽을 거리들. 앞으로의 공부할 것들. * Last. 문제 풀이 ---- 제기된 문제: * 내용이 너무 많다. 세미나는 책과 다르다. * 휴식시간의 명시 필요. * 문제제기꺼리 - 현재의 내용이 'OOP를 쓰면 왜 좋을까?', 'OOP를 안써도 문제를 해결할 수 있을텐데...' 에 대해 어떤 답을 해줄까? 학습자가 세미나를 끝내고 집으로 돌아와서는 다음 질문에 자답할 수 있다면 성공적인 세미나였다고 할 수 있지 않을까: * OOP가 도대체 무엇인가 * OOP가 나에게 어떤 가치를 주는가 * 내가 왜 OOP를 익혀야 하는가 * OOP를 익히기 위해 어떤 공부가 필요한가 즉, OOP를 공부하려는 사람에게 OOP를 제대로 공부할 준비가 되게 해주는 것으로 충분하다고 생각합니다.