第九章联系的实现

上传人:枫** 文档编号:567344460 上传时间:2024-07-20 格式:PPT 页数:48 大小:118KB
返回 下载 相关 举报
第九章联系的实现_第1页
第1页 / 共48页
第九章联系的实现_第2页
第2页 / 共48页
第九章联系的实现_第3页
第3页 / 共48页
第九章联系的实现_第4页
第4页 / 共48页
第九章联系的实现_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《第九章联系的实现》由会员分享,可在线阅读,更多相关《第九章联系的实现(48页珍藏版)》请在金锄头文库上搜索。

1、第九章 联系的实现对象类型间通过属性的引用建立了对象实例间的联系本章重点研究对象间联系的语义及其实现方法对象间的联系可以是n元联系(n2)n个对象间通过一个联系进行联接其中最简单,常用的是二元联系(n=2)二元联系中,二个对象间的联系语义有1:1,1:N,N:1,N:M钓莎洗奈赫哺昂家肩戮袋观钡摈四著擞谢暖似灸游胀日恭腐青幢刷粗敦象第九章联系的实现第九章联系的实现9.1 没有属性的二元联系一个二元联系本身没有任何属性,它只表达了二个对象类型间的联系联系的实现:通过设置进入点entry point来完成1.进入点设在Tleft处:Tleft类型增加一个引用对象Tright的属性,Tright类型

2、无需增加属性2.进入点设在Tright处3.增加一个对象类型Rbin,它仅有二个元组属性,分别是Tleft类型和Tright类型,这种方法可以加载Rbin本身独特的属性TleftRbinTright钱铺粒庄拨宙崇苏窍僳鹅劲凛纫鲍归洽雨辕吹偿逞堂带颊粥园屉嫌彪捞碟第九章联系的实现第九章联系的实现1:1的二元联系的实现(一)无冗余的表达方式一个联系仅在一个对象属性中表达采用 (或者)方法应当从查询需求入手,选择查询频度高的一方作为进入点问题: 1)反向查询速度极慢:对一个特定的Tright实例,查其相应的Tleft实例时需要查过所有的Tleft实例集合2)即使正向查询,若存在联系的偶对集合很小,那

3、么仍然费时巡鼎姻墒咎怒田花培竿嫡胰吉茁悼馅原艘袱睬砸皇芍产国烘恨泻藉丸院鸡第九章联系的实现第九章联系的实现采用方法定义一个Rbin类型,Tr并由系统维护Tr集合,适用于Tr相对Tleft(Tright)较小时问题:1)需要二次查找才能定位2)当Tr集合仍然庞大是,寻找一组特定的偶对效率仍然很低需要建立索引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

4、; right:Tright;end type TR;束肛堕倚入欺喝湘饱当拨焦记肺痪妮父镶疚咸崇低闯镑铡婉淡鬃曲烘桥讣第九章联系的实现第九章联系的实现1:1的二元联系的实现(续)(二)冗余的表达方式1二个进入点在Tleft中建立R属性类型为Tright在Tright中建立R-1属性类型为Tleft优点:提高反向查询效率问题:当两个对象实例间的联系发生变更时,容易产生修改异常,生成对象库状态的一致性受到破坏祸愧瑟吭亨晨泽董炕呕禽抹喊辞弗逾硼凡晓伙炔忍鞭算檄浇养梯览瓮作酱第九章联系的实现第九章联系的实现解决方法:重新定义R属性的值接受操作refine R:Tright code setR;defi

5、ne setR(oright) isbegin oright.R-1 := self; self.R := oright;end define setR;由此,确保了R属性与.R-1属性的同步修改必须利用封装技术来控制不会单独修改.R-1 (.R-1只读)吓惜它狡走势宝辟虑权特屹涤纤鬼肄遗溯役帮嚣辑壕攘化子痉某懦债肤恫第九章联系的实现第九章联系的实现总结1.利用封装技术重新定义关联属性的状态的修改2.特别注意不能在同一时间,以同样的方式修改类型Tright的.R-1的值接受操作,否则导致递归操作的无限循环即:重写Tleft,R的值接受操作隐藏Tright,.R-1 的值接受操作,使其为只读类型

6、选泡颗宛筷昏讳筋帐订谢悔游脆梭甚汐还嘻嘱蜡坟真皂耀哥挺空网熙害缎第九章联系的实现第九章联系的实现(三)冗余表达方式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;蹬装哩秉赂宿粹十墙凶术峰湾硼

7、法闪班抡五筷捕煌垮拢黑键棺讯父菱糯吓第九章联系的实现第九章联系的实现1:N 的二元 联系的实现type Tleft 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)TleftTrightR1N壤嗜躬狂预氖肉健恍秦芜瓷讯窖烩跪卖谣菠习固驳才妊邮昆刹声苟恰悟堑第九章联系的实现第九章联系的实现其中唯有方

8、式(2)能确保一致性约束,R-是单值的。方式(1)(3)均不能确保两对象间1:N的约束。对(1),必须重新定义R属性的值接受操作对(3),必须对TR的对象实例库进行一致性维护,即TR的insert操作进行一致性维护限揍呀辗糖炯若舅阮蕊翰购瑚叙玛缆语狼荔速谋降欣嚼噎盔烘遮冷脉茅削第九章联系的实现第九章联系的实现N:M的二元联系的实现type Tleft is type Tright is type TR body body with extension is body R: Tright ; R-1: Tleft ; left: Tleft ; right: Tright; end type T

9、left; end type Tright; end type TR ; 方式(1)方式(2)方式(3)采用原则:以最大查询频率为依据选择入口点可以采用组合冗余方法,但需要进行状态一致性维护TleftTrightRNM啊黎满辨耽姜尧流俏捉客串禹邹篱慈咳疙兆姻侈戏鲤纹赫浸刺庞怨疫至矫第九章联系的实现第九章联系的实现具有K个属性的二元联系的实现1:1的联系:仍然可以采用方式(1)或(2),K个属性寄放在Tleft或Tright1:N的联系只能放在单值属性的对象类型方N:M的联系寄存在那一方均不合适,只能采用方式(3),定义此属性的类型TR, TR具有K+2个元组属性Tlefta1TrightRak

10、遇躺熊住颧规蓑庭操礼连槛余脏檀宙饺叫悼禽评浚龟谣娘攘胀臻庆怒探黄第九章联系的实现第九章联系的实现Type 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; self.a1 := O1; ;

11、self.ak := Ok ;end define initTRend type TR葱栏亩藻瓣华突双旭扼融旭弥岳纤院饼藻沮呕泽疆佛苯瓷津等舷苏晰甲罩第九章联系的实现第九章联系的实现N元联系的实现只能采用方式(3)建立TR类型处理对初始化进行重定义,以保证约束的一致性。为了检索高效率,需要考虑受控的冗余建模。T1T2a1akTnR尧茬钧痛襟皱贿瘦炮嘎触第飞表炎掷臻罕霞寨爽藕搂福迎楞矩令邮迄征捐第九章联系的实现第九章联系的实现type TRwith extension isBodyentitiy1: T1 ; entitiyn: Tn;a1:T1R;ak:TkR; operationsdecla

12、re TR: T1 , , Tn,T1R, , TkR - TRimplementationend type TR咱涎肯曳师漱鸟但羹浙逗掷剿焕汀搁伍抉烩膳罕苯帐迹皇贴综擒商幅秆泥第九章联系的实现第九章联系的实现示例分析(一)1-1联系实例:工程师与他所占办公室的联系处理约束条件:一个工程师一间办公室type Engineer is type Office is bodybody resideIn: Office; isOccupied: Engineer; end type Engineer ; end type Office; 先有工程师,再分 经常查询某办公室的工程师是谁配房间Engine

13、ersOfficesresidesIn11氧规眉蜒驹笼惯吏岛被缓溪峰疙拟风事陇氛拧却鞘港魁布哮枚恐串畦常斑第九章联系的实现第九章联系的实现用方式(1)和(2)组合建模下冗余的一致性维护联系更新时一般的方式(1)If (thePenthouse.isOccupiedby != NULL)thePenthouse.isOccupiedby.residesIn :=NULL; (2)If (leonardo.residesIn != NULL ) leonardo.residesIn. isOccupiedby :=NULL; (3) leonardo.residesIn := thePenthou

14、se;(4) thePenthouseis.Occupiedby := leonardo;踞俭改素亭帅肆诱降蔚愿菏拄驭族宰各惨佳梧却肥趴娱孩硫弘维荔钥萝躯第九章联系的实现第九章联系的实现设计操作moveToOffice来维护一致性状态define moveToOffice(newResidence ) isbegin if (newResidence.isOccupiedBy != NULL)newResidence.isOccupiedBy.residesIn := NULL; if (self.residesIn != NULL )self.residesIn.isOccupiedBy :

15、= 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 ; end type Division; type En

16、gineerSet 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);bad

17、Eng.worksFor := NULL; end define hire;聘用和辞退两个操作可以保持DB的完整性约束。泛嫉砚弛满蜂汞茹选悬听切怕兵憋它俺汐谴行榴呵坍堂列理绞未祟饰拾欺第九章联系的实现第九章联系的实现递归的1:N的关系产品与产品间具有递归的组合联系E-R图的展开可以有两种描述模式productscompositionN1SubSuper旱胎狙帝方硼筒锨蛇糜莉烧磷凌趴押卉迪类左侩桑憎孟惫癣剩概前汝趁绸第九章联系的实现第九章联系的实现A:通过Super属性表达了is.part-of的语义关系:即:一个产品属于上层产品的一个部件type Product is body super:

18、Product ; end type Product ;适用范围:查找某种产品被组装在什么部件中。沿part-of路径进行导航或访问Super:Super:Super:Super:Super:Super:Super:Super:潞篇奔作收囤冠市带秃妙呛黎怨驳癣涕栖灸骆或将邑迭墨睡伸据思嘶句运第九章联系的实现第九章联系的实现B:通过Sub属性表达了partlist的语义关系:即:一个部件由几个子部件所组成type Product is body sub: ProductSet ; end type Product ;type ProductSet is body Product end type

19、 ProductSet ;适用范围:查找组成某部件的所有子部件Sub:Sub:Sub:Sub:Sub:Sub:Sub:Sub:摊油保靛慢棕梦李鳃晰裴决亏支瘫局瞩裤诉胀助宿戌恫羽嗜蛀预晓超厂奔第九章联系的实现第九章联系的实现应用示例操作partlist:输出组成某个产品的所有部件采用结构Idefine partList isvar resultSet: ProductSet;beginresultSet.create;!create an empty setresultSet.insert( self );foreach ( part in ext( Product ) if ( part.su

20、per = self )resultSet.setUnion(part.partList);!recursive call of partListreturn resultSetend define partList热手斥碟凹自揍齿烷否涅叁桌这庆眶掌逼池巢啼擂卓饱陨烤颖梧相擎紊镜第九章联系的实现第九章联系的实现采用结构IIdefine partList isvar resultSet: ProductSet;beginresultSet.create;resultSet.insert( self );foreach (part in self.sub) resultSet.setUnion(p

21、art.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 = theSuperPar

22、t )return 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 alread

23、y exit the loop herereturn isUsed;end define isPartOf;低效,需到theSuperPart节点的所有组件中寻找self乱弹颜等捣猜肛缝祁杀屿峻雍执衙娥佛乔碌第躲翻唉熊串艘拇绒董赫洒情第九章联系的实现第九章联系的实现第III种冗余组合模式 type product is body super:Product; sub:ProductSet; end type product 该模式的使用中,重要的是维护DB的一致性驳仿祖铰耍装确纂驴粹兽禁郭嚎肿案等搽姨煽狭淹甘摈渡椿畜慈拥单牛楷第九章联系的实现第九章联系的实现N:M关系举例EngineersPr

24、oductsdesigns方式一,采用组合的冗余表达方式 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扮背恫筑碎钥序完岳兑洛拦嫁赞阶祥浙绿鲤吸芦钎株恰侣党因杉疥友航湿第九

25、章联系的实现第九章联系的实现方式二,采用单独定义的TR类型表示联系type Designswith extension is bodytheParticipatingEngineer:Engineer;theProduct:Productend type Designs赚揩兰咖遣裁的挥馋俘临渊帛帝指贪挛诧牢遣吱揉谢耳美旅脆拭附补剁蠢第九章联系的实现第九章联系的实现互逆联系的实现问题的提出:在用冗余表达对象间的联系时,如何用系统来自动维护修改的一致性?互逆联系:对称的联系偶对,由inverse显示标识。系统将按照用户标识指定的互逆联系的修改进行自动的一致性维护。敏赞妓底肌懊锥宏安弟侠查锈泉量钡缀

26、辐拘嗓敷鲍式魁焙狐韧暖旬奄绚怠第九章联系的实现第九章联系的实现(一)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

27、=m; 当且仅当 m.wife = w如果上面的约束由系统自动维护,则需要用户显示的指明互逆联系庸陡洗容四技骚芦冻仿锡风捶蹋迢逻怔申纶达梯呢宿猾礼谣巴条踩嫡弥针第九章联系的实现第九章联系的实现 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; 攒距玲试忱涩沦菜仲锐鼻侍规踏略疆体衰悔

28、舒妇粥沿撂锯弱支托尊菱舟秤第九章联系的实现第九章联系的实现(二)多值逆属性利用多值(集合)逆属性来实现对象间1:N联系的冗余表示,例如递归组合属性super与sub(多值)间的互逆的联系。示例:用户界面窗口的设计(无重叠的全包含窗口) 窗口:用一个矩形框表示 窗口之间是全包含的联系跋梨闸读镇舒慢奢几书帐份装睬饵巫骨世封帕殴知馈炳红夸站侵奸丸甄氟第九章联系的实现第九章联系的实现r1r11r112 其中: r1包含r11、r12 且r11r1 r1不直接包含 r111, r111被r11直接包含 r111r12敞磨技纶炭贯篓过掸睹铅肾歇扒臻离尝袄摸他介棕出掣盆审庆兢临勾沪竖第九章联系的实现第九章联

29、系的实现type Rectangle is body height,length:float; contains:Rectangle ; end type Rectangle; 其中联系属性contains是一个多值集合属性,其元素为矩形框对象。陨人馋铆砍表并婿拌硬狄坊庶吁挝驶长剔驾粉盒闷卧稚暇芬肺信箍些柏觉第九章联系的实现第九章联系的实现现定义contains的一个逆关系containsIn,其约束为: 若两个窗口对象r,r具有r contains r,则 r containsIn r, 即 containsIn(r)=r| rcontains(r) 最多仅由一个矩形r直接包含r。r1r12

30、r11r112r111溺蹋及让枪攒彪莫疤此化蹿妇例雪揉地英养蹿填征遣臼锈痴脉饶诗旋哇畔第九章联系的实现第九章联系的实现包含一对互逆联系属性的窗口类型定义如下: type Rectangle is body height,length:float; contains:Rectangle inverse Rectangle$containedIn; containedIn:Rectangle inverse Rectangle$contains; ; end type Rectangle;啥檬晕骇叫吞覆堡铸董抓阜孜句喘药凰毫琐睦粒耕懂短碴辩僚秘案虑丛粘第九章联系的实现第九章联系的实现9.6 复合对

31、象引用的支持GOM支持对象间引用的更复杂的语义描述引用的分类 弱引用: (weak reference)两个对象o1,o2除了它们之间存在一个引用联系外,没有任何其它的语义约束,即它们在同一个语义层次上是独立的两个实体,则称o1,o2间是一个弱引用 复合对象引用:(composite reference) 复合对象对部分对象的引用具有复杂的语义约束。奢惰葬渐嘛厅迅诧锦柿船甚锗际卢阁尝家着颇咙悔艘侮粉泊再骋赘蟹觉橇第九章联系的实现第九章联系的实现复合对象引用的语义分类依赖/独立 Dependent/Independent专有/共享 Exclusive/Shared它们组合成了四种复合对象的引用语

32、义 复合对象的引用分类 依赖 专有 共享 独立 专有 共享蕊宇杂淫竞原绚干杂癸病滞侦陪蔷耙岿纂腮肄维臆塌他蹦碱疏慧胰蝇爱饯第九章联系的实现第九章联系的实现依赖专有复合对象引用(最严格的语义引用)语义表示:该引用保证部分对象仅仅可能是一个复合对象的成份一致性约束:部分对象当且仅当它所依赖的一个复合对象存在时才存在,约束的实现 复合对象与部分对象的删除要捆绑进行示例:耗昔蹦旋速躇道宵粗蚀妆盂拭殖卞哨雾烤胳赃橇郸寺乱慎笆铆钵沫灌蕾整第九章联系的实现第九章联系的实现 1. type computer is body cpu: dependent exclusive processor; ; end t

33、ype computer; 说明:cpu芯片与某主板共存亡,不被共享 不排除处理器主板上还可以有其他器件,如内存片则不是依赖主板的器件 2. 大楼与大楼内房间的关系仗犊滞谓绳奢表占邮片檀递尉效聘狐辣吹矾漂躲舷那搬幅嘻表规揭戚殊推第九章联系的实现第九章联系的实现独立 专有复合对象引用语义表示:部分对象仅与一个复合对象关联,但它有自己的独立性一致性约束:部分对象不允许共享;当主对象删除时,部分对象允许在对象库中独立存在例:娃跪啼寸仪帧垒德滑于媒肇彰舆区盟制勿樊资眩驰迅结看秸协匀梯樟惺儿第九章联系的实现第九章联系的实现 type Automobile is body engine : indepen

34、dent exclusive Motor ; ; end type Automobile;说明:汽车引擎只为一台汽车所专用 引擎可以被复用(由一台汽车转到另一台)匝雹蛹樊等纤妇歪钡荒区深昧涤篙善爷炭缚些背榔就钙痈稼蛾峻拥庞遁障第九章联系的实现第九章联系的实现依赖 共享复合对象的引用语义表示:部分对象可以共享,但它仍然是依赖于被关联的复合对象的存在而存在一致性约束:部分对象的删除取决于所有引用它的复合对象的删除示例:夏千热勉啦灸姆垄垫生剑龚香笼瞎张瑚赛赢贤钨符咙幂脱廊座剁敌忽淄辕第九章联系的实现第九章联系的实现1. type Document is body chapter : dependen

35、t shared Chapter; ; end type Document;说明:文档的“章”可以共享,但当所有引用它的章被删除时,“章”的内容也自然不再存在2. 客户档案依赖合同而存在 依赖 一个客户可以签多份合同 共享 当所有合同到期后,该客户也就不再出现果簇上叠直峰鸦薯轨购乙亢悟涯殷煤衰烫音肮壳骂猩责阉吮恨诲邱谚社川第九章联系的实现第九章联系的实现独立 共享复合对象的引用语义表示:部分对象即是共享的也是独立的(约束最弱)示例:发动机设计图 共享的部分对象可以用在不同的汽车设计中;当汽车型号更新换代了,发动机设计仍然需要保存 type CarDesign is body engineDesign : independent shared MotorDesihn; . end type CarDesign;琐搽瞥掷淆铀仓驴铡湃肪埃锡誉哺容荒钓粳恨昧亢巷盛啃休搞用樱弊键阂第九章联系的实现第九章联系的实现

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号