【正文】
系的實(shí)現(xiàn) type Tleft is type Tright is type TR body body with extension is […… […… body R: {Tright }。 方式 (1) 方式 (2) 方式 (3) Tleft Tright R 1 N ? 其中唯有方式 (2)能確保一致性約束 ,R是單值的。 end type Tright 。 ……] ……] right: Tright。 R1: Tleft。 …] end type Tright。] end type TR。 type TR is with extension is body [left:Tleft。 ? 由此,確保了 R屬性與 .R1屬性的同步修改 ? 必須利用封裝技術(shù)來控制不會(huì)單獨(dú)修改 .R1 (.R1只讀 ) 總結(jié) 1. 利用封裝技術(shù)重新定義關(guān)聯(lián)屬性的狀態(tài)的修改 2. 特別注意不能在同一時(shí)間,以同樣的方式修改類型 Tright的 .R1的值接受操作,否則導(dǎo)致遞歸操作的無限循環(huán) 即: – 重寫 Tleft, R的值接受操作 – 隱藏 Tright, .R1 的值接受操作,使其為只讀類型 (三)冗余表達(dá)方式 2—采用顯式的冗余方式 ? 用 TR作為中間聯(lián)系方法將二者顯式相連 ? 查詢?yōu)槎尾樵儯芾矸奖? ? 對 R, R1 的修改自然要遵照異常處理方式重定義 VCO和做相應(yīng)的隱藏 type Tleft is body [… R:TR。 := oright。 1:1的二元聯(lián)系的實(shí)現(xiàn) (續(xù) ) (二)冗余的表達(dá)方式 1——二個(gè)進(jìn)入點(diǎn) ? 在 Tleft中建立 R屬性 —類型為 Tright ? 在 Tright中建立 R1屬性 —類型為 Tleft 優(yōu)點(diǎn):提高反向查詢效率 問題:當(dāng)兩個(gè)對象實(shí)例間的聯(lián)系發(fā)生變更時(shí),容易產(chǎn)生修改異常,生成對象庫狀態(tài)的一致性受到破壞 ? 解決方法 :重新定義 R屬性的值接受操作 refine R:←Tright code setR。 right:Tright。 …] end type Tright。 …] end type Tleft。第九章 聯(lián)系的實(shí)現(xiàn) ? 對象類型間通過屬性的引用建立了對象實(shí)例間的聯(lián)系 ? 本章重點(diǎn)研究對象間聯(lián)系的語義及其實(shí)現(xiàn)方法 ? 對象間的聯(lián)系可以是 n元聯(lián)系 (n≥2 ) n個(gè)對象間通過一個(gè)聯(lián)系進(jìn)行聯(lián)接 ? 其中最簡單,常用的是二元聯(lián)系 (n=2) ? 二元聯(lián)系中,二個(gè)對象間的聯(lián)系語義有 1:1, 1:N, N:1, N:M 167。 沒有屬性的二元聯(lián)系 ? 一個(gè)二元聯(lián)系本身沒有任何屬性,它只表達(dá)了二個(gè)對象類型間的聯(lián)系 ? 聯(lián)系的實(shí)現(xiàn):通過設(shè)置進(jìn)入點(diǎn) entry point來完成 1. 進(jìn)入點(diǎn)設(shè)在 Tleft處: Tleft類型增加一個(gè)引用對象Tright的屬性, Tright類型無需增加屬性 2. 進(jìn)入點(diǎn)設(shè)在 Tright處 3. 增加一個(gè)對象類型 Rbin,它僅有二個(gè)元組屬性,分別是 Tleft類型和 Tright類型,這種方法可以加載 Rbin本身獨(dú)特的屬性 Tleft Rbin Tright 1:1的二元聯(lián)系的實(shí)現(xiàn) (一)無冗余的表達(dá)方式 —一個(gè)聯(lián)系僅在一個(gè)對象屬性中表達(dá) ? 采用 ① (或者 ② )方法 —應(yīng)當(dāng)從查詢需求入手,選擇查詢頻度高的一方作為進(jìn)入點(diǎn) —問題: 1)反向查詢速度極慢:對一個(gè)特定的 Tright實(shí) 例,查其相應(yīng)的 Tleft實(shí)例時(shí)需要查過所有的 Tleft實(shí)例集合 2)即使正向查詢,若存在聯(lián)系的偶對集合很 小,那么仍然費(fèi)時(shí) ? 采用方法③ —定義一個(gè) Rbin類型, Tr并由系統(tǒng)維護(hù) Tr集合,適用于 Tr相對 Tleft(Tright)較小時(shí) —問題: 1)需要二次查找才能定位 2)當(dāng) Tr集合仍然龐大是,尋找一組特定的偶對效率仍然很低 ——需要建立索引 Tleft R Tright 1 1 type Tleft is body [… R:Tright。 type Tright body [… R1 :Tleft。 type TR is with extension is body [left:Tleft。] end type TR。 define setR(oright) is begin := self。 end define setR。 …] end type Tleft。 right:Tright。 type Tright body [… R1 :TR。 1:N 的二元 聯(lián)系的實(shí)現(xiàn) type Tleft is