Day 5(강의):
상속의 개념
상속의 개념
응용 프로그램 = 1 메인 윈도우 + 자식 윈도우들
아래한글의 경우 메인 윈도우
자식 윈도우
메인 윈도우와 자식 윈도우
대부분 같은 속성 공유(화면상의 위치, 크기, 이동, 크기 조절, …) -> 기본 윈도우에 이미 모델링(표현)
다른점:메인 윈도우 -> 스스로 생성과 소멸 가능, 아이콘화 가능, …
자식 윈도우 -> 스스로 생성과 소멸 불가능, 아이콘화 불가능, …
=> 기본 윈도우로부터 세분화
=> window 클래스로부터 세분화
상속(inheritance) window
application
window line
virtual run virtual
mouseDown virtual paint
application
mouseDown paint run
virtual okBox
clientX clientY wout- - -
timer- Interval
childWindow
linerun
childWindow
mouseDown paint timer
application = mainWindow
클래스의 세분화
부모 클래스(상위 클래스)와 자식 클래스(하위 클래스)
부모 클래스의 데이터 속성(멤버 변수)과 기능적인 속성(멤버 함수)이 자식 클 래스에 상속
window 클래스의 세분화
window 클래스(기본 윈도우) -> application 클래스(기본 메인 윈도우) window 클래스(기본 윈도우) -> childWindow 클래스(기본 자식 윈도우) 자식 클래스는 멤버 변수나 멤버 함수를 재정의 또는 추가함으로써 세분화
① 멤버 함수의 재정의(오버라이딩): 함수의 오버로딩이 부모-자식 클래스 간 에 이루어졌을 때 (run, paint 멤버 함수)
② 멤버의 추가(okBox 멤버 함수, timeInterval 멤버 변수) 이즈-어 관계
기본 메인 윈도우(application 클래스) 이즈-어 기본 윈도우(window 클래스) 기본 자식 윈도우(childWindow 클래스) 이즈-어 기본 윈도우(window 클래스)
window
application
window line
virtual run virtual
mouseDown virtual paint
application
mouseDown paint run
virtual okBox
clientX clientY wout- - -
timer- Interval
childWindow
linerun
childWindow
mouseDown paint timer
application
mouseDown paint run
virtual okBox timer-
Interval
run
childWindow
mouseDown paint timer
theMainWindow theChildWindow 기본 메인 윈도우
기본 자식 윈도우
Pen 응용 프로그램
penApplication 클래스(application 클래스를 상속)
application
penApplication
applicationmouseDown paint run
virtual okBox
mouseDown paint pen-
Application timer- Interval
pen- Application
기본 메인 윈도우
mouseDownpaint pen-
Application pen-
Application
Pen 응용 프로그램의 메인 윈도우
재정의 구현 theAPP
+
상속으로 제공
window 클래스 -> application 클래스 -> penApplication 클래스
(기본 윈도우) (기본 메인 윈도우) (마우스로 선을 그릴 수 있는 메인 윈도우) 아래한글 = 기본 메인 윈도우 + 문서 편집
탐색기 = 기본 메인 윈도우 + 탐색 기능 Pen 응용 프로그래밍
기본 플레이어에 미디어 종속적인 기능인 재생과 앞으로 빨리 감기 버튼에 기 능을 연계해 비디오 플레이어를 완성하는 과정에 비유
Pen 응용 프로그램의 작성 과정
개발개발 개발사용
개발수정 조립식 제작
pclaf
Pen 응용 프로그램
부품 변형 (상속 후 mouseDown, paint 재정의)
Day 6(실습):
Pen 응용 프로그램 실습
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();
};
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);
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 클래스의 구현첫 번째 줄의 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
응용 좌표계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(클래스들의 구현)
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 버튼
비디오 플레이어
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()