九章聯(lián)系的實現(xiàn)ppt課件_第1頁
九章聯(lián)系的實現(xiàn)ppt課件_第2頁
九章聯(lián)系的實現(xiàn)ppt課件_第3頁
九章聯(lián)系的實現(xiàn)ppt課件_第4頁
九章聯(lián)系的實現(xiàn)ppt課件_第5頁
已閱讀5頁,還剩43頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第九章 聯(lián)絡(luò)的實現(xiàn) 對象類型間經(jīng)過屬性的援用建立了對象實例間的聯(lián)絡(luò) 本章重點研討對象間聯(lián)絡(luò)的語義及其實現(xiàn)方法 對象間的聯(lián)絡(luò)可以是n元聯(lián)絡(luò)(n2)n個對象間經(jīng)過一個聯(lián)絡(luò)進展聯(lián)接 其中最簡單,常用的是二元聯(lián)絡(luò)(n=2) 二元聯(lián)絡(luò)中,二個對象間的聯(lián)絡(luò)語義有1:1,1:N,N:1,N:M9.1 沒有屬性的二元聯(lián)絡(luò)一個二元聯(lián)絡(luò)本身沒有任何屬性,它只表達了二個對象類型間的聯(lián)絡(luò)聯(lián)絡(luò)的實現(xiàn):經(jīng)過設(shè)置進入點entry point來完成進入點設(shè)在Tleft處:Tleft類型添加一個援用對象Tright的屬性,Tright類型無需添加屬性進入點設(shè)在Tright處添加一個對象類型Rbin,它僅有二個元組屬性,分別是T

2、left類型和Tright類型,這種方法可以加載Rbin本身獨特的屬性TleftRbinTright1:1的二元聯(lián)絡(luò)的實現(xiàn)一無冗余的表達方式一個聯(lián)絡(luò)僅在一個對象屬性中表達采用 (或者)方法該當從查詢需求入手,選擇查詢頻度高的一方作為進入點問題: 1)反向查詢速度極慢:對一個特定的Tright實例,查其相應(yīng)的Tleft實例時需求查過一切的Tleft實例集合2)即使正向查詢,假設(shè)存在聯(lián)絡(luò)的偶對集合很小,那么依然費時 采用方法定義一個Rbin類型,Tr并由系統(tǒng)維護Tr集合,適用于Tr相對Tleft(Tright)較小時問題: 1)需求二次查找才干定位 2)當Tr集合依然龐大是,尋覓一組特定的偶對效率

3、依然很低需求建立索引TleftRTright11type Tleft is body R:Tright; end type Tleft;type Tright body R-1 :Tleft; end type Tright;type TR is with extension is body left:Tleft; right:Tright;end type TR;1:1的二元聯(lián)絡(luò)的實現(xiàn)(續(xù))二冗余的表達方式1二個進入點在Tleft中建立R屬性類型為Tright在Tright中建立R-1屬性類型為Tleft優(yōu)點:提高反向查詢效率問題:當兩個對象實例間的聯(lián)絡(luò)發(fā)生變卦時,容易產(chǎn)生修正異常,生成對象

4、庫形狀的一致性遭到破壞 處理方法:重新定義R屬性的值接受操作refine R:Tright code setR;define setR(oright) isbegin oright.R-1 := self; self.R := oright;end define setR; 由此,確保了R屬性與.R-1屬性的同步修正 必需利用封裝技術(shù)來控制不會單獨修正.R-1 (.R-1只讀)總結(jié)利用封裝技術(shù)重新定義關(guān)聯(lián)屬性的形狀的修正特別留意不能在同一時間,以同樣的方式修正類型Tright的.R-1的值接受操作,否那么導致遞歸操作的無限循環(huán)即:重寫Tleft,R的值接受操作隱藏Tright,.R-1 的值接

5、受操作,使其為只讀類型三冗余表達方式2采用顯式的冗余方式用TR作為中間聯(lián)絡(luò)方法將二者顯式相連查詢?yōu)槎尾樵?,但管理方便對R, R-1 的修正自然要遵照異常處置方式重定義VCO和做相應(yīng)的隱藏type Tleft is body R:TR; end type Tleft;type TR is with extension is body left:Tleft; right:Tright;end type TR;type Tright body R-1 :TR; end type Tright;1:N 的二元 聯(lián)絡(luò)的實現(xiàn)type Tleft is type Tright is type TR bod

6、y body with extension is body R: Tright ; R-1: Tleft; left: Tleft ; right: Tright; end type Tleft; end type Tright ; end type TR ; 方式方式(1)方式方式(2)方式方式(3)TleftTrightR1N 其中唯有方式(2)能確保一致性約束,R-是單值的。 方式(1)(3)均不能確保兩對象間1:N的約束。 對(1),必需重新定義R屬性的值接受操作 對(3),必需對TR的對象實例庫進展一致性維護,即TR的insert操作進展一致性維護N:M的二元聯(lián)絡(luò)的實現(xiàn)type Tl

7、eft is type Tright is type TR body body with extension is body R: Tright ; R-1: Tleft ; left: Tleft ; right: Tright; end type Tleft; end type Tright; end type TR ; 方式方式(1)方式方式(2)方式方式(3)采用原那么采用原那么:以最大查詢頻率為根據(jù)選擇入口點以最大查詢頻率為根據(jù)選擇入口點可以采用組合冗余方法可以采用組合冗余方法,但需求進展形狀一致性但需求進展形狀一致性維護維護TleftTrightRNM具有K個屬性的二元聯(lián)絡(luò)的實現(xiàn)

8、1:1的聯(lián)絡(luò):依然可以采用方式(1)或(2),K個屬性寄放在Tleft或Tright 1:N的聯(lián)絡(luò)只能放在單值屬性的對象類型方 N:M的聯(lián)絡(luò)存放在那一方均不適宜,只能采用方式(3),定義此屬性的類型TR, TR具有K+2個元組屬性Tlefta1TrightRakType TRwith extension isBodyleft: Tleft ; right: Tright;a1:T1R;ak:TkR; operationsdeclare TR: Tleft , Tright,T1R, , TkR - TR code initTR;implementationdefine initTR(Oleft

9、 ,Oright,O1,Ok) isbegin self.left := Oleft; self.right := Oright; self.a1 := O1; ; self.ak := Ok ;end define initTRend type TRN元聯(lián)絡(luò)的實現(xiàn) 只能采用方式(3)建立TR類型處置 對初始化進展重定義,以保證約束的一致性。 為了檢索高效率,需求思索受控的冗余建模。T1T2a1akTnRtype TRwith extension isBodyentitiy1: T1 ; entitiyn: Tn;a1:T1R;ak:TkR; operationsdeclare TR: T1

10、, , Tn,T1R, , TkR - TRimplementationend type TR例如分析(一) 1-1聯(lián)絡(luò)實例:工程師與他所占辦公室的聯(lián)絡(luò)處置約束條件:一個工程師一間辦公室 type Engineer is type Office is bodybody resideIn: Office; isOccupied: Engineer; end type Engineer ; end type Office; 先有工程師,再分 經(jīng)常查詢某辦公室的工程師是誰 配房間EngineersOfficesresidesIn11用方式(1)和(2)組合建模下冗余的一致性維護 聯(lián)絡(luò)更新時普通的方式

11、 (1)If (thePenthouse.isOccupiedby != NULL)thePenthouse.isOccupiedby.residesIn :=NULL; (2)If (leonardo.residesIn != NULL ) leonardo.residesIn. isOccupiedby :=NULL; (3) leonardo.residesIn := thePenthouse; (4) thePenthouseis.Occupiedby := leonardo; 設(shè)計操作moveToOffice來維護一致性形狀 define moveToOffice(newReside

12、nce ) isbegin if (newResidence.isOccupiedBy != NULL)newResidence.isOccupiedBy.residesIn := NULL; if (self.residesIn != NULL )self.residesIn.isOccupiedBy := NULL; self.residesIn := newResidence; newResidence. isOccupiedBy := self;end define moveToOffice;例如分析(二) 工程師與部門間的1:N的聯(lián)絡(luò) type Engineer is type Di

13、vision is body body worksfor: Division; employs: EngineerSet; end type Engineer ; end type Division; type EngineerSet is body Engineer end type EngineerSet; EngineersDivisionsworksForN1控制類型冗余模型的兩個操作 hire define hire(newEng) isBeginself.employs.insert(newEng);newEng.worksFor := self; end define hire;

14、 Fire define fire(badEng) isBeginself.employs.remove(badEng);badEng.worksFor := NULL; end define hire; 聘用和解雇兩個操作可以堅持DB的完好性約束。遞歸的1:N的關(guān)系 產(chǎn)品與產(chǎn)品間具有遞歸的組合聯(lián)絡(luò) E-R圖的展開可以有兩種描畫方式productscompositionN1SubSuper A:經(jīng)過Super屬性表達了is.part-of的語義關(guān)系: 即:一個產(chǎn)品屬于上層產(chǎn)品的一個部件type Product is body super: Product ; end type Product

15、; 適用范圍:查找某種產(chǎn)品被組裝在什么部件中。沿part-of途徑進展導航或訪問Super:Super:Super:Super:Super:Super:Super:Super: B:經(jīng)過Sub屬性表達了partlist的語義關(guān)系: 即:一個部件由幾個子部件所組成type Product is body sub: ProductSet ; end type Product ;type ProductSet is body Product end type ProductSet ; 適用范圍:查找組成某部件的一切子部件Sub:Sub:Sub:Sub:Sub:Sub:Sub:Sub:運用例如 操作p

16、artlist:輸出組成某個產(chǎn)品的一切部件 采用構(gòu)造I define partList isvar resultSet: ProductSet;beginresultSet.create;!create an empty setresultSet.insert( self );foreach ( part in ext( Product ) if ( part.super = self )resultSet.setUnion(part.partList);!recursive call of partListreturn resultSet end define partList 采用構(gòu)造II

17、 define partList is var resultSet: ProductSet; begin resultSet.create; resultSet.insert( self ); foreach (part in self.sub) resultSet.setUnion(part.partList);!recursive call of partList return resultSet; end define partList; 該程序是高效的。 操作is part of: 采用構(gòu)造I define isPartOf(theSuperPart) is !is self a su

18、bpart of theSuperPart?var part: ProductBeginpart := self;while ( part != NULL )If ( part = theSuperPart )return true;else part := part.super;return false; end define isPartOf; 高效,只需沿self向上查找到根一條途徑 采用構(gòu)造II define isPartOf(theSuperPart) is var isUsed: bool := false; Beginforeach ( part in theSuperPart.

19、partList)If ( part = self ) isUsed := true;!we could already exit the loop herereturn isUsed; end define isPartOf; 低效,需到theSuperPart節(jié)點的一切組件中尋覓self第III種冗余組合方式 type product is body super:Product; sub:ProductSet; end type product 該方式的運用中,重要的是維護該方式的運用中,重要的是維護DB的一的一致性致性N:M關(guān)系舉例EngineersProductsdesigns 方式一

20、,采用組合的冗余表達方式 type Engineer is type Product is body body designs: ProductSet; designedBy: EngineerSet; end type Engineer ; end type Product; type EngineerSet is type ProductSet is body Engineer body Product end type EngineerSet; end type ProductSet;NM 方式二,采用單獨定義的TR類型表示聯(lián)絡(luò) type Designswith extension is

21、 bodytheParticipatingEngineer:Engineer;theProduct:Product end type Designs互逆聯(lián)絡(luò)的實現(xiàn) 問題的提出:在用冗余表達對象間的聯(lián)絡(luò)時,如何用系統(tǒng)來自動維護修正的一致性? 互逆聯(lián)絡(luò):對稱的聯(lián)絡(luò)偶對,由inverse顯示標識。 系統(tǒng)將按照用戶標識指定的互逆聯(lián)絡(luò)的修正進展自動的一致性維護。一1:1的單值逆屬性 例如:關(guān)于婚姻的一致性控制,沒有兩個類型及其冗余的聯(lián)絡(luò): type Man istype Woman is body body wife:Woman husband:Man . ; ; end type Man; end t

22、ype Woman mickeyMouse.wife := miniMouse; miniMouse.husbnd:=donaldDuck;控制婚姻聯(lián)絡(luò)的一致性約束條件為: w.husband =m; 當且僅當 m.wife = w假設(shè)上面的約束由系統(tǒng)自動維護,那么需求用戶顯示的指明互逆聯(lián)絡(luò) type Man is wife : Woman inverse Woman$husband; end type Man; type Woman is husband : Man inverse Man$wife; end type Woman;mickeyMouse.wife := miniMouse;

23、miniMouse.husband:=donaldDuck; 二多值逆屬性 利用多值集合逆屬性來實現(xiàn)對象間1:N聯(lián)絡(luò)的冗余表示,例如遞歸組合屬性super與sub多值間的互逆的聯(lián)絡(luò)。 例如:用戶界面窗口的設(shè)計無重疊的全包含窗口 窗口:用一個矩形框表示 窗口之間是全包含的聯(lián)絡(luò)r1r11r112 其中: r1包含r11、r12 且r11r1 r1不直接包含 r111, r111被r11直接包含 r111r12type Rectangle is body height,length:float; contains:Rectangle ; end type Rectangle; 其中聯(lián)絡(luò)屬性conta

24、ins是一個多值集合屬性,其元素為矩形框?qū)ο蟆?現(xiàn)定義contains的一個逆關(guān)系containsIn,其約束為: 假設(shè)兩個窗口對象r,r具有r contains r,那么 r containsIn r, 即 containsIn(r)=r| rcontains(r) 最多僅由一個矩形r直接包含r。r1r12r11r112r111 包含一對互逆聯(lián)絡(luò)屬性的窗口類型定義如下: type Rectangle is body height,length:float; contains:Rectangle inverse Rectangle$containedIn; containedIn:Rectan

25、gle inverse Rectangle$contains; ; end type Rectangle;9.6 復合對象援用的支持 GOM支持對象間援用的更復雜的語義描畫 援用的分類 弱援用: (weak reference)兩個對象o1,o2除了它們之間存在一個援用聯(lián)絡(luò)外,沒有任何其它的語義約束,即它們在同一個語義層次上是獨立的兩個實體,那么稱o1,o2間是一個弱援用 復合對象援用:(composite reference) 復合對象對部分對象的引器具有復雜的語義約束。復合對象援用的語義分類 依賴/獨立 Dependent/Independent 專有/共享 Exclusive/Shared 它們組合成了四種復合對象的援用語義 復合對象的引用分類 依賴 專有 共享 獨立 專有 共享依賴專有復合對象援用(最嚴厲的語義援用) 語義表示:該援用保證部分對象僅僅能夠是一個復合對象的成份 一致性約束:部分對象

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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

提交評論