【正文】
。 說明:文檔的“章”可以共享,但當(dāng)所有引用它的章被刪除時,“章”的內(nèi)容也自然不再存在 2. 客戶檔案依賴合同而存在 — 依賴 一個客戶可以簽多份合同 — 共享 當(dāng)所有合同到期后,該客戶也就不再出現(xiàn) 獨(dú)立 — 共享復(fù)合對象的引用 ? 語義表示:部分對象即是共享的也是獨(dú)立的 (約束最弱 ) ? 示例:發(fā)動機(jī)設(shè)計(jì)圖 — 共享的部分對象可以用在不同的汽車設(shè)計(jì)中;當(dāng)汽車型號更新?lián)Q代了,發(fā)動機(jī)設(shè)計(jì)仍然需要保存 type CarDesign is body [ engineDesign : independent shared MotorDesihn。 … ]。 end type Automobile。 說明 :⑴ cpu芯片與某主板共存亡,不被共享 ⑵不排除處理器主板上還可以有其他器件,如內(nèi)存片則不是依賴主板的器件 2. 大樓與大樓內(nèi)房間的關(guān)系 獨(dú)立 — 專有復(fù)合對象引用 ? 語義表示:部分對象僅與一個復(fù)合對象關(guān)聯(lián),但它有自己的獨(dú)立性 ? 一致性約束:部分對象不允許共享;當(dāng)主對象刪除時,部分對象允許在對象庫中獨(dú)立存在 ? 例: type Automobile is body [ engine : independent exclusive Motor 。 … ]。 復(fù)合對象引用的支持 ? GOM支持對象間引用的更復(fù)雜的語義描述 ? 引用的分類 — 弱引用 : (weak reference)兩個對象 o1,o2除了它們之間存在一個引用聯(lián)系外,沒有任何其它的語義約束,即它們在同一個語義層次上是獨(dú)立的兩個實(shí)體,則稱 o1,o2間是一個弱引用 — 復(fù)合對象引用 :(posite reference) 復(fù)合對象對部分對象的引用具有復(fù)雜的語義約束。 … end type Rectangle。 containedIn:Rectangle inverse Rectangle$contains。 r1 r12 r11 r112 r111 ? 包含一對互逆聯(lián)系屬性的窗口類型定義如下: type Rectangle is body [ height,length:float。 其中聯(lián)系屬性 contains是一個多值集合屬性,其元素為矩形框?qū)ο蟆? contains:{Rectangle} ]。 (二)多值逆屬性 ? 利用多值(集合)逆屬性來實(shí)現(xiàn)對象間 1:N聯(lián)系的冗余表示,例如遞歸組合屬性 super與 sub(多值)間的互逆的聯(lián)系。 := miniMouse。 type Woman is … husband : Man inverse Man$wife。 當(dāng)且僅當(dāng) = w ? 如果上面的約束由系統(tǒng)自動維護(hù),則需要用戶顯示的指明互逆聯(lián)系 type Man is … wife : Woman inverse Woman$husband。 :=donaldDuck。 end type Man。 (一) 1:1的單值逆屬性 ? 示例 :關(guān)于婚姻的一致性控制,沒有兩個類型及其冗余的聯(lián)系: type Man is type Woman is body body [ [ … … wife:Woman husband:Man ... … ]。 N M ? 方式二 ,采用單獨(dú)定義的 TR類型表示聯(lián)系 type Designs with extension is body [theParticipatingEngineer:Engineer; theProduct:Product] end type Designs 互逆聯(lián)系的實(shí)現(xiàn) ? 問題的提出:在用冗余表達(dá)對象間的聯(lián)系時,如何用系統(tǒng)來自動維護(hù)修改的一致性? ? 互逆聯(lián)系:對稱的聯(lián)系偶對,由 inverse顯示標(biāo)識。 type EngineerSet is type ProductSet is body {Engineer} body {Product} end type EngineerSet。 ……] ……] end