




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第九章 聯系的實現對象類型間通過屬性的引用建立了對象實例間的聯系本章重點研究對象間聯系的語義及其實現方法對象間的聯系可以是n元聯系(n2)n個對象間通過一個聯系進行聯接其中最簡單,常用的是二元聯系(n=2)二元聯系中,二個對象間的聯系語義有1:1,1:N,N:1,N:M9.1 沒有屬性的二元聯系一個二元聯系本身沒有任何屬性,它只表達了二個對象類型間的聯系聯系的實現:通過設置進入點entry point來完成進入點設在Tleft處:Tleft類型增加一個引用對象Tright的屬性,Tright類型無需增加屬性進入點設在Tright處增加一個對象類型Rbin,它僅有二個元組屬性,分別是Tleft類
2、型和Tright類型,這種方法可以加載Rbin本身獨特的屬性TleftRbinTright1:1的二元聯系的實現(一)無冗余的表達方式一個聯系僅在一個對象屬性中表達采用 (或者)方法應當從查詢需求入手,選擇查詢頻度高的一方作為進入點問題: 1)反向查詢速度極慢:對一個特定的Tright實例,查其相應的Tleft實例時需要查過所有的Tleft實例集合2)即使正向查詢,若存在聯系的偶對集合很小,那么仍然費時采用方法定義一個Rbin類型,Tr并由系統維護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的二元聯系的實現(續)(二)冗余的表達方式1二個進入點在Tleft中建立R屬性類型為Tright在Tright中建立R-1屬性類型為Tleft優點:提高反向查詢效率問題:當兩個對象實例間的聯系發生變更時,容易產生修改異常,生成對象庫狀態的一
4、致性受到破壞解決方法:重新定義R屬性的值接受操作refine R:Tright code setR;define setR(oright) isbegin oright.R-1 := self; self.R := oright;end define setR;由此,確保了R屬性與.R-1屬性的同步修改必須利用封裝技術來控制不會單獨修改.R-1 (.R-1只讀)總結利用封裝技術重新定義關聯屬性的狀態的修改特別注意不能在同一時間,以同樣的方式修改類型Tright的.R-1的值接受操作,否則導致遞歸操作的無限循環即:重寫Tleft,R的值接受操作隱藏Tright,.R-1 的值接受操作,使其為只讀
5、類型(三)冗余表達方式2采用顯式的冗余方式用TR作為中間聯系方法將二者顯式相連查詢為二次查詢,但管理方便對R, R-1 的修改自然要遵照異常處理方式重定義VCO和做相應的隱藏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 的二元 聯系的實現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的對象實例庫進行一致性維護,即TR的insert操作進行一致性維護N:M的二元聯系的實現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)采用原則:以最大查詢頻率為依據選擇入口點可以采用組合冗余方法,但需要進行狀態一致性維護TleftTrightRNM具有K個屬性的二元聯系的實現1:1的聯系:仍然可以采用方式(1)或(2),K個屬性寄放在Tleft或Tright1:N的聯系只能放在單值屬性的對象類型方N:M的聯
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元聯系的實現只能采用方式(3)建立TR類型處理對初始化進行重定義,以保證約束的一致性。為了檢索高效率,需要考慮受控的冗余建模。T1T2a1akTnRtype TRwith extension isBodyentitiy1: T1 ; entitiyn: Tn;a1:T1R;ak:TkR; operationsdeclare TR: T1 , , Tn,T1R, , TkR - TRimplementationend type TR示例分析(一)1-1聯系實例:工程師與他所占辦公室
10、的聯系處理約束條件:一個工程師一間辦公室type Engineer is type Office is bodybody resideIn: Office; isOccupied: Engineer; end type Engineer ; end type Office; 先有工程師,再分 經常查詢某辦公室的工程師是誰配房間EngineersOfficesresidesIn11用方式(1)和(2)組合建模下冗余的一致性維護聯系更新時一般的方式(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;設計操作moveToOffice來維護一致性狀態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的聯系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的關系產品與產品間具有遞歸的組合聯系E-R圖的展開可以有兩種描述模式productscompositionN1SubSuperA:通過Super屬性表達了is.part-of的語義關系:即:一個產品屬于上層產品的一個部件type Product is body super: Product ; end type Product ;適用范圍:查找某種產品被組裝在什么部件中。沿part-of路徑進行導航或訪問Super:Super:Super:Super:Super:Super:Super:Super:B:通過
15、Sub屬性表達了partlist的語義關系:即:一個部件由幾個子部件所組成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:應用示例操作partlist:輸出組成某個產品的所有部件采用結構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采用結構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:采用結構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向上查找到根一條路徑采用結構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節點的所有組件中尋找self第III種冗余組合模式 type product is body super:Product; sub:ProductSet; end type product 該模式的使用中,重要的是維護DB的一致性N:M關系舉例EngineersProductsdesigns方式一,采用組合的冗余表達方式 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方式二,采用單獨定義的TR類型表示聯系type Designswith extension is bodytheParticipatingEngineer:Engineer;theProduct:Productend type Designs互逆聯系的實現問題的提出:在用冗余表達對象間的聯系時,如何用系統來自動維護修改的一致性?互逆聯系:對稱的聯系偶對,由inverse顯示
21、標識。系統將按照用戶標識指定的互逆聯系的修改進行自動的一致性維護。(一)1:1的單值逆屬性示例:關于婚姻的一致性控制,沒有兩個類型及其冗余的聯系: type Man istype Woman is body body wife:Woman husband:Man . ; ; end type Man; end type Woman mickeyMouse.wife := miniMouse; miniMouse.husbnd:=donaldDuck;控制婚姻聯系的一致性約束條件為: w.husband =m; 當且僅當 m.wife = w如果上面的約束由系統自動維護,則需要用戶顯示的指明互逆
22、聯系 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; (二)多值逆屬性利用多值(集合)逆屬性來實現對象間1:N聯系的冗余表示,例如遞歸組合屬性super與sub(多值)間的互逆的聯系。示例:用戶界面窗口的設計(無重疊的全包含窗口) 窗口:用一個矩形框表示 窗口之間是全包含的聯系r
23、1r11r112 其中: r1包含r11、r12 且r11r1 r1不直接包含 r111, r111被r11直接包含 r111r12type Rectangle is body height,length:float; contains:Rectangle ; end type Rectangle; 其中聯系屬性contains是一個多值集合屬性,其元素為矩形框對象?,F定義contains的一個逆關系containsIn,其約束為: 若兩個窗口對象r,r具有r contains r,則 r containsIn r, 即 containsIn(r)=r| rcontains(r) 最多僅由一個
24、矩形r直接包含r。r1r12r11r112r111包含一對互逆聯系屬性的窗口類型定義如下: type Rectangle is body height,length:float; contains:Rectangle inverse Rectangle$containedIn; containedIn:Rectangle inverse Rectangle$contains; ; end type Rectangle;9.6 復合對象引用的支持GOM支持對象間引用的更復雜的語義描述引用的分類 弱引用: (weak reference)兩個對象o1,o2除了它們之間存在一個引用聯系外,沒有任何其它的語義約束,即它們在同一個語義層次上是獨立的兩個實體,則稱o1,o2間是一個弱引用 復合對象引用:(composite reference) 復合對象對部分對象的引用具有復雜的語義約束。復合對象引用的語義分類依賴/獨立 Dependent/Independent專有/共享 Exclusive/Shared它們組合成了四種復合對象的引用語義 復合對象的引用分類 依賴 專有 共享 獨立 專有 共享依賴專有復合對象引用(最嚴格的語義引用)語義表示:該引用保證部分對象僅僅可能是一個復合對象的成份一致性約束:部分對象當且僅當它所依
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 天然氣輸配過程中能耗降低技術考核試卷
- 橡膠制品的供應鏈管理與協同創新考核試卷
- 綠色農業與食品安全考核試卷
- 寶石的結晶學與晶體生長研究進展評價考核試卷
- 禮儀用品企業環境管理體系考核試卷
- 遼寧省葫蘆島市六校聯考2025屆普通高中畢業班教學質量監測物理試題含解析
- 昆山杜克大學《學校體育學A》2023-2024學年第一學期期末試卷
- 永州市冷水灘區2025屆三年級數學第二學期期末統考模擬試題含解析
- 山東醫學高等??茖W校《數學規劃》2023-2024學年第一學期期末試卷
- 江蘇省無錫市澄西片達標名校2025屆初三下學期一輪復習效果檢測試題語文試題含解析
- 山東省高中名校2025屆高三4月校際聯合檢測大聯考生物試題及答案
- 2025年武漢數學四調試題及答案
- 【MOOC】數學建模精講-西南交通大學 中國大學慕課MOOC答案
- 職業病防護設施與個體防護用品的使用和維護
- 2024年全國高中數學聯賽北京賽區預賽一試試題(解析版)
- 綠化養護服務投標方案(技術標)
- 中國紡織文化智慧樹知到期末考試答案2024年
- (正式版)HGT 6313-2024 化工園區智慧化評價導則
- GB/T 3091-2015低壓流體輸送用焊接鋼管
- 實際控制人股東會決議
- 混凝土攪拌機設計論文
評論
0/150
提交評論