E D R , A S I H C RSS

Object Oriented Programming Seminar

Procedural (또는 Structured) 에 의한 방법.
  • Top-Down 에 의한 문제의 분해
  • 문제 분해 또는 재정의
  • 추후 독립적인 모듈. 한쪽 모듈의 변경이 다른 모듈의 세부 내용에 영향을 미치지 않는다.
  • 순차, 반복, 비교. 모듈들.

Object 에 의한 방법.
  • 주요 개념들
    • 클래스
    • 클래스를 생성하다 - 인스턴스화 시키다
    • C++ 에서의 클래스 생성
    • Python 에서의 클래스 생성
    • 클래스들 간의 대화

  • 부가적 개념들
    • 상속
    • 포함

문제

실습 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.
  2. 프로그래밍에 대한 접근방법.
    1. Divide & Conquer. Top-Down 형으로 문제를 나누기.
      • 구체적인 예제 준비
    2. 문제에 대한 전개. 재정의하기.
      • 수학문제 관련 예제 준비
  3. 객체지향 프로그래밍식 접근.
  4. 객체지향 프로그래밍의 일반적인 개념
    1. class
    2. instance 화 시키다. - class -> object
    3. private, protected, encapsulation 과 Information Hiding
  5. class를 어떻게 이용할까? 이미 만들어진 class를 이용하기 - 실습.
    실습 Tutorial - Python Interpreter 의 이용 관련.
    이미 만들어진 class file 준비하기.
    인터프리터에 객체생성 - 동작시키기 예제 만들기.

  6. 객체 간의 대화하기 - object, message. 해당 객체의 메소드를 호출한다.
  7. 실습 - 객체간 레퍼런스의 참조, 한 객체가 다른 객체에게 메시지를 날리기.
    • 구체적인 예제준비
  8. 부연 설명 - 윈도우즈 프로그램에 대한 OO 개념적 관점. (만일 전날 Window Programming 설명이 어느정도 되었냐에 따라)
    • 윈도우즈 class
    • 윈도우즈에서 돌고 있는 프로그램 - instance
    • Message Driven Programming - 윈도우 창 메시지를 보내다. 메시지를 받아서 처리하다.

  9. 전반적인 OOP 식 프로그래밍. 디자인의 접근 - Class 에 Responsibility을 부여한다. 그리고 다른 클래스들과 Colloboration 하면서 프로그램을 구성한다.
  10. 객체의 재사용. 기반을 만들어나가기 : 부품들을 조합하기.
    1. 포함 (Delegation) 의 방법 (Has - a)
    2. 상속 (Inheritance) 의 방법 (Is - a)
      1. 단일 상속과 다중 상속
      2. 구현 상속과 인터페이스 상속.
      3. Polymorpism
        • Upcast
        • Downcast
  11. 실습 예제 준비. - 1시간 30분 가량. 풀기 예상.

  12. 상속에서의 문제점들.
    1. SubClassSubType의 구분.
      • 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 구조, 다형성 : 수행속도, 프로그램의 복잡도.
  13. 클래스들과의 관계 - 1 : n 구조. 자료구조체들과 결합.
  14. 추후에 읽을 거리들. 앞으로의 공부할 것들.

* Last. 문제 풀이



제기된 문제:
  • 내용이 너무 많다. 세미나는 책과 다르다.
  • 휴식시간의 명시 필요.
  • 문제제기꺼리 - 현재의 내용이 'OOP를 쓰면 왜 좋을까?', 'OOP를 안써도 문제를 해결할 수 있을텐데...' 에 대해 어떤 답을 해줄까?

학습자가 세미나를 끝내고 집으로 돌아와서는 다음 질문에 자답할 수 있다면 성공적인 세미나였다고 할 수 있지 않을까:
  • OOP가 도대체 무엇인가
  • OOP가 나에게 어떤 가치를 주는가
  • 내가 왜 OOP를 익혀야 하는가
  • OOP를 익히기 위해 어떤 공부가 필요한가

즉, OOP를 공부하려는 사람에게 OOP를 제대로 공부할 준비가 되게 해주는 것으로 충분하다고 생각합니다.
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:53
Processing time 0.0385 sec