Presentation is loading. Please wait.

Presentation is loading. Please wait.

Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

Similar presentations


Presentation on theme: "Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수"— Presentation transcript:

1 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
제 8 장 객체 지향 데이터베이스 새로운 데이터베이스 응용 객체 지향 데이터 모델 객체 지향 언어 영속 프로그래밍 언어 영속 C++ 시스템 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

2 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
새로운 데이터베이스 응용 데이터 처리 유형의 어플리케이션용으로 설계된 데이 터 모델은 CAD, CASE, 멀티미디어와 이미지 데이터베 이스 및 문서/하이터텍스트 데이터베이스와 같은 신기 술에는 부적합하다. 이들 새로운 응용에서는 데이터베이스 시스템이 다음 과 같은 기능을 처리하도록 요구한다. 복합 데이터형 데이터 캡슐화 및 추상 데이터 구조 인덱싱 및 질의에 있어 고상한 방법 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

3 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
객체 지향 데이터 모델 관대하게 말하면, 객체는 E-R 모델의 엔티티에 상응한다. 객체 지향 패러다임은 객체에 관련한 코드와 데이터를 하 나의 단위로 캡슐화하는데 근거한다. 객체 지향 데이터 모델은 E-R 모델같이 논리적 모델이다. 객체 지향 프로그래밍 패러다임(Smalltalk, C++)을 데이 터베이스 시스템에의 적용 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

4 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
객체 구조 객체에 관련된 사항은 다음과 같다 객체에 대한 데이터를 내포하는 변수의 집합. 각 변수의 값은 자체가 객체이다. 객체가 반응하는 메시지의 집합. 각 메시지는 0이상의 매개 변수를 가질 수 있다. 메시지를 구현하는 코드의 본체인 메소드의 집합. 메소드는 메시지 에 대한 응답으로 값을 반환한다. 데이터의 물리적 표현은 객체의 구현자에게만 보인다. 메시지와 응답은 객체에의 외부 인터페이스만을 제공한다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

5 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
메시지와 메소드 메시지라는 용어는 반드시 물리적 메시지 전달을 내포한 필요는 없다. 메시지는 프로시저 호출로 구현될 수 있다. 메소드는 다음과 같은 기능을 가진 범용 언어로 작성된 프로그램 이다. - 객체 자체내의 변수만이 직접 참조될 수 있다. - 다른 객체의 데이터는 메시지를 보냄으로써만이 참조된다. 정확히 말하면, 엔티티의 각 애트리뷰트는 하나의 변수와 두 개의 메소드로 표현되어야 한다. 예를 들어, 애트리뷰트 address는 변수 address와 두 개의 메시지 get-address와 set address로 표현된다. 편의상, 많은 객체 지향 모델에서는 다른 객체의 변수에 직접 액세스 를 허용한다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

6 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
객체 클래스 유사한 객체들은 클래스로 그룹핑되고, 그러한 각 객체를 그 클래 스의 사례라 한다. 클래스내의 모든 객체는 다음을 공통으로 갖는다 - 변수형 - 메시지 인터페이스 - 메소드 변수에 할당되는 값은 다를 수 있다 예: 사람 객체를 person클래스로 그룹핑한다. 클래스는 E-R모델의 엔티티 집합과 유사하다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

7 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
클래스 정의 예제 class employee { /* Variables */ string name; string address; date start-date; int salary; /* Messages */ int annual-salary(); string get-name(); string get-address(); int set-address(string new-address); int employment-length(); } ; 엄격한 캡슐화에서는 다른 변수를 읽고 설절하는 메소드가 또한 요구된 다 employment-length는 유도 애트리뷰트의 예이다 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

8 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
상속 예를 들어, 은행 종업원 클래스와 유사한 은행 고객 클래스. 두 클래스는 모두 name과 address 같은 변수와 메시지는 공통으로 갖는다. 그러나, 종업원의 salary와 고객의 credit-rating 같이 각 클래스에 특정한 변수와 메시지가 있다. 모든 종업원은 사람이다. 따라서, employee는 person의 세분화이다. 이와 비슷하게, customer는 person의 세분화이다. person, employee 및 customer 클래스를 생성한다 person클래스에 연관된 모든 사람들에게 적용 가능한 변수/메시지 클래스 employ에 연관된 종업원에 특정한 변수/메시지. 고객에도 유사하다 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

9 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
상속(계속) 클래스를 ISA 계층으로 세분화한다 person 클래스에 속한 변수/메시지는 customer와 employee 클래스에 상속된다. 다음은 결과 클래스 계층이다 person employee customer officer teller secretary E-R 모델의 ISA 계층과 유사함에 유의하라 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

10 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
클래스 계층 정의 class person { string name; string address; } ; class customer isa person { int credit-rating; class employee isa person { date start-date; int salary; class officer isa employee { int office-number; int expense-account-number; . Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

11 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
클래스 계층 예제(계속) 클래스 officer내 객체의 모든 변수 리스트 - office-number,expense-account-number: 지역적으로 정의됨 - star t-date,salary: employee에서 상속됨 - name,address: person에서 상속됨 메소드도 변수와 유사하게 상속된다. 대치성 - 클래스(예를 들어, person)의 어떤 메소드도 person의 서브 클래스 officer와 같이 어떠한 서브 클래스에 속한 어떤 객체 내에서도 호출될 수 있다. 클래스 범위. 클래스내 모든 객체의 집합. 두 가지 선택 사항이 있다. 1. Employee 클래스 범위에는 모든 officer, teller 및 secretary 객체를 포함한다. 2. Employee 클래스 범위에는 officer, teller 또는 secretary 같은 서브 클래스에 는 속하지 않는 종업원 객체만을 포함한다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

12 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
다중 상속의 예제 은행 예의 클래스 DAG person employee customer full-time part-time teller secretary officer full-time-teller part-time-teller full-time-secretary part-time-secretary Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

13 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
다중 상속 클래스/서브 클래스 관계는 방향성 비순환 그래프(DAG)로 표현된다 - 클 래스는 하나 이상의 수퍼 클래스를 가질 수 있다. 클래스는 그의 모든 수퍼 클래스로 부터 변수와 메소드를 상속한다. 모호성의 가능성이 있다. 예를 들어, 두 개의 수퍼 클래스로부터 상속되 는 같은 이름을 가진 변수. 에러 처리하기 또는 변수의 재명명 같은 해결 책이 있다. 다중 상속을 이용해 객체의 “역할”을 모델링할 수 있다. person은 student, teacher 또는 footballplayer 또는 세 가지 모두의 역할을 할 수 있다. 여러 클래스로부터 상속하는 student-teacher 및 student-teacher-footballplayer와 같은 서브 클래스를 생성한다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

14 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
객체 식별성 객체는 변수의 값 또는 메소드 정의의 일부 또는 전부가 시간에 따 라 변하더라도 그의 정체성을 유지한다. 객체 식별성은 객체 지향이 아닌 프로그래밍 언어 또는 데이터 모 델에서의 식별성보다 강력한 개념이다. - 값 - 데이터 값 ; 관계형 시스템에서 사용된다. - 이름 - 사용자가 제공하는 ; 프로시저내의 변수에 사용된다 - 내장 - 데이터 모델 또는 프로그래밍 언어에 내장된 식별성 * 사용자가 제공하는 식별자가 필요치 않다. * 객체 지향 시스템에서 사용되는 식별성을 형성한다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

15 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
객체 식별자 객체 식별자는 객체를 유일하게 식별하는데 사용된다 - 다른 객체를 참조하기 위해 객체의 필드로서 저장될 수 있다. - 예를 들어, person 객체의 spouse 필드는 다른 person 객체의 식별자일 수 있다. - 시스템이 생성할 수도 있고(데이터베이스가 생성) 외부적으로 생성할 수도 있다(사회 보장 번호 같은). Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

16 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
객체 내포 bicycle wheel brake gear frame rim spokes tire lever pad cable 설계내의 각 구성 요소는 다른 구성 요소를 내포할 수 있다. 객체의 내포로 모델링 될 수 있다. 다른 객체를 내포하는 객체를 복합 또는 혼성 객체라 한다. 내포의 여러 계층이 내포 계층을 생성한다. 링크는 is-a가 아닌 is-part-of로 해석한다. 서로 다른 사용자가 데이터를 서로 다른 단위로 볼 수 있도록 한다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

17 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
객체 지향 언어 객체 지향 개념은 설계 도구로서 사용될 수 있으며 예를 들어, 관계형 데이터베이스에 적용될 수 있다 (E-R도로 데이터를 모델링하고 릴레이션의 집합으로 변환하는 것 과 유사). 객체 지향 개념은 데이터베이스를 조작하는데 사용되는 프로그래밍 언어에 결합될 수 있다. 객체-관계 시스템 - 관계형 언어에 복합형과 객체 지향성을 추 가. 영속 프로그래밍 언어 - 객체 지향 프로그래밍 언어에 영속성과 집합과 같은 개념을 추가해 데이터베이스를 다루도록 확장. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

18 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
영속 프로그래밍 언어 영속 프로그래밍 언어 어떤 명시적인 포맷 변환 없이도 객체가 데이터베이스에 생성되고 저장되도록 한다(포맷 변환은 내부적으로 수행된다). 객체들이 메모리 내에서 조작되도록 한다 - 데이터베이스로부터 명시적으로 로드되거나 저장할 필요가 없다. SQL 같은 데이터 조작어를 통할 필요 없이 프로그래밍 언어 내에서 데이터가 직접 조작되도록 한다. 대부분 프로그래밍 언어의 능력으로 인해 데이터베이스에 손상을 입히는 프로그래밍 에러를 일으키기 쉽다. 언어의 복잡성으로 자동적인 고급 최적화가 보다 어려워진다. 선언적인 질의는 잘 지원하지 못한다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

19 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
객체의 영속성 임시 객체에 영속성을 부여하는 방법은 다음중 하나에 의해 이룰 수 있다. 클래스 - 클래스의 모든 객체가 영속적이도록 선언 ; 단순하지만 융통 성이 없다. 생성 - 임시 객체를 생성하기 위한 구문을 확장해 영속 객체를 생성하 도록 한다. 표시 - 프로그램 실행 이후 영속적이어야 할 객체에 프로그램이 끝나 기 전에 영속적인 것으로 표시를 한다. 참조 - 루트 영속 객체를 선언한다 ; 루트 객체로 부터 직간접으로 참 조되는 객체는 영속적이다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

20 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
객체 식별성과 포인터 영속 객체에는 영속 객체 식별자가 할당된다. 식별성의 영속 정도 프로시저내 - 식별성이 한 프로시저의 실행중에만 영속한다. 프로그램내 - 식병성이 한 프로그램 또는 질의 실행중에만 영속 한 다. 프로그램간 - 식별성이 한 프로그램 실행으로 부터 다른 프로그 램으 로 영속한다. 영속적 - 식별성이 프로그램 실행과 데이터의 구조 재조정에 걸쳐 영 속한다 ; 객체 지향 시스템에는 요구된다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

21 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
객체 식별성과 포인터(계속) C++와 같은 객체 지향 언어에서는 객체 식별자가 실제 로 메모리내 포인터이다. 영속 포인터 - 프로그램 실행 이후에도 영속한다 ; 데이 터베이스 내의 포인터로 생각할 수 있다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

22 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
영속 객체의 저장 및 액세스 데이터베이스에서 객체를 찾는 법 객체에 이름주기(파일에 이름을 주듯이) - 많은 수의 객 체에는 확대할 수 없다. 일반적으로는 객체가 아닌 클래스 범위와 기타 객 체의 집단에만 주어진다. 객체에 객체 식별자 또는 영속 포인터 부여 - 외부적으 로 저장될 수 있다. - 모든 객체에 객체 식별자를 갖는다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

23 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
영속 객체의 저장 및 액세스(계속) 데이터베이스에서 객체를 찾는 법(계속): 객체의 집단을 저장하고 프로그램에서 집단을 반복 검색하여 필요한 객체를 찾는다. 객체의 집단을 collection 형으로 모델링 한다. 객체 범위 - 클래스에 속하는 모든 객체의 집단 ; 통 상 영속 객체를 가질 수 있는 모든 객체에 대해 유지 된다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

24 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
- 영속성을 지원하기 위해 애트리뷰트와 메소드를 가진 클래스 Persistent-Object로 선언한다. - 오버로딩 - 새로운 형에 적용할 때 표준 함수명과 연산자를 재정의하 는 기능(즉, +, -, 포인터 역 참조 연산자 ->) C++ 언어를 확장하지 않고 영속성을 제공하면 - 구현하기가 비교적 쉽다 - 그러나 사용하기는 보다 어렵다 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

25 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
ODMG C++ 객체 정의 언어 영속성을 지원하기 위해 C++를 확장한 표준화 언어 ODMG 표준에서는 템플릿 클래스와 클래스 라이브러리를 통해 대부분의 기능을 제공하면서 C++를 가급적 적게 확장하려 하고 있다. 템플릿 클래스 Ref<class>는 참조(영속 포인터)를 지정하는데 사 용된다. 템플릿 클래스 Set<class>는 객체의 집합을 정의하는데 사용된다. insert_element와 delete-element 같은 메소드를 제공한다. C++ ODL은 C++형 정의 구문을 소폭으로 확장하였다. 예: 참조 무결성 제약 조건을 지정하기 위해 inverse 표기법을 사용 한다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

26 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
ODMG C++ ODL : 예제 class Person : public Persistent_Object { public : String name ; String address ; } ; class Customer : public Person { Date member_from ; int customer_id ; Ref<Branch> home_branch ; Set<Ref<Account>> accounts inverse Account :: owners ; Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

27 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
ODMG C++ ODL : 예제(계속) class Account : public Persistent_Object { private : int balance; public: int number; Set<Ref<Customer>> owners inverse Customer :: accounts; int find_balance(); int update_balance(int delta); } ; Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

28 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
ODMG C++ 객체 조작어 new(db)와 같은 C++연산자의 영속 버전을 사용한다. Ref<Account> account = new(bank_db) Account; new는 객체를 메모리가 아닌 특정 데이터베이스에 할당한다. 역참조 연산자 ->를 Ref<Customer> 객체에 적용하면 참조되는 객체를 메모리로 로드하고(없으면) 객체에 메모리내 포인터를 반 환한다. 클래스의 Constructor - 객체가 생성될 때 객체를 초기화하는 특 수 메소드 ; new가 실행될 때 자동으로 호출된다. 클래스의 Destructor - 클래스내 객체가 삭제될 때 호출되는 특수 메소드 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

29 Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수
ODMG C++ OML : 예제 int create _account_owner (String name, String address) { Database * bank_db ; bank_db = Database :: open("Bank-DB") ; Transaction Trans ; Trans.begin() ; Ref<Account> account = new(bank_db) Account ; Ref<Customer> cust = new(bank_db) Customer ; cust->name = name ; cust->address = address ; cust->accounts.insert_element(account) ; account->owners.insert_element(cust) ; ... Code to initialize customer_id, account number etc. Trans.commit() ; } Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수

30 ODMG C++ OML : Iterator의 예제
int print_customers() { Database * bank_db ; bank_db = Database :: open("Bank-DB") ; Transaction Trans ; Trans.begin() ; Iterator<Ref<Customer>> iter = Customer :: all_customers.create iterator() ; Ref<Customer> p ; while(iter.next(p)) { print_cust(p) ; } Trans.commit() ; Iterator 구조는 집합내 객체들을 통한 처리를 돕는다. Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수


Download ppt "Copyrightⓒ 1999 서울산업대학교 전자계산학과 석상기 교수"

Similar presentations


Ads by Google