• 검색 결과가 없습니다.

객체지향 프로그래밍

N/A
N/A
Protected

Academic year: 2022

Share "객체지향 프로그래밍 "

Copied!
20
0
0

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

전체 글

(1)

객체지향 프로그래밍

(2)

객체지향 프로그래밍언어의 특징

모듈화와 정보은폐

메소드 해결과 지연메소드의 선택

공유

클래스계층 어프로치와 프로토타입 어프로치

프로그래밍언어에 있어서 클래스

클래스계층의 하위클래스의 정의

(3)

K.J.Lieberherr의 객체지향 프로그래밍 3가지의 주요 액터비티

・ 모듈화(modularity)와 정보은폐(information hiding)

・ 메소드 해결(method resolution)과 지연 메소드의 선택

・ 공유(sharing)

객체지향 프로그래밍언어의 특징

(4)

프로그램은 객체로 구성

객체는 다른 객체와 관계를 정의하는 일도 가능

그 경우에 클래스에는 객 체가 가지 정보 및 조작과 메소드가 정의

메소드는 객체의 행동을 정의하 는 것으로 조작을 구현

클래스는 정보은폐의 단위

모듈화와 정보은폐

(5)

그 클래스의 메소드가 어떤 것인가를 알 필요가 있는 것은 그 클래스 의 개발자뿐

클래스의 이용자는 공개된 인터페 이스를 알고 있는 것만으로 그 클 래스의 서비스를 받음

(6)

객체에 행동을 실행시키기 위해서는 어느 객체가 그 객체에 서비스 를 요구 (request)

요구에 의하여 하나 또는 몇 개의 메소드가 기동

실행시에 메소드의 선택

어느 메소드가 기동되는가는 조작의 매 개변수나 요구를 수리한 객 체에 의존

메소드 해결과 지연메소드의 선택

(7)

공유란 객체가 다른 객체의 행동을 이용할 수 있다는 것을 의미

이것을 실현하는 방법에

클래스계층 어프로치

프로토타입 어프로치

공유

(8)

공유 어프로치 특징 프로그래밍 언어

클래스계층

정보의 중복을 피하기 위하여 클래스가 계층구조를 가 지며, 일반화된 클래스로 부터의 계층에 의해서 하위클 래스를 정의한다.

계층에 의하여 다수의 메소드의 조합이 open으로 이루 어진다.

Smaltalk, Flavers, Object-c, Loops, C++, DBJVLISP, CLOS, Java

프로토타입

객체가 프로토타입의 정보를 공유한다. 어떤 객체라도 프로토타입이 될 수 있다.

어느 프로토타입의 정보를 가지는 객체를 정의하는 경 우에는 프로토타입 리스트에 포함되는 객체를 확장하 고, 그 객체에 고유의 정보를 추가한다.

Self, Actors, T

클래스계층 어프로치와 프로토타입 어프로치

(9)

Java와 C++에 있어서 클래스 선언문의 모양도

클래스와 마찬가지로, 「클래스명, 속성, 조작, 메소드」를 기술함에 의하여 클래스의 정의

속성은 데이터멤버, 인스턴스 변수, 스롯 등으로 불리우며, 클래스 또는 기본형(정수형, 논리형등)의 지정과 변수명에 의하여 기술

이 변수명은 메소드정의 가운데에서 사용

조작은 이름, 아규먼트로 이루어지는 시그너처와 반환값의 유형(클 래스 또는 변수의 선언, 대입, 제어문(반복, 선택등)을 사용

프로그래밍언어에 있어서 클래스

(10)

Java의 경우에는 메소드도 인터페이스(조작과 그 호출하는 아규먼 트 나열)와 동일

파일에 정의

다른 클래스의 객체로부터 액세스 할 수 있는 것은 public속성을 가 지는 조작 뿐

변수나 메소드에 직접 엑세스 불가

(11)

클래스의 정의

class ClassA : public ClassParent {

public :

int opA1(void);

ClassX opA2(arg2);

……

private :

int dataA1;

ClassY dataA2;

……

}

int ClassA::opA1(void) {

……

return 0;

}

ClassX ClassA::opA3(arg3) {

classX x;

……

return x;

}

class ClassB extends ClassParent {

int attr1;

String attr2;

ClassX attr3;

……

public int opB1(){

메소드의 정의 }

public ClassX opB2(arg2){

메소드의 정의 }

……

}

인터페이스의 정의 In ClassA.h 메소드의 정의 In ClassA,cpp

C++

Java

조작의 정의

속성의 정의

속성의 정의

조작의 정의

조작의 정의

변수의 선언

if, for, while 등에 의한 제어 객체생성 메소드의 호출

대입

변수의 선언

if, for, while등에 의한 제어 메소드 호출

대입

(12)

C++에서는 「public:」의 다음에 계속되는 멤버가 다른 클래스에 공개 되는데, 객체지향으로 프로그래밍을 하게 되면 여기에 데이터멤버 를 정의 하는 것은 바람직하지 않음

공개하는 조작을 분명하게 제한함에 의하여 객체지향 프로그래밍언 어에서는 정보은폐를 실현

조작이 호출되게 되면 그것을 구현한 메소드가 기동

(13)

클래스계층 공유어프로치에서는, 부모(parent)클래스에 정의되어 있는 정보의 조작은 자식(child)클래스에서 정의되지 않고, 정의되지 않은 나머지 것만을 그 클래스에 기술

부모클래스에 정의되어 있는 조작의 메소드를 자식클래스에서 바꿀 필요가 있는 경우에는 그 조작을 재정의(override)

조작만이 정의되어 있고, 메소드가 정의되지 않은 클래스를 정의

(14)

클래스계층의 하위클래스의 정의

Party

TelephnNumber telephone_nember Address address

TelephnNumber getTelephoneNumber BOOL setTelephoneNumber(String) Address getAddress()

BOOL setAddress(String)

Person

Country nationarity

Country getNationarity()

BOOL acquireNationarity(Country)

(15)

그 자손클래스(=그 클래스를 계승하는 클래스)에 있어서 정의되게 되는 메소드의 인터페이스를 정의하는 일이 의도되게되며 자손클래 스에서 적절한 메소드가 구현되는 일을 가정

virtual operation 또는 generic operation

메소드가 정의되어 있지 않은 조작이 존재하는 클래스의 경우에는 그 클래스의 객체를 인스턴스 생성 불가

이와 같은 클래스는 추상클래스

(16)

모든 메소드가 정의되어 있는 클래스는 구상클래스

그 클래스의 객체를 인스턴스 생성

메소드의 정의에서는 다른 객체의 조작을 호출

호출 할 수 있는 것은 잘 알고 있는 관계에 있는 객체의 조작에

(17)

추상클래스와 구상클래스

Observer update()

Model

Data

setOfObservers

attach(Observer) dettach(Observer) notify

getData

View

update Controller

update

관리한다

시각화한다

이벤트를 배포한다

이벤트를 배포한다 0 .. *

0 .. *

0 .. *

구상클래스

추상클래스

구상클래스 구상클래스

(18)

하나의 클래스에 똑같은 이름을 가지는 여러 개의 조작과 그 메소드 를 정의하는 것을 overloding

오버로딩에 의하여 그 클래스의 클라이언트가 알지 않으면 안되는 조작의 수를 감소

「add」라는 조작이 정수에 대해서는 가산으로서의 기능, 문자열에 대해서는 문자열의 결합을 실시한다면 클래스정의자는 「add(정수)」

와 「add(문자열)」의 두가지를 인터페이스에 정의하고, 그들의 구현 을 실시

동적바인딩

(19)

선조(ancestor)클래스에서 정의되어 있는 조작을 다시 그 클래스에 서 메소드 구현을 하는 것을 재정의(override)

이것에 대하여 다형성(polymorphism)이 실현

메소드의 선택을 실행시에 함

동적바인딩(dynamic binding) 또는 지연바인딩(delayed binding)

(20)

객체지향 프로그래밍언어의 특징에 대하여 설명하시오.

모듈화와 정보은폐에 대하여 설명하시오.

클래스계층 어프로치와 프로토타입 어프로치를 비교설명하시오.

클래스계층의 하위클래스의 정의 방법에 대하여 설명하시오.

추상클래스와 구상클래스에 대하여 설명하시오.

동적 바인딩 방법에 대하여 설명하시오.

연습문제

참조

관련 문서

프로그래밍

 현재 디렉토리 클래스에 포함된 모든 요소(디렉토리 또는 파일)를 하나하나 꺼내서 그 사이즈를 합한다..  아래 코드에서, entry가 File의 인스턴스나

ü 부모 실체의 식별자(UID)가 자식 실체의 식별자(UID)의 일부분이 되는 관계. ü 자식 실체는 부모 실체에 대하여 존재 종속적 (Existence

• 3차 정규형을 위반하고 있을 시에는 평가항목 엔티티처럼 부모 엔티티가 생성되고 그 부모 엔 티티로부터 UID Bar가 없는 관계를 상속받게 된다 ... 기업이 관리하고

재무상태표 정보의 활용..

annualsalary: 외부에서 접근하지 않으나 파생 클래스에서

Passes one parameter to the filter, $template is the current path to the appropriate file for the post type as found in the active child theme or parent theme (if no child

The purpose of this study was to analyze the relationship between children’s playfulness and peer competence, focusing on the parent-child interaction