版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第三部分第三部分 面向?qū)ο竽P兔嫦驅(qū)ο竽P虶OM Generic Object Model 類型系統(tǒng)與對(duì)象系統(tǒng)類型系統(tǒng)與對(duì)象系統(tǒng) GOM的構(gòu)造定義的構(gòu)造定義 元組構(gòu)造元組構(gòu)造 聚集構(gòu)造聚集構(gòu)造 對(duì)象的標(biāo)識(shí)對(duì)象的標(biāo)識(shí) 子對(duì)象的共享子對(duì)象的共享 對(duì)象的耐久性對(duì)象的耐久性 Sort類型上的復(fù)合構(gòu)造類型上的復(fù)合構(gòu)造第七章第七章 對(duì)象類型的構(gòu)造對(duì)象類型的構(gòu)造7.1 類型系統(tǒng)與對(duì)象系統(tǒng)類型系統(tǒng)與對(duì)象系統(tǒng) 類型系統(tǒng)類型系統(tǒng)sort type的開展的開展 類型:類型: 早期言語只提供簡(jiǎn)單類型早期言語只提供簡(jiǎn)單類型 進(jìn)一步復(fù)雜類型進(jìn)一步復(fù)雜類型 簡(jiǎn)單類型、構(gòu)造類型、串、指針簡(jiǎn)單類型、構(gòu)造類型、串、指針. Ada
2、提出籠統(tǒng)數(shù)據(jù)類型提出籠統(tǒng)數(shù)據(jù)類型ADTabstract data type 用戶本人定義構(gòu)造、操作用戶本人定義構(gòu)造、操作 系統(tǒng)提供打包功能系統(tǒng)提供打包功能 以類型方式提供運(yùn)用以類型方式提供運(yùn)用幾種簡(jiǎn)單幾種簡(jiǎn)單sort類型類型類型的運(yùn)用、特點(diǎn)、局限類型的運(yùn)用、特點(diǎn)、局限 變量闡明:指明一個(gè)變量的類型變量闡明:指明一個(gè)變量的類型 變量賦值:類型的實(shí)例化操作變量賦值:類型的實(shí)例化操作 實(shí)例化結(jié)果:指定一個(gè)值實(shí)例化結(jié)果:指定一個(gè)值 在實(shí)例的整個(gè)生命周期,值是不變的,因此類型在實(shí)例的整個(gè)生命周期,值是不變的,因此類型的實(shí)例無需標(biāo)識(shí),值就是其本身的標(biāo)識(shí)的實(shí)例無需標(biāo)識(shí),值就是其本身的標(biāo)識(shí) 變量的重新賦值是重
3、新實(shí)例化過程,原實(shí)例已消變量的重新賦值是重新實(shí)例化過程,原實(shí)例已消亡。亡。 類型系統(tǒng)的問題:無法描畫實(shí)例的形狀變化,即類型系統(tǒng)的問題:無法描畫實(shí)例的形狀變化,即不同的值代表了某個(gè)實(shí)例在不同時(shí)辰的不同形狀不同的值代表了某個(gè)實(shí)例在不同時(shí)辰的不同形狀 數(shù)據(jù)庫的運(yùn)用是最突出的不協(xié)調(diào)數(shù)據(jù)庫的運(yùn)用是最突出的不協(xié)調(diào)面向?qū)ο箢愋兔嫦驅(qū)ο箢愋?對(duì)象系統(tǒng)強(qiáng)調(diào)的是對(duì)象形狀的變化對(duì)象系統(tǒng)強(qiáng)調(diào)的是對(duì)象形狀的變化 對(duì)象的生命周期種的某一瞬間是一個(gè)形對(duì)象的生命周期種的某一瞬間是一個(gè)形狀對(duì)象屬性的某個(gè)值集狀對(duì)象屬性的某個(gè)值集 但對(duì)象屬性值被修正時(shí),闡明該對(duì)象由但對(duì)象屬性值被修正時(shí),闡明該對(duì)象由一個(gè)形狀轉(zhuǎn)化為另一個(gè)形狀一個(gè)形狀
4、轉(zhuǎn)化為另一個(gè)形狀 為了能識(shí)別不同形狀下的對(duì)象,必需進(jìn)為了能識(shí)別不同形狀下的對(duì)象,必需進(jìn)展標(biāo)識(shí)。展標(biāo)識(shí)。獨(dú)一性約束獨(dú)一性約束 對(duì)象形狀的轉(zhuǎn)化時(shí)內(nèi)部變化,因此必需對(duì)象形狀的轉(zhuǎn)化時(shí)內(nèi)部變化,因此必需進(jìn)展封裝進(jìn)展封裝完好性約束完好性約束 對(duì)象對(duì)象O由由id#, Type, Rep)三元組表示三元組表示7.2 GOM對(duì)象類型框架定義對(duì)象類型框架定義 對(duì)象類型名獨(dú)一,超類型名可選。 Public子句提供外部闡明 Body子句描畫構(gòu)造主體 操作子句描畫接口闡明 操作名獨(dú)一性 參數(shù)闡明 操作實(shí)現(xiàn)子句描畫操作體7.3 元組構(gòu)造的對(duì)象類型元組構(gòu)造的對(duì)象類型 構(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可以是簡(jiǎn)單sort; 組合sort;對(duì)象類型;混合類型;集合類型;表類型;直接遞歸類型等內(nèi)嵌的屬性值讀寫操作內(nèi)嵌的屬性值讀寫操作 VCO操作操作Value receiving operation 值接納操作值接納操作 Declare attri:-type i; 讀取當(dāng)前第讀取當(dāng)前第i個(gè)屬性形狀個(gè)屬性形狀 VTO擦作擦作Value returning operation 值前往操作值前往操作 Declar
6、e attri:+1)例如二例如二 立方體對(duì)象模型的正文:立方體對(duì)象模型的正文: *定義定義“點(diǎn)的對(duì)象類型點(diǎn)的對(duì)象類型 *定義原資料的對(duì)象類型定義原資料的對(duì)象類型 *定義立方體的對(duì)象類型定義立方體的對(duì)象類型7.4 GOM類型的實(shí)例化類型的實(shí)例化 一個(gè)對(duì)象類型框架可產(chǎn)生一系列對(duì)象實(shí)例一個(gè)對(duì)象類型框架可產(chǎn)生一系列對(duì)象實(shí)例 內(nèi)嵌的創(chuàng)建對(duì)象操作內(nèi)嵌的創(chuàng)建對(duì)象操作“create GOM類型的實(shí)例化過程類型的實(shí)例化過程 第一步第一步* Var myCuboid :Cuboid;/闡明對(duì)象變闡明對(duì)象變量量 第二步第二步*執(zhí)行賦值語句執(zhí)行賦值語句: 1 myCuboid:=Cuboid$create; 或或2
7、 myCuboid.create;賦值語句的作用賦值語句的作用1產(chǎn)生了一個(gè)初始化的空殼實(shí)例;產(chǎn)生了一個(gè)初始化的空殼實(shí)例;2對(duì)該空殼實(shí)例賦予了一個(gè)對(duì)象標(biāo)志對(duì)該空殼實(shí)例賦予了一個(gè)對(duì)象標(biāo)志OID;3將將OID或?qū)嵗刂焚x給變量或?qū)嵗刂焚x給變量myCuboid;4將空殼屬性值初始化為:將空殼屬性值初始化為: Int:0;float:0.0;char:0;bool:false;復(fù)雜對(duì);復(fù)雜對(duì)象類型:象類型:NULL;5當(dāng)前該當(dāng)前該OID還僅是邏輯表示,不能被用戶訪問。還僅是邏輯表示,不能被用戶訪問。*產(chǎn)生了一個(gè)僅僅與產(chǎn)生了一個(gè)僅僅與OID相聯(lián)絡(luò)的一個(gè)空對(duì)象。相聯(lián)絡(luò)的一個(gè)空對(duì)象。 第三步:對(duì)空對(duì)象的每個(gè)
8、屬性進(jìn)展實(shí)踐值的初始化任第三步:對(duì)空對(duì)象的每個(gè)屬性進(jìn)展實(shí)踐值的初始化任務(wù)務(wù)例如例如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 對(duì)象標(biāo)識(shí)對(duì)象標(biāo)識(shí) 表示對(duì)象的三種方法:表示對(duì)象的三種方法: 內(nèi)容標(biāo)識(shí)內(nèi)容標(biāo)識(shí)關(guān)鍵字標(biāo)識(shí)符關(guān)鍵字標(biāo)識(shí)符 地址標(biāo)識(shí)地址
9、標(biāo)識(shí)物理對(duì)象標(biāo)識(shí)符物理對(duì)象標(biāo)識(shí)符 邏輯對(duì)象標(biāo)識(shí)符邏輯對(duì)象標(biāo)識(shí)符 內(nèi)容標(biāo)識(shí)的問題內(nèi)容依賴內(nèi)容標(biāo)識(shí)的問題內(nèi)容依賴 概念的混淆:將兩對(duì)象相等與兩對(duì)象內(nèi)容相等混為一概念的混淆:將兩對(duì)象相等與兩對(duì)象內(nèi)容相等混為一談。談。 一致性管理的困難。一致性管理的困難。 例例1:對(duì)大商場(chǎng)中,同一商品在不同柜組有不同售價(jià),:對(duì)大商場(chǎng)中,同一商品在不同柜組有不同售價(jià),商品的主商品的主key為商品號(hào)為商品號(hào)+柜組號(hào)。柜組號(hào)。 例例2:假設(shè)主:假設(shè)主key為人名為人名+地址,當(dāng)搬家而修正庫地址,當(dāng)搬家而修正庫時(shí),給完好性維護(hù)帶來困難。時(shí),給完好性維護(hù)帶來困難。地址標(biāo)識(shí)地址標(biāo)識(shí) 地址標(biāo)識(shí)地址標(biāo)識(shí) 用對(duì)象所分配的地址空間表示對(duì)
10、象。用對(duì)象所分配的地址空間表示對(duì)象。 地址標(biāo)識(shí)問題地址依賴地址標(biāo)識(shí)問題地址依賴 存儲(chǔ)空間的重用導(dǎo)致援用錯(cuò)誤且無法查存儲(chǔ)空間的重用導(dǎo)致援用錯(cuò)誤且無法查找。找。例如新對(duì)象占用已刪除對(duì)象空間。例如新對(duì)象占用已刪除對(duì)象空間。 分布式系統(tǒng)中對(duì)象經(jīng)常被挪動(dòng)位置。分布式系統(tǒng)中對(duì)象經(jīng)常被挪動(dòng)位置。 DB性能調(diào)整時(shí)經(jīng)常需求重構(gòu)硬盤存儲(chǔ)區(qū)。性能調(diào)整時(shí)經(jīng)常需求重構(gòu)硬盤存儲(chǔ)區(qū)。邏輯對(duì)象標(biāo)識(shí)符邏輯對(duì)象標(biāo)識(shí)符 OIDLogical Object Identity對(duì)于對(duì)于GOM,每個(gè)對(duì)象可以描畫為下述三元組,每個(gè)對(duì)象可以描畫為下述三元組O = id#,Type,RepId# :系統(tǒng)產(chǎn)生的對(duì)象:系統(tǒng)產(chǎn)生的對(duì)象O的邏輯標(biāo)識(shí)符的
11、邏輯標(biāo)識(shí)符Type:對(duì)象:對(duì)象O的類型的類型Rep:對(duì)象的內(nèi)部形狀,即屬性的當(dāng)前值。:對(duì)象的內(nèi)部形狀,即屬性的當(dāng)前值。OID的特點(diǎn)的特點(diǎn)對(duì)象實(shí)例初始化時(shí),系統(tǒng)產(chǎn)生一個(gè)獨(dú)一的對(duì)象實(shí)例初始化時(shí),系統(tǒng)產(chǎn)生一個(gè)獨(dú)一的OID一個(gè)對(duì)象的一個(gè)對(duì)象的OID在整個(gè)生命周期都永遠(yuǎn)堅(jiān)持在整個(gè)生命周期都永遠(yuǎn)堅(jiān)持當(dāng)對(duì)象刪除后,其當(dāng)對(duì)象刪除后,其OID值永不復(fù)用值永不復(fù)用7.6 共享的隊(duì)象共享的隊(duì)象Share Subject 規(guī)范的規(guī)范的RDBMS:由于:由于INF約束,不支持隊(duì)象約束,不支持隊(duì)象的援用的援用 擴(kuò)展的擴(kuò)展的INF2的的RDBMS,只能支持層次構(gòu)造,只能支持層次構(gòu)造,不支持網(wǎng)狀構(gòu)造不支持網(wǎng)狀構(gòu)造 從需求而言
12、,復(fù)雜從需求而言,復(fù)雜DB運(yùn)用要求支持網(wǎng)絡(luò)構(gòu)造運(yùn)用要求支持網(wǎng)絡(luò)構(gòu)造 O-O模型中,一個(gè)對(duì)象模型可以不受限制地援模型中,一個(gè)對(duì)象模型可以不受限制地援用其他對(duì)象,同時(shí)也可以被其他對(duì)象援用用其他對(duì)象,同時(shí)也可以被其他對(duì)象援用構(gòu)造出網(wǎng)狀拓?fù)錁?gòu)造構(gòu)造出網(wǎng)狀拓?fù)錁?gòu)造 GOM模型經(jīng)過多對(duì)象共享機(jī)制,支持網(wǎng)絡(luò)構(gòu)模型經(jīng)過多對(duì)象共享機(jī)制,支持網(wǎng)絡(luò)構(gòu)造運(yùn)用造運(yùn)用共享子對(duì)象例如共享子對(duì)象例如共享子對(duì)象的副作用修正可見共享子對(duì)象的副作用修正可見 對(duì)象的形狀變化會(huì)被其他援用對(duì)象可見對(duì)象的形狀變化會(huì)被其他援用對(duì)象可見 例:一個(gè)對(duì)例:一個(gè)對(duì)Material對(duì)象的修正:對(duì)象的修正:anotherC
13、= Copper; anotherCuboid.mat.SpecWeight = 0.90 會(huì)被會(huì)被myCuboid所指所指id1可見可見7.7 援用和重援用援用和重援用Referencing and Dereferencing 復(fù)制復(fù)制copy語義:將一個(gè)值真實(shí)地復(fù)制到一個(gè)語義:將一個(gè)值真實(shí)地復(fù)制到一個(gè)sort類型的變量或?qū)傩灾?。類型的變量或?qū)傩灾小?援用援用referencing語義:賦值語句處置的是一個(gè)對(duì)語義:賦值語句處置的是一個(gè)對(duì)象時(shí),只將該對(duì)象的象時(shí),只將該對(duì)象的OID賦值到相應(yīng)的變量或?qū)傩灾?。賦值到相應(yīng)的變量或?qū)傩灾小?援用語句與援用語句與C中的指針賦值類似,是一個(gè)間址操作。中的指
14、針賦值類似,是一個(gè)間址操作。 重援用重援用Dereferencing語義:援用語義沿著援用鏈語義:援用語義沿著援用鏈的傳送。的傳送。 重援用語義是經(jīng)過重援用語義是經(jīng)過“操作符的重載,構(gòu)造的援用鏈操作符的重載,構(gòu)造的援用鏈實(shí)現(xiàn)的實(shí)現(xiàn)的 整個(gè)對(duì)象構(gòu)造可以經(jīng)過援用語義構(gòu)成一個(gè)網(wǎng)狀構(gòu)造整個(gè)對(duì)象構(gòu)造可以經(jīng)過援用語義構(gòu)成一個(gè)網(wǎng)狀構(gòu)造 一個(gè)援用查找的實(shí)現(xiàn)是沿援用鏈,導(dǎo)航式地對(duì)逐個(gè)對(duì)一個(gè)援用查找的實(shí)現(xiàn)是沿援用鏈,導(dǎo)航式地對(duì)逐個(gè)對(duì)象實(shí)例的查詢。象實(shí)例的查詢。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)造的對(duì)象類型集合構(gòu)造的對(duì)象類型 集合構(gòu)造的對(duì)象類型是一個(gè)集合對(duì)象集合構(gòu)造的對(duì)象類型是一個(gè)集合對(duì)象表達(dá)如下:表達(dá)如下:Type set typeName ispublic body Element typeend 集合元素類型集合元素類型ElementType可以是可以是sort類型,也可以類型,也可以是對(duì)象類型是對(duì)象類型type SetTypeName isPublicbodyElementTypeend type SetTypeName;type TelephoneNumbers isint;type TelephoneNumbers isPublicbodyintoperation
17、simplementationend type TelephoneNumbers;聲明一個(gè)變量var guidosTelephoneNumbers: TelephoneNumbers;(1) guidosTelephoneNumbers.create;(2) guidosTelephoneNumbers.insert(6082080);(3) guidosTelephoneNumbers.insert(6082080);集合構(gòu)造的對(duì)象類型特點(diǎn)集合構(gòu)造的對(duì)象類型特點(diǎn) 需求定義一個(gè)元素需求定義一個(gè)元素Element的類型的類型 集合對(duì)象類型本身可以用于定義對(duì)象屬性的類型集合對(duì)象類型本身可以用于定義
18、對(duì)象屬性的類型 集合對(duì)象類型支持?jǐn)?shù)學(xué)上的集合對(duì)象類型支持?jǐn)?shù)學(xué)上的Set概念,即不允許有一概念,即不允許有一樣元素存在。樣元素存在。GOM要作獨(dú)一性檢查要作獨(dú)一性檢查 當(dāng)當(dāng)Element是是sort類型時(shí),插入概念是復(fù)制語義,插入類型時(shí),插入概念是復(fù)制語義,插入值;值;當(dāng)當(dāng)Element是對(duì)象類型時(shí),插入概念是援用語義,是對(duì)象類型時(shí),插入概念是援用語義,插入插入OID 集合對(duì)象允許共享,當(dāng)有共享發(fā)生時(shí),為共享子對(duì)象。集合對(duì)象允許共享,當(dāng)有共享發(fā)生時(shí),為共享子對(duì)象。 共享概念的引入,使集合對(duì)象的概念可以作為對(duì)象庫共享概念的引入,使集合對(duì)象的概念可以作為對(duì)象庫概念。概念。 共享的副作用共享的副作用
19、修正可見修正可見對(duì)象類型的擴(kuò)展對(duì)象類型的擴(kuò)展 GOM經(jīng)過經(jīng)過with extension子句隱式地產(chǎn)生并維護(hù)一個(gè)特定對(duì)子句隱式地產(chǎn)生并維護(hù)一個(gè)特定對(duì)象類型的集合對(duì)象類型,用以管理該類型實(shí)例化的對(duì)象集合。象類型的集合對(duì)象類型,用以管理該類型實(shí)例化的對(duì)象集合。 例例type Cuboid iswith extention isend type Cuboid 那么系統(tǒng)自動(dòng)產(chǎn)生一個(gè)那么系統(tǒng)自動(dòng)產(chǎn)生一個(gè)set Cuboid對(duì)象類型對(duì)象類型Cuboids。并。并將一切將一切Cuboid的實(shí)例化對(duì)象自動(dòng)插入到的實(shí)例化對(duì)象自動(dòng)插入到Cuboids中。中。 Cuboids類型只允許用戶運(yùn)用類型只允許用戶運(yùn)用ex
20、t (Cuboid)進(jìn)展訪問。進(jìn)展訪問。 不允許任何顯式地修正、刪除、插入等操作不允許任何顯式地修正、刪除、插入等操作 利用擴(kuò)展概念建立對(duì)象實(shí)例庫利用擴(kuò)展概念建立對(duì)象實(shí)例庫type CuboidSet isCuboid;var workPieceCuboids:CuboidSet;valuableCuboids:CuboidSet;workPieceCuboids.insert(myCuboid);valuableCuboids.insert();type CuboidSetwith extension isend type Cuboid;表構(gòu)造對(duì)象類型表構(gòu)造對(duì)象類型 表構(gòu)造對(duì)象類型的特點(diǎn)表構(gòu)
21、造對(duì)象類型的特點(diǎn) 列表中的元素是有序的列表中的元素是有序的 類標(biāo)的數(shù)學(xué)概念是類標(biāo)的數(shù)學(xué)概念是bag,即允許一樣的元素,即允許一樣的元素在表中不同位置多次出現(xiàn)在表中不同位置多次出現(xiàn) 列表中元素的類型可以是列表中元素的類型可以是sort type或或object type 表構(gòu)造對(duì)象類型的定義方式表構(gòu)造對(duì)象類型的定義方式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ù)庫的組件屬性,變量,集合元素等,并不限屬性,變量,集合元素等,并不限制為一個(gè)特定的類型不需求類型闡制為一個(gè)特定的類型不需求類型闡明,即編譯時(shí)不對(duì)它們進(jìn)展類型檢查,明,即編譯時(shí)不對(duì)它們進(jìn)展類型檢查,益處是運(yùn)用靈敏。益處是運(yùn)用靈敏。 問題:大量的錯(cuò)誤只能在運(yùn)轉(zhuǎn)時(shí)被檢測(cè)問題:大量的錯(cuò)誤只能在運(yùn)轉(zhuǎn)時(shí)被檢測(cè)出來出來類型平安續(xù)類型平安續(xù)類型平安數(shù)據(jù)類型:對(duì)一切構(gòu)件均限制了數(shù)據(jù)類類型平安數(shù)據(jù)類型:對(duì)
25、一切構(gòu)件均限制了數(shù)據(jù)類型。型。 強(qiáng)類型言語強(qiáng)類型言語 GOM為強(qiáng)類型的為強(qiáng)類型的優(yōu)點(diǎn)優(yōu)點(diǎn)1.類型平安類型平安2.高效,在運(yùn)轉(zhuǎn)時(shí)無需作類型檢查。高效,在運(yùn)轉(zhuǎn)時(shí)無需作類型檢查。3.支持構(gòu)造化設(shè)計(jì)支持構(gòu)造化設(shè)計(jì)4.類型約束的組件為:屬性、變量、操作參類型約束的組件為:屬性、變量、操作參數(shù)、數(shù)、表和集合類型的元素。表和集合類型的元素。5.強(qiáng)類型言語編譯時(shí)檢查表達(dá)式中類型的兼強(qiáng)類型言語編譯時(shí)檢查表達(dá)式中類型的兼容容性。性。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 耐久性:當(dāng)程序的執(zhí)行終止后,其創(chuàng)建的構(gòu)件和數(shù)據(jù)耐久性:當(dāng)程序的執(zhí)行終止后,其創(chuàng)建的構(gòu)件和數(shù)據(jù)依然存在。依然存在。 需進(jìn)展耐久化構(gòu)件需進(jìn)展耐久化構(gòu)件 耐久化對(duì)象類型耐久化對(duì)象類型 耐久化對(duì)象實(shí)例耐久化對(duì)象實(shí)例 耐久化變量耐久化變量 處置耐久化數(shù)據(jù)采用的方式處置耐久化數(shù)據(jù)采用的方式 嵌入式嵌入式SQL言語言語 耐久化程序設(shè)計(jì)言語耐久化程序設(shè)計(jì)言語 嵌入式嵌入式SQL言語:耐久性數(shù)據(jù)的存取操作,必需由設(shè)言語:耐久性數(shù)據(jù)的存取操作,必需由設(shè)計(jì)者顯式地用計(jì)者顯式地用SQL提供的語句進(jìn)展提供的語句進(jìn)展DB讀寫。讀寫。耐久化程序設(shè)計(jì)言語耐久化程序設(shè)
30、計(jì)言語查詢言語與宿主言語完全無縫聯(lián)接查詢言語與宿主言語完全無縫聯(lián)接 優(yōu)點(diǎn)優(yōu)點(diǎn) 對(duì)象在對(duì)象在DB中的創(chuàng)建、存儲(chǔ)無需任何格式聯(lián)中的創(chuàng)建、存儲(chǔ)無需任何格式聯(lián)接。接。 用戶對(duì)耐久化數(shù)據(jù)的支配與普通數(shù)據(jù)一樣,用戶對(duì)耐久化數(shù)據(jù)的支配與普通數(shù)據(jù)一樣,無需無需進(jìn)展顯式的讀進(jìn)展顯式的讀/寫。寫。 缺陷缺陷 由于宿主言語過強(qiáng),對(duì)由于宿主言語過強(qiáng),對(duì)DB數(shù)據(jù)的一致性維數(shù)據(jù)的一致性維護(hù)更加護(hù)更加困難。困難。 由于言語的復(fù)雜性,數(shù)據(jù)查詢的優(yōu)化處置由于言語的復(fù)雜性,數(shù)據(jù)查詢的優(yōu)化處置變得更變得更困難。困難。 與與SQL的無縫聯(lián)接目前作的并不理想。的無縫聯(lián)接目前作的并不理想。GOM耐久性構(gòu)件耐久性構(gòu)件類型的耐久化類型的耐久
31、化 類型的耐久化:類型的耐久性由類型的耐久化:類型的耐久性由Persistence定義符定義符闡明。闡明。例:例:Persistence Type Vertex is其中,耐久性類型稱號(hào)不能被重定義其中,耐久性類型稱號(hào)不能被重定義 耐久性類型的依賴關(guān)系耐久性類型的依賴關(guān)系 在元組構(gòu)造類型中,耐久化類型的一切屬在元組構(gòu)造類型中,耐久化類型的一切屬性都性都必需是耐久的。必需是耐久的。 在聚合構(gòu)造類型中,其元素類型也必需耐在聚合構(gòu)造類型中,其元素類型也必需耐久。久。 在承繼的在承繼的is-a層次內(nèi)部,一個(gè)耐久類型的層次內(nèi)部,一個(gè)耐久類型的超類型超類型祖先必需是耐久的。祖先必需是耐久的。對(duì)象的耐久性對(duì)
32、象的耐久性一個(gè)對(duì)象實(shí)例的耐久化可以采用以下幾種途一個(gè)對(duì)象實(shí)例的耐久化可以采用以下幾種途徑:徑:按類型耐久:一個(gè)耐久化類型的實(shí)例可以自動(dòng)確按類型耐久:一個(gè)耐久化類型的實(shí)例可以自動(dòng)確以為耐久的。以為耐久的。缺陷:運(yùn)用極不方便,在需求耐久和暫時(shí)共缺陷:運(yùn)用極不方便,在需求耐久和暫時(shí)共存時(shí),操作困難。有的系統(tǒng)采用耐久意向概存時(shí),操作困難。有的系統(tǒng)采用耐久意向概念,即耐久類型實(shí)例化的對(duì)象能夠潛在變?yōu)槟睿茨途妙愋蛯?shí)例化的對(duì)象能夠潛在變?yōu)槟途?。耐久。按?chuàng)建耐久按創(chuàng)建耐久將耐久操作與初始化操作綁定,即將耐久操作與初始化操作綁定,即將耐久對(duì)象與暫時(shí)對(duì)象采用不同的初始化子。將耐久對(duì)象與暫時(shí)對(duì)象采用不同的初始化子
33、。對(duì)象的耐久性續(xù)對(duì)象的耐久性續(xù)提供一個(gè)耐久化操作,即用顯式的耐久化操提供一個(gè)耐久化操作,即用顯式的耐久化操作將對(duì)象耐久化。即將耐久化聲明延遲到對(duì)作將對(duì)象耐久化。即將耐久化聲明延遲到對(duì)象創(chuàng)建之后。象創(chuàng)建之后。按援用聲明耐久:僅對(duì)一個(gè)或多個(gè)對(duì)象按援用聲明耐久:僅對(duì)一個(gè)或多個(gè)對(duì)象顯式的聲明為耐久對(duì)象根對(duì)象。其他對(duì)顯式的聲明為耐久對(duì)象根對(duì)象。其他對(duì)象的耐久化定義為沿著根對(duì)象的援用鏈進(jìn)展象的耐久化定義為沿著根對(duì)象的援用鏈進(jìn)展耐久化擴(kuò)展。耐久化擴(kuò)展。優(yōu)點(diǎn):耐久化定義簡(jiǎn)約。優(yōu)點(diǎn):耐久化定義簡(jiǎn)約。缺陷:系統(tǒng)確定耐久化對(duì)象的代價(jià)較大。缺陷:系統(tǒng)確定耐久化對(duì)象的代價(jià)較大。GOM的對(duì)象耐久化方法的對(duì)象耐久化方法 G
34、OM采用采用2,3兩種方法:兩種方法: GOM提供一個(gè)耐久化操作子提供一個(gè)耐久化操作子persistence 例如:例如:aVertex.persistence aVertex在耐久化操作之前依然是暫時(shí)對(duì)在耐久化操作之前依然是暫時(shí)對(duì)象象 GOM提供初始化階段的耐久化操作提供初始化階段的耐久化操作 GOM不支持第不支持第4種方法,帶來的危險(xiǎn)行種方法,帶來的危險(xiǎn)行為為 當(dāng)用戶從一個(gè)耐久化對(duì)象中援用了一個(gè)當(dāng)用戶從一個(gè)耐久化對(duì)象中援用了一個(gè)暫時(shí)對(duì)象時(shí),會(huì)導(dǎo)致浮動(dòng)援用暫時(shí)對(duì)象時(shí),會(huì)導(dǎo)致浮動(dòng)援用耐久對(duì)象的實(shí)現(xiàn)方法耐久對(duì)象的實(shí)現(xiàn)方法 地址依賴方法:地址依賴方法: 當(dāng)聲明一個(gè)對(duì)象耐久化時(shí),系統(tǒng)初始化當(dāng)聲明一個(gè)
35、對(duì)象耐久化時(shí),系統(tǒng)初始化一特定的外存區(qū)域,并提供一個(gè)耐久化一特定的外存區(qū)域,并提供一個(gè)耐久化地址指針地址指針 OID耐久方法:耐久方法: 對(duì)耐久化對(duì)象的標(biāo)識(shí)進(jìn)展耐久化對(duì)耐久化對(duì)象的標(biāo)識(shí)進(jìn)展耐久化耐久對(duì)象的存儲(chǔ)和訪問耐久對(duì)象的存儲(chǔ)和訪問 有三種訪問戰(zhàn)略:有三種訪問戰(zhàn)略: 名字法:在耐久化區(qū)域內(nèi)按名字查找名字法:在耐久化區(qū)域內(nèi)按名字查找不適宜有大量對(duì)象的情況不適宜有大量對(duì)象的情況 經(jīng)過經(jīng)過OID或耐久化指針查找或耐久化指針查找 系統(tǒng)對(duì)每一個(gè)耐久類型提供一個(gè)耐久性系統(tǒng)對(duì)每一個(gè)耐久類型提供一個(gè)耐久性容器容器其區(qū)間存放同類型的耐久對(duì)象其區(qū)間存放同類型的耐久對(duì)象 GOM支持支持2,3種方法種方法變量的耐久
36、化變量的耐久化 變量的耐久化聲明:變量的耐久化聲明: Persistence var myVertices:Vertexset; aVertex:Vertex; 運(yùn)用要求:運(yùn)用要求: 變量名必需堅(jiān)持獨(dú)一性,無二義性變量名必需堅(jiān)持獨(dú)一性,無二義性 變量類型必需已定義為耐久性變量類型必需已定義為耐久性 耐久性變量由系統(tǒng)管理:它的值在定義它的程耐久性變量由系統(tǒng)管理:它的值在定義它的程序終了后,依然有定義序終了后,依然有定義 問題:系統(tǒng)不能保證耐久性變量援用一個(gè)暫時(shí)問題:系統(tǒng)不能保證耐久性變量援用一個(gè)暫時(shí)對(duì)象,因此會(huì)產(chǎn)生懸空援用,即它的值在再次對(duì)象,因此會(huì)產(chǎn)生懸空援用,即它的值在再次賦值前是未定義的賦值前是未定義的7.11 渣滓回收渣滓回收Garbage Collection 對(duì)于不再被運(yùn)用的對(duì)象,該當(dāng)及時(shí)從對(duì)于不再被
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度能源項(xiàng)目合同財(cái)產(chǎn)保全擔(dān)保書范本3篇
- 2025年度個(gè)人裝修貸款協(xié)議書3篇
- 二零二五年度60歲以上人員社區(qū)教育輔導(dǎo)勞動(dòng)合同模板3篇
- 2024-2025學(xué)年新教材高中政治第3單元就業(yè)與創(chuàng)業(yè)單元綜合提升教案新人教版選擇性必修2
- 2025版智能交通管理系統(tǒng)建設(shè)運(yùn)營(yíng)履約擔(dān)保合同4篇
- 2025年度噴灌系統(tǒng)節(jié)能改造技術(shù)合同4篇
- 2025年度在線教育平臺(tái)兼職外教遠(yuǎn)程教學(xué)合同4篇
- 2025年度宿舍管理員職業(yè)發(fā)展規(guī)劃聘用合同
- 二零二五年度駕校教練員職業(yè)發(fā)展承包合同3篇
- 2025年度馬賽克材料研發(fā)與應(yīng)用采購合同4篇
- C及C++程序設(shè)計(jì)課件
- 帶狀皰疹護(hù)理查房
- 公路路基路面現(xiàn)場(chǎng)測(cè)試隨機(jī)選點(diǎn)記錄
- 平衡計(jì)分卡-化戰(zhàn)略為行動(dòng)
- 國(guó)家自然科學(xué)基金(NSFC)申請(qǐng)書樣本
- 幼兒教師干預(yù)幼兒同伴沖突的行為研究 論文
- 湖南省省級(jí)溫室氣體排放清單土地利用變化和林業(yè)部分
- 材料設(shè)備驗(yàn)收管理流程圖
- 培訓(xùn)機(jī)構(gòu)消防安全承諾書范文(通用5篇)
- (完整版)建筑業(yè)10項(xiàng)新技術(shù)(2017年最新版)
- 第8期監(jiān)理月報(bào)(江蘇版)
評(píng)論
0/150
提交評(píng)論