《面向?qū)ο竽P汀穚pt課件_第1頁
《面向?qū)ο竽P汀穚pt課件_第2頁
《面向?qū)ο竽P汀穚pt課件_第3頁
《面向?qū)ο竽P汀穚pt課件_第4頁
《面向?qū)ο竽P汀穚pt課件_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第三部分第三部分 面向?qū)ο竽P兔嫦驅(qū)ο竽P虶OM Generic Object Model 類型系統(tǒng)與對象系統(tǒng)類型系統(tǒng)與對象系統(tǒng) GOM的構(gòu)造定義的構(gòu)造定義 元組構(gòu)造元組構(gòu)造 聚集構(gòu)造聚集構(gòu)造 對象的標識對象的標識 子對象的共享子對象的共享 對象的耐久性對象的耐久性 Sort類型上的復合構(gòu)造類型上的復合構(gòu)造第七章第七章 對象類型的構(gòu)造對象類型的構(gòu)造7.1 類型系統(tǒng)與對象系統(tǒng)類型系統(tǒng)與對象系統(tǒng) 類型系統(tǒng)類型系統(tǒng)sort type的開展的開展 類型:類型: 早期言語只提供簡單類型早期言語只提供簡單類型 進一步復雜類型進一步復雜類型 簡單類型、構(gòu)造類型、串、指針簡單類型、構(gòu)造類型、串、指針. Ada

2、提出籠統(tǒng)數(shù)據(jù)類型提出籠統(tǒng)數(shù)據(jù)類型ADTabstract data type 用戶本人定義構(gòu)造、操作用戶本人定義構(gòu)造、操作 系統(tǒng)提供打包功能系統(tǒng)提供打包功能 以類型方式提供運用以類型方式提供運用幾種簡單幾種簡單sort類型類型類型的運用、特點、局限類型的運用、特點、局限 變量闡明:指明一個變量的類型變量闡明:指明一個變量的類型 變量賦值:類型的實例化操作變量賦值:類型的實例化操作 實例化結(jié)果:指定一個值實例化結(jié)果:指定一個值 在實例的整個生命周期,值是不變的,因此類型在實例的整個生命周期,值是不變的,因此類型的實例無需標識,值就是其本身的標識的實例無需標識,值就是其本身的標識 變量的重新賦值是重

3、新實例化過程,原實例已消變量的重新賦值是重新實例化過程,原實例已消亡。亡。 類型系統(tǒng)的問題:無法描畫實例的形狀變化,即類型系統(tǒng)的問題:無法描畫實例的形狀變化,即不同的值代表了某個實例在不同時辰的不同形狀不同的值代表了某個實例在不同時辰的不同形狀 數(shù)據(jù)庫的運用是最突出的不協(xié)調(diào)數(shù)據(jù)庫的運用是最突出的不協(xié)調(diào)面向?qū)ο箢愋兔嫦驅(qū)ο箢愋?對象系統(tǒng)強調(diào)的是對象形狀的變化對象系統(tǒng)強調(diào)的是對象形狀的變化 對象的生命周期種的某一瞬間是一個形對象的生命周期種的某一瞬間是一個形狀對象屬性的某個值集狀對象屬性的某個值集 但對象屬性值被修正時,闡明該對象由但對象屬性值被修正時,闡明該對象由一個形狀轉(zhuǎn)化為另一個形狀一個形狀

4、轉(zhuǎn)化為另一個形狀 為了能識別不同形狀下的對象,必需進為了能識別不同形狀下的對象,必需進展標識。展標識。獨一性約束獨一性約束 對象形狀的轉(zhuǎn)化時內(nèi)部變化,因此必需對象形狀的轉(zhuǎn)化時內(nèi)部變化,因此必需進展封裝進展封裝完好性約束完好性約束 對象對象O由由id#, Type, Rep)三元組表示三元組表示7.2 GOM對象類型框架定義對象類型框架定義 對象類型名獨一,超類型名可選。 Public子句提供外部闡明 Body子句描畫構(gòu)造主體 操作子句描畫接口闡明 操作名獨一性 參數(shù)闡明 操作實現(xiàn)子句描畫操作體7.3 元組構(gòu)造的對象類型元組構(gòu)造的對象類型 構(gòu)造主體由三種根本構(gòu)造及其組合構(gòu)造主體由三種根本構(gòu)造及其

5、組合而成而成 元組構(gòu)造元組構(gòu)造(tupe_structure) 集合構(gòu)造集合構(gòu)造(set_structure) 表構(gòu)造表構(gòu)造(list_structure)元組構(gòu)造定義元組構(gòu)造定義Type i可以是簡單sort; 組合sort;對象類型;混合類型;集合類型;表類型;直接遞歸類型等內(nèi)嵌的屬性值讀寫操作內(nèi)嵌的屬性值讀寫操作 VCO操作操作Value receiving operation 值接納操作值接納操作 Declare attri:-type i; 讀取當前第讀取當前第i個屬性形狀個屬性形狀 VTO擦作擦作Value returning operation 值前往操作值前往操作 Declar

6、e attri:+1)例如二例如二 立方體對象模型的正文:立方體對象模型的正文: *定義定義“點的對象類型點的對象類型 *定義原資料的對象類型定義原資料的對象類型 *定義立方體的對象類型定義立方體的對象類型7.4 GOM類型的實例化類型的實例化 一個對象類型框架可產(chǎn)生一系列對象實例一個對象類型框架可產(chǎn)生一系列對象實例 內(nèi)嵌的創(chuàng)建對象操作內(nèi)嵌的創(chuàng)建對象操作“create GOM類型的實例化過程類型的實例化過程 第一步第一步* Var myCuboid :Cuboid;/闡明對象變闡明對象變量量 第二步第二步*執(zhí)行賦值語句執(zhí)行賦值語句: 1 myCuboid:=Cuboid$create; 或或2

7、 myCuboid.create;賦值語句的作用賦值語句的作用1產(chǎn)生了一個初始化的空殼實例;產(chǎn)生了一個初始化的空殼實例;2對該空殼實例賦予了一個對象標志對該空殼實例賦予了一個對象標志OID;3將將OID或?qū)嵗刂焚x給變量或?qū)嵗刂焚x給變量myCuboid;4將空殼屬性值初始化為:將空殼屬性值初始化為: Int:0;float:0.0;char:0;bool:false;復雜對;復雜對象類型:象類型:NULL;5當前該當前該OID還僅是邏輯表示,不能被用戶訪問。還僅是邏輯表示,不能被用戶訪問。*產(chǎn)生了一個僅僅與產(chǎn)生了一個僅僅與OID相聯(lián)絡的一個空對象。相聯(lián)絡的一個空對象。 第三步:對空對象的每個

8、屬性進展實踐值的初始化任第三步:對空對象的每個屬性進展實踐值的初始化任務務例如例如yxV4V8V1V3V6V7V2V5圖7.2 The Topological Representation Of a CuboidmyCuboid圖7.3 The “Skeleton of a New Cuboid Instancemat:NULLvalue:0.0v1:NULLv2:NULLv3:NULLv4:NULLv5:NULLv6:NULLv7:NULLv8:NULLid1Cuboid7.5 對象標識對象標識 表示對象的三種方法:表示對象的三種方法: 內(nèi)容標識內(nèi)容標識關(guān)鍵字標識符關(guān)鍵字標識符 地址標識地址

9、標識物理對象標識符物理對象標識符 邏輯對象標識符邏輯對象標識符 內(nèi)容標識的問題內(nèi)容依賴內(nèi)容標識的問題內(nèi)容依賴 概念的混淆:將兩對象相等與兩對象內(nèi)容相等混為一概念的混淆:將兩對象相等與兩對象內(nèi)容相等混為一談。談。 一致性管理的困難。一致性管理的困難。 例例1:對大商場中,同一商品在不同柜組有不同售價,:對大商場中,同一商品在不同柜組有不同售價,商品的主商品的主key為商品號為商品號+柜組號。柜組號。 例例2:假設主:假設主key為人名為人名+地址,當搬家而修正庫地址,當搬家而修正庫時,給完好性維護帶來困難。時,給完好性維護帶來困難。地址標識地址標識 地址標識地址標識 用對象所分配的地址空間表示對

10、象。用對象所分配的地址空間表示對象。 地址標識問題地址依賴地址標識問題地址依賴 存儲空間的重用導致援用錯誤且無法查存儲空間的重用導致援用錯誤且無法查找。找。例如新對象占用已刪除對象空間。例如新對象占用已刪除對象空間。 分布式系統(tǒng)中對象經(jīng)常被挪動位置。分布式系統(tǒng)中對象經(jīng)常被挪動位置。 DB性能調(diào)整時經(jīng)常需求重構(gòu)硬盤存儲區(qū)。性能調(diào)整時經(jīng)常需求重構(gòu)硬盤存儲區(qū)。邏輯對象標識符邏輯對象標識符 OIDLogical Object Identity對于對于GOM,每個對象可以描畫為下述三元組,每個對象可以描畫為下述三元組O = id#,Type,RepId# :系統(tǒng)產(chǎn)生的對象:系統(tǒng)產(chǎn)生的對象O的邏輯標識符的

11、邏輯標識符Type:對象:對象O的類型的類型Rep:對象的內(nèi)部形狀,即屬性的當前值。:對象的內(nèi)部形狀,即屬性的當前值。OID的特點的特點對象實例初始化時,系統(tǒng)產(chǎn)生一個獨一的對象實例初始化時,系統(tǒng)產(chǎn)生一個獨一的OID一個對象的一個對象的OID在整個生命周期都永遠堅持在整個生命周期都永遠堅持當對象刪除后,其當對象刪除后,其OID值永不復用值永不復用7.6 共享的隊象共享的隊象Share Subject 規(guī)范的規(guī)范的RDBMS:由于:由于INF約束,不支持隊象約束,不支持隊象的援用的援用 擴展的擴展的INF2的的RDBMS,只能支持層次構(gòu)造,只能支持層次構(gòu)造,不支持網(wǎng)狀構(gòu)造不支持網(wǎng)狀構(gòu)造 從需求而言

12、,復雜從需求而言,復雜DB運用要求支持網(wǎng)絡構(gòu)造運用要求支持網(wǎng)絡構(gòu)造 O-O模型中,一個對象模型可以不受限制地援模型中,一個對象模型可以不受限制地援用其他對象,同時也可以被其他對象援用用其他對象,同時也可以被其他對象援用構(gòu)造出網(wǎng)狀拓撲構(gòu)造構(gòu)造出網(wǎng)狀拓撲構(gòu)造 GOM模型經(jīng)過多對象共享機制,支持網(wǎng)絡構(gòu)模型經(jīng)過多對象共享機制,支持網(wǎng)絡構(gòu)造運用造運用共享子對象例如共享子對象例如共享子對象的副作用修正可見共享子對象的副作用修正可見 對象的形狀變化會被其他援用對象可見對象的形狀變化會被其他援用對象可見 例:一個對例:一個對Material對象的修正:對象的修正:anotherC

13、= Copper; anotherCuboid.mat.SpecWeight = 0.90 會被會被myCuboid所指所指id1可見可見7.7 援用和重援用援用和重援用Referencing and Dereferencing 復制復制copy語義:將一個值真實地復制到一個語義:將一個值真實地復制到一個sort類型的變量或?qū)傩灾?。類型的變量或?qū)傩灾小?援用援用referencing語義:賦值語句處置的是一個對語義:賦值語句處置的是一個對象時,只將該對象的象時,只將該對象的OID賦值到相應的變量或?qū)傩灾?。賦值到相應的變量或?qū)傩灾小?援用語句與援用語句與C中的指針賦值類似,是一個間址操作。中的指

14、針賦值類似,是一個間址操作。 重援用重援用Dereferencing語義:援用語義沿著援用鏈語義:援用語義沿著援用鏈的傳送。的傳送。 重援用語義是經(jīng)過重援用語義是經(jīng)過“操作符的重載,構(gòu)造的援用鏈操作符的重載,構(gòu)造的援用鏈實現(xiàn)的實現(xiàn)的 整個對象構(gòu)造可以經(jīng)過援用語義構(gòu)成一個網(wǎng)狀構(gòu)造整個對象構(gòu)造可以經(jīng)過援用語義構(gòu)成一個網(wǎng)狀構(gòu)造 一個援用查找的實現(xiàn)是沿援用鏈,導航式地對逐個對一個援用查找的實現(xiàn)是沿援用鏈,導航式地對逐個對象實例的查詢。象實例的查詢。Var someMaterial:Material; w:float; muCuboid:Cuboid; (1)someMaterial.create;(2

15、)someM:=“Carbon;(3)someMaterial.specWeight:=0.75;(4)myCuboid.mat:=someMaterial;(5)w:=myCuboid.mat.specWeight;mat:id88value:39.99v1:id11name:CarbonspecWeight:0.75Materialid88id1CuboidmyCuboidsomeMaterial7.8 聚合類型聚合類型 collection GOM模型提供模型提供body的二種內(nèi)嵌的聚集類的二種內(nèi)嵌的聚集類型的類型構(gòu)造子:型的類型構(gòu)造子:集合構(gòu)造集合構(gòu)造表構(gòu)造表構(gòu)

16、造集合構(gòu)造的對象類型集合構(gòu)造的對象類型 集合構(gòu)造的對象類型是一個集合對象集合構(gòu)造的對象類型是一個集合對象表達如下:表達如下:Type set typeName ispublic body Element typeend 集合元素類型集合元素類型ElementType可以是可以是sort類型,也可以類型,也可以是對象類型是對象類型type SetTypeName isPublicbodyElementTypeend type SetTypeName;type TelephoneNumbers isint;type TelephoneNumbers isPublicbodyintoperation

17、simplementationend type TelephoneNumbers;聲明一個變量var guidosTelephoneNumbers: TelephoneNumbers;(1) guidosTelephoneNumbers.create;(2) guidosTelephoneNumbers.insert(6082080);(3) guidosTelephoneNumbers.insert(6082080);集合構(gòu)造的對象類型特點集合構(gòu)造的對象類型特點 需求定義一個元素需求定義一個元素Element的類型的類型 集合對象類型本身可以用于定義對象屬性的類型集合對象類型本身可以用于定義

18、對象屬性的類型 集合對象類型支持數(shù)學上的集合對象類型支持數(shù)學上的Set概念,即不允許有一概念,即不允許有一樣元素存在。樣元素存在。GOM要作獨一性檢查要作獨一性檢查 當當Element是是sort類型時,插入概念是復制語義,插入類型時,插入概念是復制語義,插入值;值;當當Element是對象類型時,插入概念是援用語義,是對象類型時,插入概念是援用語義,插入插入OID 集合對象允許共享,當有共享發(fā)生時,為共享子對象。集合對象允許共享,當有共享發(fā)生時,為共享子對象。 共享概念的引入,使集合對象的概念可以作為對象庫共享概念的引入,使集合對象的概念可以作為對象庫概念。概念。 共享的副作用共享的副作用

19、修正可見修正可見對象類型的擴展對象類型的擴展 GOM經(jīng)過經(jīng)過with extension子句隱式地產(chǎn)生并維護一個特定對子句隱式地產(chǎn)生并維護一個特定對象類型的集合對象類型,用以管理該類型實例化的對象集合。象類型的集合對象類型,用以管理該類型實例化的對象集合。 例例type Cuboid iswith extention isend type Cuboid 那么系統(tǒng)自動產(chǎn)生一個那么系統(tǒng)自動產(chǎn)生一個set Cuboid對象類型對象類型Cuboids。并。并將一切將一切Cuboid的實例化對象自動插入到的實例化對象自動插入到Cuboids中。中。 Cuboids類型只允許用戶運用類型只允許用戶運用ex

20、t (Cuboid)進展訪問。進展訪問。 不允許任何顯式地修正、刪除、插入等操作不允許任何顯式地修正、刪除、插入等操作 利用擴展概念建立對象實例庫利用擴展概念建立對象實例庫type CuboidSet isCuboid;var workPieceCuboids:CuboidSet;valuableCuboids:CuboidSet;workPieceCuboids.insert(myCuboid);valuableCuboids.insert();type CuboidSetwith extension isend type Cuboid;表構(gòu)造對象類型表構(gòu)造對象類型 表構(gòu)造對象類型的特點表構(gòu)

21、造對象類型的特點 列表中的元素是有序的列表中的元素是有序的 類標的數(shù)學概念是類標的數(shù)學概念是bag,即允許一樣的元素,即允許一樣的元素在表中不同位置多次出現(xiàn)在表中不同位置多次出現(xiàn) 列表中元素的類型可以是列表中元素的類型可以是sort type或或object type 表構(gòu)造對象類型的定義方式表構(gòu)造對象類型的定義方式type Name ispublic body CuboidSetid59workPiece Cuboidsid1,id2,id3id3name:IronspecWeight:0.89name:GoldspecWeight:1.32valuable Cuboidsid60Cuboi

22、dSetid77id99CuboidMaterialVertexid1mat: id77value:39.99v1:id11 v2:id12v3:id13 v4:id14v5:id15 v6:id16v7:id17 v8:id18id11x: 0.0y: 0.0z: 0.0id1mat: id99value:89.90v1:id31 v2:id32v3:id33 v4:id34v5:id35 v6:id36v7:id37 v8:id38id2mat: id77value:19.95v1:id21 v2:id22v3:id23 v4:id24v5:id25 v6:id26v7:id27 v8:i

23、d28id18x: 0.0y: 1.0z: 1.0id21x: 0.0y: 0.0z: 0.0id28x: 0.0y: 2.0z: 2.0id31x: 0.0y: 0.0z: 0.0id38x: 0.0y: 3.0z: 3.0mat: id77value: 250.00vertices: id899Cuboid2id299id899VertexListtype VertexList isPublicbodyoperationsimplementationend type VertexList;type Cuboid2 isPublicbody mat: Material; value: flo

24、at; vertices:VertexList;operationsimplementationend type Cuboid2;7.9 類型平安類型平安 非類型平安數(shù)據(jù)類型:數(shù)據(jù)庫的組件非類型平安數(shù)據(jù)類型:數(shù)據(jù)庫的組件屬性,變量,集合元素等,并不限屬性,變量,集合元素等,并不限制為一個特定的類型不需求類型闡制為一個特定的類型不需求類型闡明,即編譯時不對它們進展類型檢查,明,即編譯時不對它們進展類型檢查,益處是運用靈敏。益處是運用靈敏。 問題:大量的錯誤只能在運轉(zhuǎn)時被檢測問題:大量的錯誤只能在運轉(zhuǎn)時被檢測出來出來類型平安續(xù)類型平安續(xù)類型平安數(shù)據(jù)類型:對一切構(gòu)件均限制了數(shù)據(jù)類類型平安數(shù)據(jù)類型:對

25、一切構(gòu)件均限制了數(shù)據(jù)類型。型。 強類型言語強類型言語 GOM為強類型的為強類型的優(yōu)點優(yōu)點1.類型平安類型平安2.高效,在運轉(zhuǎn)時無需作類型檢查。高效,在運轉(zhuǎn)時無需作類型檢查。3.支持構(gòu)造化設計支持構(gòu)造化設計4.類型約束的組件為:屬性、變量、操作參類型約束的組件為:屬性、變量、操作參數(shù)、數(shù)、表和集合類型的元素。表和集合類型的元素。5.強類型言語編譯時檢查表達式中類型的兼強類型言語編譯時檢查表達式中類型的兼容容性。性。type City isPublicbody name: string; mayor: Person; inhabitants: PersonSet;operationsimpleme

26、ntationend type City;type Person isPublicbody name: string; age: int; spouse:Person; livesIn: City;operationsimplementationend type Person;type PersonSet isPublicbody Personoperationsimplementationend type PersonSet;Var cityOfLA: City;mickey,mini,dinald;Person;name: “Los Angelesmayor: id188inhabitan

27、ts: id115id571CitycityOfLAid193,id188,id372id115PersonSetname: “Mickey Mouseage: 60spouse: id372livesIn: id571Personid188name: “Mini Mouseage: 50spouse: id188livesIn: id571Personid372name: “Donald Duckage: 45spouse: NULLlivesIn: id571Personid193donaldmickeyvar totalAge,ageOfSomeBody:int;anyBody:Pers

28、on;name:string;(1) ageOfSomeBody:=cityOfLA.mayor.spouse.age;(2) foreach(anyBody in cityOfLA.inhabitants)totalAge:=totalAge+anyBody.age; foreach(anyBody in cityOfLA.inhabitants)totalAge:=totalAge+anyBody.age;ageOfSomeBody:=cityOfLA. mayor. spouse. age;intCityPersonPersonintintPersonCityPersonSetintin

29、tPerson7.10 耐久性耐久性Persistence 耐久性:當程序的執(zhí)行終止后,其創(chuàng)建的構(gòu)件和數(shù)據(jù)耐久性:當程序的執(zhí)行終止后,其創(chuàng)建的構(gòu)件和數(shù)據(jù)依然存在。依然存在。 需進展耐久化構(gòu)件需進展耐久化構(gòu)件 耐久化對象類型耐久化對象類型 耐久化對象實例耐久化對象實例 耐久化變量耐久化變量 處置耐久化數(shù)據(jù)采用的方式處置耐久化數(shù)據(jù)采用的方式 嵌入式嵌入式SQL言語言語 耐久化程序設計言語耐久化程序設計言語 嵌入式嵌入式SQL言語:耐久性數(shù)據(jù)的存取操作,必需由設言語:耐久性數(shù)據(jù)的存取操作,必需由設計者顯式地用計者顯式地用SQL提供的語句進展提供的語句進展DB讀寫。讀寫。耐久化程序設計言語耐久化程序設

30、計言語查詢言語與宿主言語完全無縫聯(lián)接查詢言語與宿主言語完全無縫聯(lián)接 優(yōu)點優(yōu)點 對象在對象在DB中的創(chuàng)建、存儲無需任何格式聯(lián)中的創(chuàng)建、存儲無需任何格式聯(lián)接。接。 用戶對耐久化數(shù)據(jù)的支配與普通數(shù)據(jù)一樣,用戶對耐久化數(shù)據(jù)的支配與普通數(shù)據(jù)一樣,無需無需進展顯式的讀進展顯式的讀/寫。寫。 缺陷缺陷 由于宿主言語過強,對由于宿主言語過強,對DB數(shù)據(jù)的一致性維數(shù)據(jù)的一致性維護更加護更加困難。困難。 由于言語的復雜性,數(shù)據(jù)查詢的優(yōu)化處置由于言語的復雜性,數(shù)據(jù)查詢的優(yōu)化處置變得更變得更困難。困難。 與與SQL的無縫聯(lián)接目前作的并不理想。的無縫聯(lián)接目前作的并不理想。GOM耐久性構(gòu)件耐久性構(gòu)件類型的耐久化類型的耐久

31、化 類型的耐久化:類型的耐久性由類型的耐久化:類型的耐久性由Persistence定義符定義符闡明。闡明。例:例:Persistence Type Vertex is其中,耐久性類型稱號不能被重定義其中,耐久性類型稱號不能被重定義 耐久性類型的依賴關(guān)系耐久性類型的依賴關(guān)系 在元組構(gòu)造類型中,耐久化類型的一切屬在元組構(gòu)造類型中,耐久化類型的一切屬性都性都必需是耐久的。必需是耐久的。 在聚合構(gòu)造類型中,其元素類型也必需耐在聚合構(gòu)造類型中,其元素類型也必需耐久。久。 在承繼的在承繼的is-a層次內(nèi)部,一個耐久類型的層次內(nèi)部,一個耐久類型的超類型超類型祖先必需是耐久的。祖先必需是耐久的。對象的耐久性對

32、象的耐久性一個對象實例的耐久化可以采用以下幾種途一個對象實例的耐久化可以采用以下幾種途徑:徑:按類型耐久:一個耐久化類型的實例可以自動確按類型耐久:一個耐久化類型的實例可以自動確以為耐久的。以為耐久的。缺陷:運用極不方便,在需求耐久和暫時共缺陷:運用極不方便,在需求耐久和暫時共存時,操作困難。有的系統(tǒng)采用耐久意向概存時,操作困難。有的系統(tǒng)采用耐久意向概念,即耐久類型實例化的對象能夠潛在變?yōu)槟?,即耐久類型實例化的對象能夠潛在變?yōu)槟途?。耐久。按?chuàng)建耐久按創(chuàng)建耐久將耐久操作與初始化操作綁定,即將耐久操作與初始化操作綁定,即將耐久對象與暫時對象采用不同的初始化子。將耐久對象與暫時對象采用不同的初始化子

33、。對象的耐久性續(xù)對象的耐久性續(xù)提供一個耐久化操作,即用顯式的耐久化操提供一個耐久化操作,即用顯式的耐久化操作將對象耐久化。即將耐久化聲明延遲到對作將對象耐久化。即將耐久化聲明延遲到對象創(chuàng)建之后。象創(chuàng)建之后。按援用聲明耐久:僅對一個或多個對象按援用聲明耐久:僅對一個或多個對象顯式的聲明為耐久對象根對象。其他對顯式的聲明為耐久對象根對象。其他對象的耐久化定義為沿著根對象的援用鏈進展象的耐久化定義為沿著根對象的援用鏈進展耐久化擴展。耐久化擴展。優(yōu)點:耐久化定義簡約。優(yōu)點:耐久化定義簡約。缺陷:系統(tǒng)確定耐久化對象的代價較大。缺陷:系統(tǒng)確定耐久化對象的代價較大。GOM的對象耐久化方法的對象耐久化方法 G

34、OM采用采用2,3兩種方法:兩種方法: GOM提供一個耐久化操作子提供一個耐久化操作子persistence 例如:例如:aVertex.persistence aVertex在耐久化操作之前依然是暫時對在耐久化操作之前依然是暫時對象象 GOM提供初始化階段的耐久化操作提供初始化階段的耐久化操作 GOM不支持第不支持第4種方法,帶來的危險行種方法,帶來的危險行為為 當用戶從一個耐久化對象中援用了一個當用戶從一個耐久化對象中援用了一個暫時對象時,會導致浮動援用暫時對象時,會導致浮動援用耐久對象的實現(xiàn)方法耐久對象的實現(xiàn)方法 地址依賴方法:地址依賴方法: 當聲明一個對象耐久化時,系統(tǒng)初始化當聲明一個

35、對象耐久化時,系統(tǒng)初始化一特定的外存區(qū)域,并提供一個耐久化一特定的外存區(qū)域,并提供一個耐久化地址指針地址指針 OID耐久方法:耐久方法: 對耐久化對象的標識進展耐久化對耐久化對象的標識進展耐久化耐久對象的存儲和訪問耐久對象的存儲和訪問 有三種訪問戰(zhàn)略:有三種訪問戰(zhàn)略: 名字法:在耐久化區(qū)域內(nèi)按名字查找名字法:在耐久化區(qū)域內(nèi)按名字查找不適宜有大量對象的情況不適宜有大量對象的情況 經(jīng)過經(jīng)過OID或耐久化指針查找或耐久化指針查找 系統(tǒng)對每一個耐久類型提供一個耐久性系統(tǒng)對每一個耐久類型提供一個耐久性容器容器其區(qū)間存放同類型的耐久對象其區(qū)間存放同類型的耐久對象 GOM支持支持2,3種方法種方法變量的耐久

36、化變量的耐久化 變量的耐久化聲明:變量的耐久化聲明: Persistence var myVertices:Vertexset; aVertex:Vertex; 運用要求:運用要求: 變量名必需堅持獨一性,無二義性變量名必需堅持獨一性,無二義性 變量類型必需已定義為耐久性變量類型必需已定義為耐久性 耐久性變量由系統(tǒng)管理:它的值在定義它的程耐久性變量由系統(tǒng)管理:它的值在定義它的程序終了后,依然有定義序終了后,依然有定義 問題:系統(tǒng)不能保證耐久性變量援用一個暫時問題:系統(tǒng)不能保證耐久性變量援用一個暫時對象,因此會產(chǎn)生懸空援用,即它的值在再次對象,因此會產(chǎn)生懸空援用,即它的值在再次賦值前是未定義的賦值前是未定義的7.11 渣滓回收渣滓回收Garbage Collection 對于不再被運用的對象,該當及時從對于不再被

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論