PowerPoint Template

Similar documents
q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

C++ Programming

PowerPoint Presentation

Microsoft PowerPoint - additional08.ppt [호환 모드]

Microsoft PowerPoint - additional07.ppt [호환 모드]

PowerPoint Presentation

gnu-lee-oop-kor-lec06-3-chap7

PowerPoint Presentation

설계란 무엇인가?

Slide 1

PowerPoint Template

JAVA PROGRAMMING 실습 08.다형성

C++ Programming

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

C++ 기본문법 정리

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

Design Issues

Blog

Microsoft PowerPoint - 2강

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

No Slide Title

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

Microsoft PowerPoint - chap11

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - java2 [호환 모드]

Microsoft PowerPoint - Chapter 6.ppt

PowerPoint Template

1. 상속의기본개념 다음과같은문제를위한클래스설계 자동차 속성 : 색상, 배기량, 현재속도 메서드 : 가속하라, 멈춰라, 시동을켜라 트럭 속성 : 색상, 배기량, 현재속도, 최대중량 메서드 : 가속하라, 멈춰라, 시동을켜라 택시 속성 : 색상, 배기량, 현재속도, 요금,

제11장 프로세스와 쓰레드

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

PowerPoint Presentation

01-OOPConcepts(2).PDF

윤성우의 열혈 TCP/IP 소켓 프로그래밍

Microsoft PowerPoint - additional06.ppt [호환 모드]

JAVA PROGRAMMING 실습 02. 표준 입출력

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

JAVA PROGRAMMING 실습 07. 상속

제 1 강 희망의 땅, 알고리즘

Slide 1

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문

Slide 1

윤성우의 열혈 TCP/IP 소켓 프로그래밍

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

Microsoft PowerPoint 장강의노트.ppt

Microsoft PowerPoint - additional03.ppt [호환 모드]

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - java1 [호환 모드]

윤성우의 열혈 TCP/IP 소켓 프로그래밍

PowerPoint Template

C++ Programming

<4D F736F F F696E74202D2038C0E55FB0ADC0C7B3EBC6AE28B0A1BBF3C7D4BCF6BFCD20B4D9C7FCBCBA29>

슬라이드 1

17장 클래스와 메소드

쉽게 풀어쓴 C 프로그래밍

윤성우의 열혈 TCP/IP 소켓 프로그래밍

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

윤성우의 열혈 TCP/IP 소켓 프로그래밍

PowerPoint Presentation

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

Microsoft PowerPoint - Chap12-OOP.ppt

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

유니티 변수-함수.key

(Microsoft PowerPoint - java2-lecture3.ppt [\310\243\310\257 \270\360\265\345])

강의계획서 1. 강의개요 학습과목명 객체지향프로그래밍 Ⅰ 학점 3 학점교 강사명교 강사전화번호 강의시간 4시간강의실수강대상 2. 교과목학습목표 4차산업혁명시대의도래로컴퓨터와프로그래밍에대한관심이커지고있으며, 여러분야에서소프트웨어의중요성을강조하며, 새시대를이끌

PowerPoint Presentation

Network Programming

PowerPoint Presentation

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

C++ 기본문법 정리

PowerPoint Presentation

PowerPoint 프레젠테이션

JVM 메모리구조

1. 기본형의형변환복습 C/C++ 형변환의종류 자동형변환 ( 묵시적형변환 ) 강제형변환 ( 명시적형변환 ) 기본형의자동형변환의예 1. 배열 to 포인터변환 배열명은해당배열의첫번째원소의 주소로변환됨 int ary[10]; int *pary = ary; 2. 함수 to 포

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

adfasdfasfdasfasfadf

C# Programming Guide - Types

Microsoft PowerPoint - C++ 5 .pptx

슬라이드 1

Microsoft PowerPoint - 6주차.pptx

쉽게 풀어쓴 C 프로그래밍

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

슬라이드 1

ThisJava ..

Slide 1

Microsoft PowerPoint - CSharp-10-예외처리

제4장 기본 의미구조 (Basic Semantics)

JAVA PROGRAMMING 실습 05. 객체의 활용

Microsoft Word - java19-1-midterm-answer.doc

Microsoft PowerPoint - VB.NET_06.pptx

자료형 크기 값의범위 접미문자 Byte형 1바이트 0~255까지 없음 Boolean형 2바이트 True, False 없음 Integer형 2바이트 ~ 32767까지 % Long형 4바이트 -2,147,483,648 ~ 2,147,483,648까지 & Sin

PowerPoint Presentation

1

프입2-강의노트-C++배경

Slide 1

Chapter 6 Objects and Classes

1. 클래스와배열 int 형배열선언및초기화 int ary[5] = 1, 2, 3, 4, 5 ; for (int i = 0; i < 5; i++) cout << "ary[" << i << "] = " << ary[i] << endl; 5 장클래스의활용 1

No Slide Title

Transcription:

9. 객체지향프로그래밍 대구가톨릭대학교 IT 공학부 소프트웨어공학연구실

목차 2 9.1 개요 9.2 객체지향프로그래밍언어 9.3 추상자료형 9.4 상속 9.5 동적바인딩

9.1 객체지향의개념 (1) 3 객체지향의등장배경 소프트웨어와하드웨어의발전불균형 소프트웨어모듈의재사용과독립성을강조 객체 (object) 란? 우리가다루는모든사물을일컫는말 예 ) 하나의점, 사각형, 원, 컴퓨터, 사람등등모든것들 객체는두가지구성요소를가짐 상태 (State) : 객체가가지고있는속성 ( 특징 ) 행위 (Behavior) : 객체가가지고있는기능 ( 행동 ) 예 : 자동차객체 상태 : 색, 바퀴수, 핸들, 현재속도, 현재기어위치등 행위 : 현재속도로달린다, 기어를바꾼다, 경적을울린다등 State 색 네개의바퀴 핸들 배기량 현재속도 현재기어위치 Behavior 달린다. 멈춘다. Gear 를바꾼다. 속도를높이거나낮춘다. 경적을울린다.

9.1 객체지향의개념 (2) 4 객체지향프로그래밍 (OOP) 프로그램을현실세계의모방으로보고현실세계의객체들을소프트웨어적으로표현 객체지향방법을이용하여현실세계의객체가갖는상태와행위를소프트웨어객체의변수 (variable) 와메소드 (method) 로모델링하고객체간의관계를정의 실세계객체의상태 ( 특성 ) --> 변수 특성이나상태를변경시키는행동 --> 메소드 or 함수

9.1 객체지향의개념 (3) 5 실세계 (Real World) 객체가존재하는실세계를의미 우리가일상에서보는사물 개념세계 (Conceptual World) 실세계에존재하는객체에대해객체가어떻게구성되었는지분석하는단계 실세계의객체에대한상태와행동정보등을추려내는단계 이러한작업을추상화 (abstraction) 라함 컴퓨팅세계 (Computing or Software World) 개념세계의것을소프트웨어적으로나타내는것상태는변수로, 행동은메소드로표현이러한상태와메소드를이용하여하나의클래스를만드는것을캡슐화 (encapsulation) 이라함

9.1 객체지향의개념 (4) 6 객체지향프로그래밍장점 객체지향모델은실세계를잘반영 인간의사고와유사한표현이가능 모델링부터구현까지일관된개념의유지가능 개발생산성증대및유지보수를용이하게함 객체를통한재사용성및품질향상 유지보수시부분적교체가가능 : 전체영향의최소화 복잡하고다양한정보의표현가능 추상화데이터타입을통한다양한표현능력제공 데이터와기능의통합추상화로복잡한데이터처리용이

9.2 객체지향프로그래밍언어 (1) 7 객체지향프로그래밍을지원하는언어의부류 기존언어에객체지향프로그래밍을지원하는언어 C++, Ada 95 객체지향프로그래밍외에프로시저지향과데이터지향프로그래밍을지원 CLOS(LISP 의 Object-Oriented version) 객체지향프로그래밍외에함수프로그래밍을지원 객체지향프로그래밍을지원하기위해설계된더새로운언어 Java, C# 객체지향프로그래밍을완벽하게지원한첫번째언어 Smalltalk 유일한순수객체지향프로그래밍언어

9.2 객체지향프로그래밍언어 (2) 8 객체지향프로그래밍의개념 1960년대 Kristen Nygaard와 Ole-Johan Dahl에의해개발된 SIMULA 에서부터시작 1967년에클래스, 객체, 그리고상속개념을포함한 SIMULA 67이개발되면서최초의객체지향개념이도입 진정한최초의객체지향언어는 1980년에 Alan Kay에의해개발된 Smalltalk 80 동적바인딩을지원 객체지향프로그래밍언어의 3가지주요특징 추상데이터타입, 상속, 동적바인딩

9.2 객체지향프로그래밍언어 (3) 9 객체지향프로그래밍언어의 3 가지주요특징 1) 추상데이터타입 (abstract data types) - 이질적인데이터들의모임인레코드에이들데이터들과연관된동작들이추가되어하나로묶인개념 2) 상속 (inheritance) - 다른클래스의특성이임의의클래스에전달되는것 3) 동적바인딩 (dynamic binding) - 같은이름의함수를각각정의하는상속관계에있는객체에대해함수를호출했을때동작하게될함수가동적으로결정되는개념

9.3 추상데이터타입 (1) 10 추상데이터타입 (Abstract Data Type) 임의의타입의데이터표현과그와관련된연산을제공하는부프로그램들을함께묶어캡슐화한것 캡슐화 (encapsulation) 하나의데이터타입과관련된모든정의를한곳에모으고그곳에서정의된연산을통해서만이데이터타입을사용하도록제한하는것 캡슐화의외부에는추상데이터타입의실제적인표현을숨김 추상데이터타입의실체 (instance) -> 객체 추상데이터타입의구조

9.3 추상데이터타입 (2) 11 추상데이터타입은다음두조건을모두만족하는데이터타입 1) 데이터타입과그타입과관련된연산이동시에정의되어야함 그정의들은한곳에모두모여있어야하며연산과타입은직접적으로연계되어야함 2) 데이터타입의세부사항은그타입에마련된연산만이접근할수있고, 그타입을사용하는프로그램이직접적으로접근할수없음 추상데이터타입에서제공하는연산을호출해야만객체의상태를변경시킬수있음 추상데이터타입의특징 임의의타입의데이터표현과그와관련된부프로그램들을함께묶어캡슐화 이타입에서제공하는부프로그램만을통해동작이이루어짐 관리하기편하고안정성이뛰어남 추상데이터타입을지원하는언어 C++, Ada, Java

9.3 추상데이터타입 (3) 12 C++ 의추상데이터타입 클래스 (class) 를이용해서추상데이터타입을지원 클래스에서정의된데이터 : 멤버데이터 (member data) 클래스에서정의된부프로그램 : 멤버함수 (member function) class 클래스이름 { : ;: 클래스 private 절에속한멤버들은외부로공개되지않음 public 절에속한멤버들은외부로공개

9.3 추상데이터타입 (4) employee 클래스를정의한예 class employee { private: char *name; int basicsalary; int bonus; int annualsalary; public: employee(char *na, int bs, int bon, int as) { name = new char[strlen(na)+1]; strcpy(name, na); basicsalary = bs; bonus = bon; annualsalary = as; ~employee() { delete []name; char* getname() { return name; int getannualsalary() { return annualsalary; void changebasicsalary(int bs) { basicsalary = bs; annualsalary = basicsalary*12 + basicsalary*bonus*0.01; void changebonus(int bon) { bonus = bon; annualsalary = basicsalary*12 + basicsalary*bonus*0.01; ;

9.3 추상데이터타입 (5) employee 클래스의실체인객체를생성 employee emp( abc, 150, 400, 2400); 객체 emp 의구조 emp 객체의 name 과 annualsalary 를알아내는문장 cout << emp.getname() << " " << emp.getannualsalary(); emp 객체의기본급을 200 으로변경 emp.changebasicsalary(200);

9.3 추상데이터타입 (6) 15 Java 의추상데이터타입 C++ 와유사 클래스 (class) 를이용해서추상데이터타입을지원 클래스에서정의된데이터 : 멤버변수 (member variable) 클래스에서정의된부프로그램 : 메소드 (method) class 클래스이름 { : C++ 와의차이점 소멸자가없음 (Java 는묵시적으로쓰레기수집을하기때문 ) 클래스에정의된메소드를밖으로빼내어표현할수없음

9.3 추상데이터타입 (7) 16 Java 로표현한 employee 클래스 class employee { private String name; private int basicsalary; private int bonus; private int annualsalary; public employee(string name, int basicsalary, int bonus, int annualsalary) { this.name = name; this.basicsalary = basicsalary; this.bonus = bonus; this.annualsalary = annualsalary; public String getname() { return name; public int getannualsalary() { return annualsalary; public void changebasicsalary(int basicsalary) { this.basicsalary = basicsalary; annualsalary = (int)(basicsalary*12 + basicsalary*bonus*0.01); public void changebonus(int bonus) { this.bonus = bonus; annualsalary = (int)(basicsalary*12 + basicsalary*bonus*0.01);

9.3 추상데이터타입 (8) 17 employee 클래스의실체인객체를생성 employee emp = new employee( abc, 150, 400, 2400); 객체 emp 의구조 emp 객체의 name 과 annualsalary 를알아내는문장 System.out.println(emp.getName() + " " + emp.getannualsalary()); emp 객체의기본급을 200 으로변경 emp.changebasicsalary(200);

9.3 추상데이터타입 (9) 18 Ada 의추상데이터타입 패키지 (package) 를이용해서추상데이터타입을지원 명세부 (specification part) + 몸체부 (body part) 명세부 : 패키지를사용하는프로그램에게인터페이스를제공 가시부 (visible part) : 가시부에서선언된내용들은외부에공개 전용부 (private part) : 전용부에서선언된내용들은외부에공개되지않음 package 패키지이름 is end 패키지이름 ; 몸체부 : 명세부에서명명된연산에대한구현을제공 몸체부에서정의된내용도외부에공개되지않음 package body 패키지이름 is end 패키지이름 ;

9.3 추상데이터타입 (10) 19 employeepack 패키지명세부 package employeepack is type employee is private; procedure initemp(emp: out employee; name: string; basicsalary, bonus, annualsalary: integer); function getname(emp: employee) return string; function getannualsalary(emp: employee) return integer; procedure changebasicsalary(emp: in out employee; basicsalary: integer); procedure changebonus(emp: in out employee; bonus: integer); private type employee is record name: string(1..3); basicsalary: integer; bonus: integer; annualsalary: integer; end record; end employeepack;

9.3 추상데이터타입 (11) 20 employeepack 패키지몸체부 with TEXT_IO; use TEXT_IO; package body employeepack is package INT_IO is new TEXT_IO.INTEGER_IO (integer); use INT_IO; procedure initemp(emp: out employee; name: string; basicsalary, bonus,annualsalary: integer) is begin emp := (name, basicsalary, bonus, annualsalary); end initemp; function getname(emp: employee) return string is begin return emp.name; end getname; function getannualsalary(emp: employee) return integer is begin return emp.annualsalary; end getannualsalary; procedure changebasicsalary(emp: in out employee; basicsalary: integer) is begin emp.basicsalary := basicsalary; emp.annualsalary := emp.basicsalary*12 + mp.basicsalary*emp.bonus/100; end changebasicsalary; procedure changebonus(emp: in out employee; bonus: integer) is begin emp.bonus := bonus; emp.annualsalary := emp.basicsalary*12 + emp.basicsalary*emp.bonus/100; end changebonus; end employeepack;

9.3 추상데이터타입 (12) 21 정의된 employee 추상데이터타입의실체인객체생성방법 emp : employee; 객체 emp 의구조 객체 emp 의각데이터에값을저장 initemp(emp, "abc", 150, 400, 2400); emp 객체의 name 과 annualsalary 를알아내기 put(getname(emp)); put(getannualsalary(emp)); emp 의기본급을 200 으로변경 changebasicsalary(emp, 200);

9.4 상속 (1) 22 상속 (inheritance) 클래스사이의데이터와연산을공유하기위한메커니즘 기존클래스로부터상속을통해정의되는클래스는기존클래스의데이터와연산기능을가지며, 새로운데이터와연산을추가할수있음 상속해주는클래스 : 상위클래스 (super class), 기반클래스 (base class) 상속을통해정의되는클래스 : 하위클래스 (sub class), 파생클래스 (derived class)

9.4 상속 (2) 23 예 공통된사항들을묶어사원이라는클래스를정의하고, 정규직과비정규직은사원클래스를상속하여정의 정규직과비정규직클래스는사원클래스의이름, 연봉, 이름알아내기 (), 연봉알아내기 () 를상속받아자신의데이터와연산인것처럼사용할수있음

9.4 상속 (3) 24 C++ 의상속 상속을이용한파생클래스정의형식 class 파생클래스이름 : 접근모드기반클래스이름 { : ; 기반클래스의멤버데이터와멤버함수가파생클래스에상속 파생클래스는새로운멤버데이터와멤버함수를추가할수있음 상속된멤버함수를새롭게정의할수있음 접근모드 : public, private, protected public : 기반클래스의모든멤버에 대한접근권한이파생클래스에서도 그대로유지됨 protected : 파생클래스에서는 접근이가능하지만외부에서는 접근이불가능한멤버를지정

9.4 상속 (4) 25 기반클래스를상속하는 파생클래스정의예 class employee { private: int annualsalary; public: char *getname( ) { ; class permanent : public employee { private: int bonus; public: void changebasicsalary( ) { ; 기반클래스를상속하는파생클래스정의 - 오류발생 class employee { private: int annualsalary; ; class permanent : public employee { void changebasicsalary( ) { annualsalary = ; // 오류가발생 ; 기반클래스를상속하는파생클래스정의 - 오류수정 class employee { protected: int annualsalary; ; class permanent : public employee { void changebasicsalary( ) { annualsalary = ; // 접근가능!! ;

9.4 상속 (5) 26 C++ 로구현한 employee 클래스 class employee { private: char *name; protected: int annualsalary; public: employee(char *na, int as) { name = new char[strlen(na)+1]; strcpy(name, na); annualsalary = as; ~employee() { delete []name; char* getname() { return name; int getannualsalary() { return annualsalary; ; *private -. name : 파생클래스에서직접접근하지않음 *protected -. annualsalary: 외부에서접근하지않으나파생클래스에서직접접근함 *public getname(), getannualsalary : 외부에서직접접근

9.4 상속 (6) 27 C++ 로구현한 permanent 클래스 class permanent : public employee { private: int basicsalary; int bonus; public: permanent(char *na, int bs, int bon, int as) : employee(na, as) { bonus = bon; basicsalary = bs; void changebasicsalary(int bs) { ; basicsalary = bs; annualsalary = basicsalary*12 + basicsalary*bonus*0.01; void changebonus(int bon) { bonus = bon; annualsalary = basicsalary*12 + basicsalary*bonus*0.01; * 멤버데이터 -. basicsalary, bonus * 멤버함수 -. changebasicsalary(), changebonus() *annualsalary protected 멤버로서, 각멤버함수에서 annualsalary 에대해직접접근가능

9.4 상속 (7) 28 C++ 로구현한 temporary 클래스 class temporary : public employee { private: int workhours; int hoursalary; public: temporary(char *na, int hs, int wh, int as) : employee(na, as) { workhours = wh; hoursalary = hs; ; void changeworkhours(int wh) { workhours = wh; annualsalary = workhours * hoursalary / 10000 void changehoursalary(int hs) { hoursalary = hs; annualsalary = workhours * hoursalary / 10000; * 멤버데이터 -. workhours, hoursalary * 멤버함수 -. changeworkhours(), changehoursalary()

9.4 상속 (8) 29 permanent 클래스의객체인 emp1 을생성 permanent emp1( aaa, 150, 400, 2400); emp1 객체의 name 과 annualsalary 를알아내는문장 cout << emp1.getname() << << emp1.getannualsalary(); emp1 객체의기본급을 200 으로변경 emp1.changebasicsalary(200); temporary 클래스의객체인 emp2 를생성하고, 이름과연봉을출력하고, 근무시간을변경 temporary emp2("bbb", 5000, 2000, 1000); cout << emp2.getname() << " " << emp2.getannualsalary(); emp2.changeworkhours(2500);

9.4 상속 (9) 30 Java 의상속 상속을이용한파생클래스정의형식 : extends 예약어사용 class 파생클래스이름 extends 기반클래스이름 { : 접근모드 : public, private, protected

9.5 동적바인딩 (1) 31 동적바인딩 (dynamic binding) 상속관계가있는객체에대한멤버함수호출에대해대응되는멤버함수가동적으로결정되는것을의미 예 ) 1 학년 or 2 학년클래스의객체에대해평균알아내기 () 함수를호출하면파생클래스에서새롭게정의된함수가동작 3 학년클래스의객체에대해평균알아내기 () 함수를호출하면기반클래스에서정의된함수가동작 상속관계가있는객체에대해멤버함수를호출했을때동작하게될멤버함수가동적으로결정되는개념 동적바인딩 (dynamic binding)

9.5 동적바인딩 (2) 32 C++ 의동적바인딩 기반클래스의멤버함수이름앞에명시적으로 virtual 을써야함 이와같이동적으로바인딩하는함수 --> 가상함수 (virtual function) 순수가상함수 (pure virtual function) 기반클래스에서선언된가상함수지만어떤정의도갖지않는함수 모든파생클래스는이함수를정의하고있어야함 순수가상함수가하나이상있는클래스를추상클래스라함

9.5 동적바인딩 (3) 33 Java 의동적바인딩 Java 의멤버함수는기본적으로동적바인딩이적용됨 예 )