面向對象模型

數據模型種類之一

面向對象模型是一種新興的數據模型,它採用面向對象的方法來設計資料庫。面向對象的資料庫存儲對象是以對象為單位,每個對象包含對象的屬性和方法,具有類和繼承等特點。Computer Associates的Jasmine就是面向對象模型的資料庫系統。

歷史簡介


開發信息系統的新要求如降低開發成本,增強易維護性和開放性,應用發展要求實現數據模擬和行為模擬是傳統資料庫技術開始表現出明顯不足,具體表現為:
(1)數據對象簡單,只能檢索一組數值或短符號域、屬性組成的記錄和由同質記錄共同組合的集合,無複雜的嵌套數據和複雜數據。
(2)對象之間的關係簡單,不能實現實體間聚合、繼承等複雜聯繫。
(3)一致約束不完全,只能預定時機檢查。
(4)事務短壽,併發控制機制簡單。
20世紀90年代來,在關係型資料庫基礎上,引入面向對象技術,從而使關係型資料庫發展成為一種新型的面向對象關係型資料庫。面向對象的程序設計方法是目前程序設計中主要的方法之一,它簡單、直觀、自然,十分接近人類分析和處理問題的自然思維方式,同時又能有效地用來組織和管理不同類型的數據。
把面向對象程序設計方法和資料庫技術相結合能夠有效地支持新一代資料庫應用。於是,面向對象資料庫系統研究領域應運而生,吸引了相當多的資料庫工作者,取得了大量的研究成果,開發了很多面向對象資料庫管理系統,包括實驗系統和產品。
面向對象資料庫管理系統(OODBMS)是資料庫管理中最新的方法。它始於工程和設計領域的應用,並且成為廣受金融、電信萬維網(WWW)應用歡迎的系統。它適用於多媒體應用以及複雜的、很難在關係DBMS里模擬和處理的關係。

關係模型缺陷


1.複雜屬性只能拆分成為並列的單一屬性 例:以公司員工信息管理為例,在‘員工表’中有‘姓名’,‘年齡’,‘地址’等列,其中‘地址’列包含‘省、市、區、街道、門牌號、郵編’,在存儲時可按照字元串存放,但是這不利於查找、更新和刪除,但是如果將‘地址’拆分成‘省’、‘市’、‘區’、‘街道’、‘門牌號’、‘郵編’各個列,並不能反映數據間的真實層次,所以,可將‘地址’列劃分為幾個子列,但是這違反了表的‘原子性’。
2.無法表示變長的屬性 例:以派出所的戶籍管理為例,在‘戶籍表’中有‘戶籍編號’,‘戶主’,‘住址’,‘子女1’,‘子女2’。由於每個家庭的子女數目不相同,所以子女列設置過多浪費空間,而子女列太少又不能滿足要求。可以考慮創建‘子女表’來存放子女信息,但是會帶來不必要的多表連接,而且會破壞‘戶籍表’的整體性,可以考慮將‘子女’列定義為可變數組,但是在關係型數據模型中是不允許的。
3.無法表示嵌套表。例:在‘發貨單表’中包含‘貨單號’,‘貨主’,‘發往地’,‘貨物’,‘發貨日期’等列,其中每張發貨單可以包含多種貨物,其中每筆貨物包含‘貨物名稱’,‘價格’,‘數量’,所以‘發貨單表’中的‘貨物’列,應該是一個‘嵌套表’,而在關係型數據模型中是不允許的,只能通過建立‘貨單細目’表(貨單號,貨單條目編號,貨物名稱,價格,數量)來實現,但是會帶來多表連接。

對象模型


支持對象模型,體現了面向對象資料庫的基本特徵。
向對象數據模型的數據結構是非常容易變化的。與傳統的資料庫(如層次、網狀或關係)不同,對象模型沒有單一固定的數據結構。編程人員可以給類或對象類型定義任何有用的結構,如鏈表、集合、數組等。此外,對象可以包含可變的複雜度,利用多重類型和多重結構。
對象模型可以用二維表來表示,稱為對象表。但對象表是用一個類(對象類型)表定義的。一個對象表用來存儲這個類的一組對象。對象表的每一行存儲該類的一個對象(對象的一個實例),對象表的列則與對象的各個屬性相對應。因此,在面向對象資料庫中,表分為關係表和對象表,雖然都是二維表的結構,但卻是基於兩種不同的數據模型。
對象和對象標識
對象是面向對象編程中最重要的概念,用對象來表示現實世界中的實體。一個學生、一門課程、一次考試記錄都可以看作對象。每個對象包含一組屬性和一組方法。
屬性用來描述對象的狀態、組成和特性,是對象的靜態特徵。一個簡單對象如整數,其本身就是起狀態的完全描述,不需要其他屬性,這樣的對象稱為原子對象。屬性的值可以是複雜對象。一個複雜對象包含若干,而這些屬性作為一種對象,又可能包含多個屬性,這樣就形成了對象的遞歸引用,從而組成各種複雜對象。

封裝和消息


每一個對象都是其屬性和方法的封裝。用戶只能見到對象封裝界面上的信息,對象內部對用戶是隱蔽的。封裝的目的是為了使對象的使用和實現分開,使用者不必知道行為實現的細節,只需用消息來訪問對象,這種數據與操作統一的建模方法有利於程序的模塊化,增強了系統的可維護性和易修改性。

優缺點


面向對象數據模型的優點如下。
(1) 適合處理各種各樣的數據類型
與傳統的資料庫(如層次、網狀或關係)不同,面向對象資料庫適合存儲不同類型的數據,如圖片、聲音、視頻、文本、數字等。面向對象數據模型結合了面向對象程序設計與資料庫技術,因而提供了一個集成應用開發系統。
(2) 提高開發效率
面向對象數據模型提供強大的特性,如繼承、多態和動態綁定,這樣允許用戶不用編寫特定對象的代碼就可以構成對象並提供解決方案。這些特性能有效地提高資料庫應用程序開發人員的開發效率。
(3) 改善數據訪問
面向對象數據模型明確地表示聯繫,支持導航式和關聯式兩種方式的信息訪問。它比基於關係值的聯繫更能提高數據訪問性能。
面向對象數據模型的缺點如下。
(1) 沒有準確的定義
面向對象數據模型很難提供一個準確的定義來說明面向對象DBMS應建成什麼樣,這是因為該名稱已經應用到很多不同的產品和原型中,而這些產品和原型考慮的方面可能不一樣。
(2) 維護困難
隨著組織信息需求的改變,對象的定義也要求改變,並且需移植現有資料庫,以完成新對象的定義。當改變對象的定義和移植資料庫時,它可能面臨真正的挑戰。
(3) 不適合所有應用
面向對象數據模型適合於需要管理數據對象之間存在複雜關係的應用,特別適合於特定的應用,如工程、電子商務、醫療等,但並不適合所有應用,當用於普通應用時,其性能會降低並要求很高的處理能力。

模型對比


針對數據模型的三要素,對關係數據模型和面向對象數據模型進行比較。
(1) 在關係模型中基本數據結構是表,而面向對象數據模型中對應的是類。關係中的數據元組相當於面向對象數據模型中的實例。
(2) 在關係數據模型中的數據操作都歸結為對關係的運算。在面向對象數據模型中,對類的操作分為兩部分:一是封裝在類內的操作,即方法;二是類間相互溝通的操作,即消息。
(3) 在關係數據模型中有實體完整性、參照完整性和用戶定義的完整性約束,約束條件可以用邏輯公式表示。在面向對象數據模型中可以用方法或消息表示約束,稱為完整性約束消息。