1 / 18

프로그래밍 언어론

프로그래밍 언어론. 제 9 장. 객체 지향 개념 객체 지향 방법론 객체 모델링 객체 지향 언어 C++ 객체 지향 언어 CLOS 객체 지향 언어 Smalltalk 객체 지향 언어 Java. 9.1 객체 지향 방법론. 객체 지향 identity: 데이터는 객체라고 부르는 discrete entity 들로 분류됨 classification: 동일한 데이터 구조와 동작을 가진 객체들이 하나의 클래스로 그룹화 polymorphism: 동일한 연산이 상이한 클래스 상에서 서로 다르게 동작

cael
Download Presentation

프로그래밍 언어론

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

  4. Car Models name Car Co. name has-CarModel 클래스 다이어그램 from-CarCo. (Car Models) Sonata has-CarModel (Car Co.) Hyundai from-CarCo. (Car Models) Tico (Car Co.) Daewoo has-CarModel 인스턴스 다이어그램 from-CarCo. (Car Models) Credos (Car Co.) Kia has-CarModel from-CarCo. 결합과 링크 결합은 양방향이다. 9.2.1 association과 link • link: 객체들간의 물리적 혹은 개념적 연결 • association: 공통적인 의미를 가진 link의 그룹(포인터로 구현)

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

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

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

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

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

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

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

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

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

  14. 객체 지향 언어 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으로 상속 public: ... };

  15. 객체 지향 언어 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가 가리키는 소속 클래스에 따라 상이한 버전의 함수를 동적으로 호출한다.

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

  17. 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 클래스: 자신이 선언된 클래스 밖에서 사용할 수 있는 클래스

  18. 객체 지향 언어 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 키워드나 수퍼 클래스의 필드 접근 표현을 이용하여 참조 가능

More Related