面向對象數據庫系統支持面向對象數據模型,簡稱OO模型。也就是說,一個面向對象數據庫系統是一個持久的、可共享的對象庫的存儲和管理者;而一個對象庫是由一個OO模型所定義的對象的集合體。
面向對象數據庫系統目前尚缺少關於OO模型的統一的規范說明,OO模型缺少一個統一的嚴格的定義,但是有關OO模型的許多和新概念已取得了共識。
1 OO模型
一個OO模型是用面向對象觀點來描述現實世界實體的邏輯組織、對象間限制、聯系等的模型。一系列面向對象核心概念構成了OO模型的基礎。
OO模型的核心概念主要有:
(1) 對象和對象標識:現實世界的任一實體都被統一地模型化為一個對象,每個對象有一個惟一的標識,稱為對象標識(OID)。OID與關系數據庫中碼的概念,以及部分系統中支持的記錄標識、元組標識有本質的區別。OID識獨立於值、系統全局惟一的。對象通常與實際的表識始終保持不變。如一個對象的部分屬性、方法可能會發生變化,但對象標是不會改變。OID是區分兩個不同的對象的標准。常用OID有以下幾種:
值標識:用值來表示標識。如關系數據庫忠實永遠組的碼值區分元組。
名標識:用一個名字來標識。如在一個作用域內程序變量一般使用的就是名標識。
內標識:是建立在數據模型或程序設計與嚴重的不要求用戶給出的標示。例如,面向對象數據庫系統使用的就是內標識。
(2)封裝:每一個對象是其狀態與行為的封裝,其中狀態是該對象一系列屬性值的集合,行為是在對象狀態上操作的集合,操作也稱為方法。封裝是OO模型的一個關鍵概念,封裝是對象的外部界面與內部實現之間實行隔離的抽象,外部與對象的通信是通過“消息”實現的。
封裝將對象的實現與對象應用相互隔離,允許對操作的實現算法和數據結構進行修改而不應相應用接口;不必修改使用它們的應用,這有利於提高數據獨立性。封裝還隱藏了數據結構與程序代碼等細節,增強了應用程序的可讀性。
查詢或使用對象屬性值必須通過調用方法,如在VB中,要將一個文本框的文本內容存儲到一個字符串變量中,可以使用下面的語句:
以下是引用片段:
myStr=txtTextBox1.text
其中,“.”被稱為訪問符,通過它可以訪問文本框對象txtTextBox1的 text屬性。
(3)類:共享同樣的屬性和方法集的所有對象構成了一個對象類(CLASS),一個對象是某一類的一個實例。類的概念在面向對象數據庫中是一個基本概念,我們把屬性、方法相似的對象集合稱為類,而把每一個對象稱為所屬類的一個實例。
類的概念類似於關系模式,類的屬性類似於關系模式中的屬性;對下類似於源組的概念,類的一個實例對象類似於關系中的一個元組。類本身也可看作一個對象,稱為類對象。
(4) 類層次:在一個面向對象數據庫模式中,可以定義一個磊(C1)的子類(C2),類C1稱為類C2的超類;子類還可以再定義子類(C3)。這樣,面向對象數據庫模式的一組類構成一個有限的層次結構,稱為類層次。在每個類的最頂部通常被稱為基類。 對一個類來說,它可以有多個超類,也可以繼承類層次中其直接或間接超類的屬性和方法。
(5)消息:對象是封裝的,對象與外部的通信一般通過顯式的消息傳遞。即消息從外部傳送給對象,存取和調用對象中的屬性和方法;在內部執行所要求的操作,操作的結果仍以消息的形式返回。
(6)繼承:在OO模型中常用的兩種基稱:單繼承和多重繼承。若一個子類只能繼承一個超類的特性,這種繼承稱為單繼承;若一個子類能繼承多個超類的特性,這種繼承稱為多重繼承。例如“旅行用小汽車”既是小汽車又是旅行車,它繼承了小汽車和旅行車兩個超類的所有屬性、方法和消息,因此它屬於多重繼承。
繼承性是建模的有力工具,它同時提供了對現實世界簡明而精確的描述和信息重用機制。子類可以繼承超類的特性,可以避免許多重復定義,還可以定義自己特殊的屬性、方法和消息。如果在定義自己特殊的屬性、方法、消息時與繼承下來的超類的屬性、方法和消息發生沖突時,通常由系統解決,在不同的系統中使用不同的沖突解決方法,因此便產生了不同的繼承語義。例如對於子類與超類之間的同名沖突,一般是以子類定義的為准,即子類的定義取代或替代由超類繼承而來的定義;對於子類的多個直接超類之間的同名沖突,有的系統是在子類中規定超類的優先次序,首先繼承優先級最高的超類的定義,有的系統則指定繼承其中某一超類的定義。