프로그래밍 언어론 제 9 장 객체 지향 개념 객체 지향 방법론 객체 모델링 객체 지향 언어 C++ 객체 지향 언어 CLOS

Slides:



Advertisements
Similar presentations
Class diagram. 클래스 클래스 이름 연산 속성 2 class Transportation { private int maximumPassenger; private double speed; public void depart(); public void stop();
Advertisements

6.1 사용사례 6.2 객체 모델링 6.3 동적 모델링 6.4 시스템 설계 6.5 객체 설계 6.6 디자인 패턴
3. C++와 객체지향 C++ 코딩 방법 객체 단위로 2 개의 파일 인터페이스 파일 구현파일
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
C++ Espresso 제1장 기초 사항.
객체지향 프로그래밍.
Chap05 상속 5.1 상속의 개요 5.2 멤버 변수의 상속 5.3 메소드의 상속과 오버라이딩(Overriding)
Java로 배우는 디자인패턴 입문 Chapter 0. UML 과 Design Pattern
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
명품 JAVA Programming.
Java RMI (Remote Method Invocation)
C++ Espresso 제9장 다형성.
소프트웨어공학 UML 학기.
[INA470] Java Programming Youn-Hee Han
10장 객체-지향 프로그래밍 II ©창병모.
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
C++ Component System KASA 김성헌.
객체지향 언어와 클래스, 객체 ㅎㅎ 개요 클래스의 선언, 객체의 생성 및 속성 참조 방식 멤버 변수 메소드 한빛미디어(주)
자바 5.0 프로그래밍.
명품 JAVA Essential.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 03. 클래스의 기본.
명품 Java Programming.
소프트웨어설계 UML 학기.
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
윤 홍 란 4 장 클래스 작성 윤 홍 란
Chapter 05. 클래스 완성. chapter 05. 클래스 완성 01. 복사 생성자 복사 생성(Copy Construction) 생성될 때 자신과 같은 타입의 객체를 변수로 받아, 이 객체와 같은 값을 갖는 새로운 객체를 생성하는 것 명시적인 생성 과정뿐만.
2010학년도 2학기 객체지향의 이해.
Power Java 제7장 클래스와 객체.
5 장 객체 지향 프로그래밍 5.1 객체 지향 프로그래밍의 개념 5.2 객체 지향 프로그래밍
DataScience Lab. 박사과정 김희찬 (월)
C ++ 프로그래밍 시작.
인터페이스(Interfaces) 강원대학교.
김 정 석 Web Programming 김 정 석
제1장 서론.
2009학년도 1학기 상지대학교 컴퓨터정보공학부 고 광 만
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Java 8장. 상속 public class SumTest {
자바의 신 Volume 1 1부(1~3장) 자바의 신 메인 홈 : 자바의 신 페이스북: 자바의 신 문제 풀이 :
어서와 Java는 처음이지! 제9장 인터페이스, 패키지.
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
소프트웨어 공학 (Software Engineering)
가상함수와 추상 클래스.
메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve
C# 09장. 상속성.
Web programming Chap 04 상속 김 정 석
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
프로그래밍 개론 Ⅰ 제 1장 . 서론 ①.
Java Chapter 4 ~ 주차.
컴퓨터공학실습(I) 3주 인공지능연구실.
제 4장. 객체 지향 프로그래밍 시작하기 학기 프로그래밍언어및실습 (C++).
Java IT응용시스템공학과 김형진 교수 5장. 객체지향 개념 public class SumTest {
Chapter3 : 객체지향의 개념 3.1 객체지향(object-oriented)과
Chap02 객체 지향 개념 2.1 객체지향(object-oriented)과 절차지향(procedural-oriented)
JA A V W. 04.
Chapter 02. 소프트웨어와 자료구조.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
[ 단원 06 ] 상속과 다형성.
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
3장,4장 발표 서정우.
Part 3 객체지향 Chapter 5 : 객체지향 개념 Chapter 6 : 클래스 : 속성
Java RMI (Remote Method Invocation)
6장 클래스(상속).
Java 5장. 객체지향 개념 public class SumTest {
컴퓨터 계측 및 실습 C++ 기초 영남대학교 기계공학부.
Java의 정석 제 7 장 객체지향개념 II-3 Java 정석 남궁성 강의
C++ 언어의 특징
1. 객체-지향 프로그래밍.
Chapter8 : 인터페이스와 패키지 8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용
Presentation transcript:

프로그래밍 언어론 제 9 장 객체 지향 개념 객체 지향 방법론 객체 모델링 객체 지향 언어 C++ 객체 지향 언어 CLOS 객체 지향 언어 Smalltalk 객체 지향 언어 Java

9.1 객체 지향 방법론 객체 지향 방법론 identity: 데이터는 객체라고 부르는 discrete entity들로 분류됨 classification: 동일한 데이터 구조와 동작을 가진 객체들이 하나의 클래스로 그룹화 polymorphism: 동일한 연산이 상이한 클래스 상에서 서로 다르게 동작 inheritance: 계층 관계를 기초로 클래스들간의 속성과 연산을 공유 방법론 분석:문제의 기술로부터 중요한 성질을 보여 주는 실세계의 모델링 설계: 각 클래스를 구현하는데 필요한 데이터 구조와 알고리즘 생성 구현: 객체 클래스들과 이들의 관계가 프로그래밍 언어로 변환

9.2 객체 모델링 객체와 클래스 속성과 연산 객체는 crisp 경계를 가진 개념, 추상화, thing 클래스는 객체의 그룹 속성: 데이터 값 연산: 객체에 혹은 객체에 의해 적용될 수 있는 함수 Car Co. 클래스 (Car Co.) Hyundai Daewoo Kia 객체 name: string date: integer location: string 1960 Ulsan 1970 Inchon 속성 name date location displaylogo File size Last-update print Stack push pop isempty 연산

9.2.1 association과 link link: 객체들간의 물리적 혹은 개념적 연결 Car Co. name Car Models (Car Co.) Hyundai Daewoo Kia (Car Models) Credos Tico Sonata has-CarModel from-CarCo. 결합과 링크 클래스 다이어그램 인스턴스 다이어그램 결합은 양방향이다.

association과 link (2) Circle은 Line과 0,1,2개의 점에서 접한다. Line Circle Intersects 결합 이름을 가지지 않는 3원 결합 Car Dealers CarModels Car Co. 다대다 결합과 링크 (Car Dealers) Yoon-Sung (CarModels) Sonata (Car Co.) Hyundai 객체 인스턴스들간의 관계

9.2.2 link 속성 link 속성: association 내에 있는 link의 특성 Owned by Cars Owners years of ownership 다대다 관계의 링크 속성 Car Co. name date location CarModels cylinders Manufactures Location volume 일대다 관계의 링크 속성 하나의 Car Co. 제작자(manufactures)는 여러 개의 CarModels을 가지므로 일대다 관계이다. Manufactures의 속성은 location과 volume이다.

9.2.3 aggregation aggregation: 부모 클래스가 자신의 component를 기술하는 서브 클래스를 갖는 관계 (PART-OF 관계) Automobile Engine Cooling System Steering System Drive Train Water Pump Thermostat Radiator Cylinder Aggregation 다단계(Multilevel) aggregation – 자동차의 구성요소

9.2.4 generalization과 inheritance generalization: 서브 클래스가 부모 클래스보다 더욱 specialize되는 관계 (IS-A 관계), 서브 클래스들은 부모 클래스들의 특성을 상속 받고, 이 특성을 변경하거나 새로운 속성을 추가 inheritance, generalization, specialization은 동일하거나 관련된 개념 autos jeeps sportscars sedans Musso Korando Tiburon Scoupe Accent Elantra 상속과 일반화

university members administrators faculty students classes advise grade teach attend 1 m n 수퍼클래스와 서브클래스

abstract class: 자신은 인스턴스를 가지지 않지만, 자신의 descendant 클래스들은 직접적인 인스턴스를 가짐 concrete class: 인스턴스를 가질 수 있는 클래스 concrete class abstract non-leaf instance leaf class has subclasses superclass has direct instances 1+ abstract 클래스와 concrete 클래스

multiple inheritance: 하나의 클래스가 둘 이상의 수퍼 클래스를 가지고 모든 부모로 부터 상속 받는 것을 허용 Car Models SportsCars Sedans 4-door hardtops 2-door hardtops Station Wagons 다중 상속 Staff Students teaching faculty support staff graduate student undergraduate assistant administration 분리된 클래스로부터의 다중 상속

9.3 객체 지향 언어 C++ C++의 특징 클래스들을 통해 데이터 추상화 기능 제공 사용자가 모델링하고자 하는 형의 구조와 연산을 정의하여 사용자 정의 형 지원 연산자들의 의미를 사용자가 정의하는 클래스에 맞게 재정의 할 수 있는 연산자 중복 정의 제공 Base class에서 derived class를 유도하여 상속 기능 지원 클래스에 대한 멤버에 대한 접근을 제한(public, protected, private) 하여 캡슐화 가능 C를 기반으로 하는 언어이므로 성능이 우수 정적 형 검사로 인터페이스 에러 방지 가상 함수를 이용한 동적 바인딩 제공

객체 지향 언어 C++ (2) 클래스와 상속 클래스: 멤버(데이터 구조)와 이 데이터들에 연산을 수행하는 멤버 함수로 구성 멤버: 기본 형, 포인터, 배열, 구조체, 클래스, 자기 포인터 멤버 함수의 몸체는 클래스 외부에 정의 가능 동일한 이름의 멤버 함수의 소속 클래스를 구분하기 위한 클래스 지정 기호 :: class vector { int size; int *p; public: int readsize( ); ... }; int vector::readsize( ) return size; 인라인 함수: 멤버 호출시 발생하는 비효율성을 막기 위해 함수의 몸체를 삽입 멤버 함수의 몸체가 포함되면 자동적으로 인라인 함수로 선언 멤버 함수의 몸체가 클래스 정의 외부에 위치하면 inline int vector::readsize( ) {return size;}

객체 지향 언어 C++ (3) 클래스와 상속 생성자(construct): 객체의 생성과 초기화를 하는 특수한 멤버 함수 소멸자(destruct): 사용을 다한 객체의 기억장소 영역을 반납 vector(int sz=10){size = sz; p = new int[10];} ~vector( ){delete[size] p;} 프렌드(friend) 함수: 한 클래스의 멤버를 다른 클래스의 멤버나 다른 일반 함수가 접근하도록 허용 Template: 객체 생성시 객체 멤버의 형을 인자로 받아들임 상속: 이미 정의된 클래스로부터 속성과 연산에 관한 내용을 물려 받고, 새로운 내용을 추가하거나 변경해서 새로운 클래스를 정의하는 것 class A { // base class ... public: }; class B: public A { // B는 derived class, : public A 선언으로 privateprivate, publicpublic 상속 ... // :private A라면, 클래스 A의 모든 멤버와 멤버 함수는 B의 private으로 상속

객체 지향 언어 C++ (4) 클래스와 상속 가상 함수(virtual function): 컴파일시 형이 정확하게 지정되지 않은 객체의 멤버 함수를 실행시 동적으로 선택 가능 함수, 즉 기본 클래스의 멤버 함수를 파생 클래스에서 다시 정의할 수 있도록 하여 이 두 클래스의 함수를 실행시 동적으로 선택 가능 class A { // 앞의 A와 B 클래스 관계 유지 ... public: virtual int vit_fun( ); // A의 vit_fun이 가상 함수 }; A a; B b; A* ap = &a; B* bp = &b ap = &b; 앞에서 처음 두 지정문에서 ap->vit_fun( ), bp->vit_fun( ) 각각은 A::vit_fun( )와 B::vit_fun( )을 나타낸다. 그러나 마지막 지정문을 수행한 후의 ap->vit_fun( )은 B::vit_fun( )을 호출한다. 그 이유는 A의 vit_fun( ) 함수가 가상 함수로 선언되었기 때문에 ap가 가리키는 소속 클래스에 따라 상이한 버전의 함수를 동적으로 호출한다.

객체 지향 언어 C++ (5) 객체 지향 개념과 C++ 객체 지향 개념 C++에서의 구현 방법 클래스 복잡한 영역 규칙을 가진 별개의 개념 객체 변수 선언을 통한 사례화로 객체를 생성. 생성자 함수가 객체를 초기화 속성 클래스 내에 포함된 멤버라고 부르는 지역 데이터 구조 연산 클래스 내에 포함된 멤버 함수라고 부르는 연산 결합 명시적으로 지원되지 않고, 전형적으로 포인터가 이용됨 링크 포인터 링크 속성 클래스에 링크를 만듬 상속, kind-of 서브클래스 정의에 수퍼클래스를 부착 다중 상속 다중 수퍼클래스를 부착 집단 part-of 상속을 이용 일반화, is-a 상속을 이용 추상 클래스 순수 가상(pure virtual) 함수를 포함 추상 연산 가상 함수 및 순수 가상 함수를 포함

9.6 객체 지향 언어 Java Java의 특징 클래스와 상속 모든 프로그램은 클래스와 인터페이스로 구성되고, 클래스와 인터페이스들이 모여 패키지를 구성 클래스와 인터페이스 내에 선언된 모든 메소드들을 밖에서 구현할 수 없음 class Hello { public static void main(String args[ ]) { system.output.println(“Welcome to Java World!!”); } 간결하고(포인터와 사용자에 의한 메모리 관리 기능 제거), 중립적이고, 이식성이 강한 언어 클래스와 상속 <지정자> class 클래스 이름 <extends 수퍼 클래스> <implements 인터페이스 이름> { 클래스 몸체 abstract 클래스: 하나 이상의 abstract 메소드를 가짐 final 클래스: 서브 클래스를 가질 수 없음, 즉 다른 클래스 선언에서 extends 절에 위치할 수 없음 public 클래스: 자신이 선언된 클래스 밖에서 사용할 수 있는 클래스

객체 지향 언어 Java (2) 클래스와 상속 인터페이스: 호출 방식만 선언된 메소드들과 상수들만 가짐, 메소드의 구현은 클래스에서 이루어짐 interface information { public boolean Add(Human Data); public boolean Delete(Human Data); public boolean Search(Human Data, boolean state[ ]); }; … 변수는 멤버 변수(클래스 내에서 선언)와 지역 변수(메소드나 블록 내에서 선언)로 구분됨 public 변수: 어느 곳에서나 직접적인 사용이 가능 protected 변수: 서브 클래스와 그 변수를 선언한 클래스가 있는 패키지 안에서만 사용 가능 private 변수: 오직 선언된 클래스 내에서만 사용 가능 모든 클래스들은 Object 클래스의 서브클래스 상속 표시: class MyClass extends Applet { … } 변수의 이름이 수퍼 클래스에서 선언된 멤버 변수 이름과 동일하면 수퍼 클래스의 멤버 변수가 shadow됨: super 키워드나 수퍼 클래스의 필드 접근 표현을 이용하여 참조 가능