• 검색 결과가 없습니다.

Day 5(강의):

N/A
N/A
Protected

Academic year: 2022

Share "Day 5(강의):"

Copied!
17
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

Day 5(강의):

상속의 개념

(2)

상속의 개념

 응용 프로그램 = 1 메인 윈도우 + 자식 윈도우들

아래한글의 경우 메인 윈도우

자식 윈도우

(3)

 메인 윈도우와 자식 윈도우

대부분 같은 속성 공유(화면상의 위치, 크기, 이동, 크기 조절, …) -> 기본 윈도우에 이미 모델링(표현)

다른점:메인 윈도우 -> 스스로 생성과 소멸 가능, 아이콘화 가능, …

자식 윈도우 -> 스스로 생성과 소멸 불가능, 아이콘화 불가능, …

=> 기본 윈도우로부터 세분화

=> window 클래스로부터 세분화

 상속(inheritance) window

application

window line

virtual run virtual

mouseDown virtual paint

application

mouseDown paint run

virtual okBox

clientX clientY wout- - -

timer- Interval

childWindow

line

run

childWindow

mouseDown paint timer

application = mainWindow

(4)

클래스의 세분화

부모 클래스(상위 클래스)와 자식 클래스(하위 클래스)

부모 클래스의 데이터 속성(멤버 변수)과 기능적인 속성(멤버 함수)이 자식 클 래스에 상속

window 클래스의 세분화

window 클래스(기본 윈도우) -> application 클래스(기본 메인 윈도우) window 클래스(기본 윈도우) -> childWindow 클래스(기본 자식 윈도우) 자식 클래스는 멤버 변수나 멤버 함수를 재정의 또는 추가함으로써 세분화

① 멤버 함수의 재정의(오버라이딩): 함수의 오버로딩이 부모-자식 클래스 간 에 이루어졌을 때 (run, paint 멤버 함수)

② 멤버의 추가(okBox 멤버 함수, timeInterval 멤버 변수) 이즈-어 관계

기본 메인 윈도우(application 클래스) 이즈-어 기본 윈도우(window 클래스) 기본 자식 윈도우(childWindow 클래스) 이즈-어 기본 윈도우(window 클래스)

(5)

window

application

window line

virtual run virtual

mouseDown virtual paint

application

mouseDown paint run

virtual okBox

clientX clientY wout- - -

timer- Interval

childWindow

line

run

childWindow

mouseDown paint timer

application

mouseDown paint run

virtual okBox timer-

Interval

run

childWindow

mouseDown paint timer

theMainWindow theChildWindow 기본 메인 윈도우

기본 자식 윈도우

(6)

 Pen 응용 프로그램

(7)

penApplication 클래스(application 클래스를 상속)

application

penApplication

application

mouseDown paint run

virtual okBox

mouseDown paint pen-

Application timer- Interval

pen- Application

기본 메인 윈도우

mouseDown

paint pen-

Application pen-

Application

Pen 응용 프로그램의 메인 윈도우

재정의 구현 theAPP

+

상속으로 제공

(8)

window 클래스 -> application 클래스 -> penApplication 클래스

(기본 윈도우) (기본 메인 윈도우) (마우스로 선을 그릴 수 있는 메인 윈도우) 아래한글 = 기본 메인 윈도우 + 문서 편집

탐색기 = 기본 메인 윈도우 + 탐색 기능 Pen 응용 프로그래밍

기본 플레이어에 미디어 종속적인 기능인 재생과 앞으로 빨리 감기 버튼에 기 능을 연계해 비디오 플레이어를 완성하는 과정에 비유

(9)

 Pen 응용 프로그램의 작성 과정

개발개발 개발사용

개발수정 조립식 제작

pclaf

Pen 응용 프로그램

부품 변형 (상속 후 mouseDown, paint 재정의)

(10)

Day 6(실습):

Pen 응용 프로그램 실습

(11)

Pen 응용 프로그램 실습

penApplication 클래스의 인터페이스 정의

0102 03 04 05 0607 08 09 10 1112 13 14 15 1617 18 19

//===========================================

// Name :

// File : penApp.cpp

// Description : a program that uses a pen to draw lines

// using the PC Little Application Framework (pclaf.h, pclaf.cpp).

// By clicking the mouse in the window, the user draws lines.

//===========================================

#include "pclaf.h“

// Custumized Application

class penApplication : public application { public:

penApplication(char *);

penApplication(char *,int,int,int,int);

void mouseDown(int,int);

void paint();

};

(12)

13번째 줄의 class penApplication : public application { … };

penApplication 클래스의 인터페이스 정의

클래스 정의 = 인터페이스 정의 + 인터페이스의 구현 -> 캡슐화(추상화) 14번째 줄의 가시성(visibility)

private 가시성(디폴트), public 가시성, protected 가시성(보충 문법절) 13번째 줄의 public 상속

application 클래스의 public 멤버 -> penApplication 클래스의 public 멤버

application 클래스의 private 멤버 -> penApplication 클래스의 접근불가 멤버 private 상속, protected 상속(보충 문법절)

15, 16번째 줄의 생성자 함수(constructor)

객체 생성시 자동 실행돼 멤버 변수를 초기화 하는 함수 상속 되지 않음

일반적으로 오버로딩 penApplication(char *);

penApplication(char *,int,int,int,int);

(13)

01 02 03 04 0506 07 08 09 1011 12 13 14 1516 17 18 19 2021 22 23 24 2526 27 28 29 3031 32 33 34 35 3637 38

penApplication::penApplication(char * apName) : application(apName)

{

// no action, just pass arguments to parent class constructor }

penApplication::penApplication(char * apName, int width, int height, int x, int y)

: application(apName, width, height, x, y) {

// no action, just pass arguments to parent class constructor }

// global var for pen locations int oldx=0;

int oldy=0;

int newx=0;

int newy=0;

void penApplication::mouseDown(int x, int y) {// set location to move to

newx = x;

newy = y;

// then update the screen update();

}

void penApplication::paint() {// draw a line

line(oldx, oldy, newx, newy);

// update old locations oldx = newx;

oldy = newy;

}

penApplication 클래스의 구현

(14)

첫 번째 줄의 penApplication::penApplication

penApplication 클래스의 penApplication 생성자 함수

9번째 줄의 penApplication::penApplication(char * apName, int width, int height, int x, int y)

: application(apName, width, height, x, y) application::application 생성자 함수의 호출

윈도우 좌표계와 응용 좌표계

(0.0) x

y

윈도우 좌표계

(0.0)

x

y

응용 좌표계

(15)

20번째 줄의 mouseDown 멤버 함수

마우스 클릭시 호출되는 멤버 함수 -> 마우스 클릭시 필요한 작업 코딩 -> 클릭점을 newx와 newy에 배정 클릭점은 파라미터로 제공

30번째 줄의 paint 멤버 함수

클라이언트 영역에 그리기 전담 멤버 함수

window::update 멤버 함수로 간접 호출, 클라이언트 영역 다시 그려야 할 때 호출 -> (oldx, oldy)에서 (newx, newy)로 선 긋기

-> (newx, newy)에 (oldx, oldy) 값 배정 33번째 줄의 line 멤버 함수

선을 그리는 window 클래스의 멤버 함수 -> penApplication 클래스에 상속

#include “pclaf.h”

헤더파일(.h)과 구현파일(.cpp)

pclaf의 클래스들 = pclaf.h(클래스들의 인터페이스) + pclaf.cpp(클래스들의 구현)

(16)

mainLAF 함수

4번째 줄의 penApplication theApp("PENS", 500, 500, 150, 150);

6번째 줄의 theApp.run();

0102 0304 05 0607 08

// pclaf program entry point int mainLAF(void)

{penApplication theApp("PENS", 500, 500, 150, 150);

theApp.run();

return 0;

}

penApplication

mouseDown paint pen-

Application pen-

Application

mouseDown paint pen-

Application pen-

Application

theAPP

① 생성

② penApplication(“PENS”,500,500,150,150) 멤버 변수의 초기화

on 버튼

비디오 플레이어

(17)

 Pen 응용 프로그램의 동작 과정

window

application

penApplication

mouseDown paint pen-Application pen-Application theApp

penApplication theApp

(“PENS”,500,500,150,150)

penApplication

(“PENS”,500,500,150,150)

application

(“PENS”,500,500,150,150)

window

(“PENS”,500,500,150,150)

theApp.run() 표시

윈도우 메시지 루프

실행

사용자의 마우스 클릭 (50,70)

마우스 클릭

윈도우 메시지 전달

mouseDown (50,70)

update()

클라이언트 영역

업데이트 필요성

페인트

윈도우 메시지 전달

paint()

line(0,0,50,70)

&theApp this

window::update()

window::line(0,0,50,70)

application::run()

참조

관련 문서

뒤에 a cute cat 이라는 명사구가 있으므로 What 으로 시작 하는 감탄문이 되어야 한다. 선행사가 사람이므로 주격 관계대명사 who 또는

9 On Saint Patrick ’ s Day, people in Ireland wear green jackets or hats with clovers on them.. 10 The color green is also important because it is the national

16 Right after that moment, not only Brielle ’ s heart rate but also her body temperature came back to normal.. 17 She began to breathe

[r]

모두 합동이므로 밑면인 원의 반지름의 길이는  DN이고, 높이는 회전축을 포함하는 평면으로 자른. 단면의 세로의 길이와

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ).

nounset 정의하지 않은 변수 사용 시 오류 메시지 vi vi 모드 시작..

OnCreate() // WM_CREATE 메시지 핸들러 PreCreateWindow() // 윈도우 생성 옵션 지정. • WM_COMMAND