




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第九章 聯(lián)系的實(shí)現(xiàn)對象類型間通過屬性的引用建立了對象實(shí)例間的聯(lián)系本章重點(diǎn)研究對象間聯(lián)系的語義及其實(shí)現(xiàn)方法對象間的聯(lián)系可以是n元聯(lián)系(n2)n個對象間通過一個聯(lián)系進(jìn)行聯(lián)接其中最簡單,常用的是二元聯(lián)系(n=2)二元聯(lián)系中,二個對象間的聯(lián)系語義有1:1,1:N,N:1,N:M9.1 沒有屬性的二元聯(lián)系一個二元聯(lián)系本身沒有任何屬性,它只表達(dá)了二個對象類型間的聯(lián)系聯(lián)系的實(shí)現(xiàn):通過設(shè)置進(jìn)入點(diǎn)entry point來完成進(jìn)入點(diǎn)設(shè)在Tleft處:Tleft類型增加一個引用對象Tright的屬性,Tright類型無需增加屬性進(jìn)入點(diǎn)設(shè)在Tright處增加一個對象類型Rbin,它僅有二個元組屬性,分別是Tleft類
2、型和Tright類型,這種方法可以加載Rbin本身獨(dú)特的屬性TleftRbinTright1:1的二元聯(lián)系的實(shí)現(xiàn)(一)無冗余的表達(dá)方式一個聯(lián)系僅在一個對象屬性中表達(dá)采用 (或者)方法應(yīng)當(dāng)從查詢需求入手,選擇查詢頻度高的一方作為進(jìn)入點(diǎn)問題: 1)反向查詢速度極慢:對一個特定的Tright實(shí)例,查其相應(yīng)的Tleft實(shí)例時需要查過所有的Tleft實(shí)例集合2)即使正向查詢,若存在聯(lián)系的偶對集合很小,那么仍然費(fèi)時采用方法定義一個Rbin類型,Tr并由系統(tǒng)維護(hù)Tr集合,適用于Tr相對Tleft(Tright)較小時問題:1)需要二次查找才能定位2)當(dāng)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)系的實(shí)現(xiàn)(續(xù))(二)冗余的表達(dá)方式1二個進(jìn)入點(diǎn)在Tleft中建立R屬性類型為Tright在Tright中建立R-1屬性類型為Tleft優(yōu)點(diǎn):提高反向查詢效率問題:當(dāng)兩個對象實(shí)例間的聯(lián)系發(fā)生變更時,容易產(chǎn)生修改異常,生成對象庫狀態(tài)的一
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ù)來控制不會單獨(dú)修改.R-1 (.R-1只讀)總結(jié)利用封裝技術(shù)重新定義關(guān)聯(lián)屬性的狀態(tài)的修改特別注意不能在同一時間,以同樣的方式修改類型Tright的.R-1的值接受操作,否則導(dǎo)致遞歸操作的無限循環(huán)即:重寫Tleft,R的值接受操作隱藏Tright,.R-1 的值接受操作,使其為只讀
5、類型(三)冗余表達(dá)方式2采用顯式的冗余方式用TR作為中間聯(lián)系方法將二者顯式相連查詢?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)系的實(shí)現(xiàn)type Tleft is type Tright is type TR body body
6、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的對象實(shí)例庫進(jìn)行一致性維護(hù),即TR的insert操作進(jìn)行一致性維護(hù)N:M的二元聯(lián)系的實(shí)現(xiàn)type Tleft is type Trigh
7、t 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ù)選擇入口點(diǎn)可以采用組合冗余方法,但需要進(jìn)行狀態(tài)一致性維護(hù)TleftTrightRNM具有K個屬性的二元聯(lián)系的實(shí)現(xiàn)1:1的聯(lián)系:仍然可以采用方式(1)或(2),K個屬性寄放在Tleft或Tright1:N的聯(lián)系只能放在單值屬性的對象類型方N:M的聯(lián)
8、系寄存在那一方均不合適,只能采用方式(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 ,Oright,O1,Ok) isbegin self.left := Oleft; self.right := Oright; sel
9、f.a1 := O1; ; self.ak := Ok ;end define initTRend type TRN元聯(lián)系的實(shí)現(xiàn)只能采用方式(3)建立TR類型處理對初始化進(jìn)行重定義,以保證約束的一致性。為了檢索高效率,需要考慮受控的冗余建模。T1T2a1akTnRtype TRwith extension isBodyentitiy1: T1 ; entitiyn: Tn;a1:T1R;ak:TkR; operationsdeclare TR: T1 , , Tn,T1R, , TkR - TRimplementationend type TR示例分析(一)1-1聯(lián)系實(shí)例:工程師與他所占辦公室
10、的聯(lián)系處理約束條件:一個工程師一間辦公室type Engineer is type Office is bodybody resideIn: Office; isOccupied: Engineer; end type Engineer ; end type Office; 先有工程師,再分 經(jīng)常查詢某辦公室的工程師是誰配房間EngineersOfficesresidesIn11用方式(1)和(2)組合建模下冗余的一致性維護(hù)聯(lián)系更新時一般的方式(1)If (thePenthouse.isOccupiedby != NULL)thePenthouse.isOccupiedby.residesIn
11、 :=NULL; (2)If (leonardo.residesIn != NULL ) leonardo.residesIn. isOccupiedby :=NULL; (3) leonardo.residesIn := thePenthouse;(4) thePenthouseis.Occupiedby := leonardo;設(shè)計(jì)操作moveToOffice來維護(hù)一致性狀態(tài)define moveToOffice(newResidence ) isbegin if (newResidence.isOccupiedBy != NULL)newResidence.isOccupiedBy.re
12、sidesIn := NULL; if (self.residesIn != NULL )self.residesIn.isOccupiedBy := NULL; self.residesIn := newResidence; newResidence. isOccupiedBy := self;end define moveToOffice;示例分析(二)工程師與部門間的1:N的聯(lián)系type Engineer is type Division is body body worksfor: Division; employs: EngineerSet; end type Engineer ;
13、end type Division; type EngineerSet is body Engineer end type EngineerSet; EngineersDivisionsworksForN1控制類型冗余模型的兩個操作hiredefine hire(newEng) isBeginself.employs.insert(newEng);newEng.worksFor := self; end define hire;Firedefine fire(badEng) isBeginself.employs.remove(badEng);badEng.worksFor := NULL;
14、end define hire;聘用和辭退兩個操作可以保持DB的完整性約束。遞歸的1:N的關(guān)系產(chǎn)品與產(chǎn)品間具有遞歸的組合聯(lián)系E-R圖的展開可以有兩種描述模式productscompositionN1SubSuperA:通過Super屬性表達(dá)了is.part-of的語義關(guān)系:即:一個產(chǎn)品屬于上層產(chǎn)品的一個部件type Product is body super: Product ; end type Product ;適用范圍:查找某種產(chǎn)品被組裝在什么部件中。沿part-of路徑進(jìn)行導(dǎo)航或訪問Super:Super:Super:Super:Super:Super:Super:Super:B:通過
15、Sub屬性表達(dá)了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:應(yīng)用示例操作partlist:輸出組成某個產(chǎn)品的所有部件采用結(jié)構(gòu)Idefine partList isvar resultSet: ProductSet;beginresultSet.create;!cre
16、ate an empty setresultSet.insert( self );foreach ( part in ext( Product ) if ( part.super = self )resultSet.setUnion(part.partList);!recursive call of partListreturn resultSetend define partList采用結(jié)構(gòu)IIdefine partList isvar resultSet: ProductSet;beginresultSet.create;resultSet.insert( self );foreach (
17、part in self.sub) resultSet.setUnion(part.partList);!recursive call of partListreturn resultSet;end define partList;該程序是高效的。操作is part of:采用結(jié)構(gòu)Idefine isPartOf(theSuperPart) is !is self a subpart of theSuperPart?var part: ProductBeginpart := self;while ( part != NULL )If ( part = theSuperPart )return
18、true;else part := part.super;return false;end define isPartOf;高效,只需沿self向上查找到根一條路徑采用結(jié)構(gòu)IIdefine isPartOf(theSuperPart) is var isUsed: bool := false;Beginforeach ( part in theSuperPart.partList)If ( part = self ) isUsed := true;!we could already exit the loop herereturn isUsed;end define isPartOf;低效,需
19、到theSuperPart節(jié)點(diǎn)的所有組件中尋找self第III種冗余組合模式 type product is body super:Product; sub:ProductSet; end type product 該模式的使用中,重要的是維護(hù)DB的一致性N:M關(guān)系舉例EngineersProductsdesigns方式一,采用組合的冗余表達(dá)方式 type Engineer is type Product is body body designs: ProductSet; designedBy: EngineerSet; end type Engineer ; end type Product
20、; type EngineerSet is type ProductSet is body Engineer body Product end type EngineerSet; end type ProductSet;NM方式二,采用單獨(dú)定義的TR類型表示聯(lián)系type Designswith extension is bodytheParticipatingEngineer:Engineer;theProduct:Productend type Designs互逆聯(lián)系的實(shí)現(xiàn)問題的提出:在用冗余表達(dá)對象間的聯(lián)系時,如何用系統(tǒng)來自動維護(hù)修改的一致性?互逆聯(lián)系:對稱的聯(lián)系偶對,由inverse顯示
21、標(biāo)識。系統(tǒng)將按照用戶標(biāo)識指定的互逆聯(lián)系的修改進(jìn)行自動的一致性維護(hù)。(一)1:1的單值逆屬性示例:關(guān)于婚姻的一致性控制,沒有兩個類型及其冗余的聯(lián)系: type Man istype Woman is body body wife:Woman husband:Man . ; ; end type Man; end type Woman mickeyMouse.wife := miniMouse; miniMouse.husbnd:=donaldDuck;控制婚姻聯(lián)系的一致性約束條件為: w.husband =m; 當(dāng)且僅當(dāng) m.wife = w如果上面的約束由系統(tǒng)自動維護(hù),則需要用戶顯示的指明互逆
22、聯(lián)系 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;miniMouse.husband:=donaldDuck; (二)多值逆屬性利用多值(集合)逆屬性來實(shí)現(xiàn)對象間1:N聯(lián)系的冗余表示,例如遞歸組合屬性super與sub(多值)間的互逆的聯(lián)系。示例:用戶界面窗口的設(shè)計(jì)(無重疊的全包含窗口) 窗口:用一個矩形框表示 窗口之間是全包含的聯(lián)系r
23、1r11r112 其中: r1包含r11、r12 且r11r1 r1不直接包含 r111, r111被r11直接包含 r111r12type Rectangle is body height,length:float; contains:Rectangle ; end type Rectangle; 其中聯(lián)系屬性contains是一個多值集合屬性,其元素為矩形框?qū)ο蟆,F(xiàn)定義contains的一個逆關(guān)系containsIn,其約束為: 若兩個窗口對象r,r具有r contains r,則 r containsIn r, 即 containsIn(r)=r| rcontains(r) 最多僅由一個
24、矩形r直接包含r。r1r12r11r112r111包含一對互逆聯(lián)系屬性的窗口類型定義如下: type Rectangle is body height,length:float; contains:Rectangle inverse Rectangle$containedIn; containedIn:Rectangle inverse Rectangle$contains; ; end type Rectangle;9.6 復(fù)合對象引用的支持GOM支持對象間引用的更復(fù)雜的語義描述引用的分類 弱引用: (weak reference)兩個對象o1,o2除了它們之間存在一個引用聯(lián)系外,沒有任何其它的語義約束,即它們在同一個語義層次上是獨(dú)立的兩個實(shí)體,則稱o1,o2間是一個弱引用 復(fù)合對象引用:(composite reference) 復(fù)合對象對部分對象的引用具有復(fù)雜的語義約束。復(fù)合對象引用的語義分類依賴/獨(dú)立 Dependent/Independent專有/共享 Exclusive/Shared它們組合成了四種復(fù)合對象的引用語義 復(fù)合對象的引用分類 依賴 專有 共享 獨(dú)立 專有 共享依賴專有復(fù)合對象引用(最嚴(yán)格的語義引用)語義表示:該引用保證部分對象僅僅可能是一個復(fù)合對象的成份一致性約束:部分對象當(dāng)且僅當(dāng)它所依
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)民合作社聘用合同
- 發(fā)動機(jī)推進(jìn)控制系統(tǒng)戰(zhàn)略市場規(guī)劃報(bào)告
- 光電電視測斜儀戰(zhàn)略市場規(guī)劃報(bào)告
- 豆腐乳戰(zhàn)略市場規(guī)劃報(bào)告
- 化肥使用賠償合同范本
- 中專畢業(yè)生個人自我鑒定
- 個人房屋授權(quán)委托書
- 個人培訓(xùn)學(xué)習(xí)心得體會
- 公司柜子改造合同范本
- 代租托管合同范本
- 2024-2025學(xué)年廣州市高二語文上學(xué)期期末考試卷附答案解析
- 少年商學(xué)院《DeepSeek中小學(xué)生使用手冊》
- 2025年山東鋁業(yè)職業(yè)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 2024年教育公共基礎(chǔ)知識筆記
- 《銷售合同執(zhí)行》課件
- 深夜地鐵7號線施工方案
- 山東2024年山東經(jīng)貿(mào)職業(yè)學(xué)院第二批招聘102人歷年參考題庫(頻考版)含答案解析
- 宮腔球囊止血護(hù)理常規(guī)
- 口腔6S管理詳解
- 中醫(yī)接診能力培訓(xùn)
- 醫(yī)院意識形態(tài)培訓(xùn)課件
評論
0/150
提交評論