版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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是一个多值集合属性,其元素为矩形框对象。现定义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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 片石批发合同示范文本
- 2024年稀土铝合金、铜合金材料项目评估分析报告
- 2024至2030年中国食品搅拌机数据监测研究报告
- 2024至2030年中国自动集卵机数据监测研究报告
- 2024至2030年多罗拉PP棉开松机项目投资价值分析报告
- 2024年中国饲料加工机械市场调查研究报告
- 2024年罗城米酒项目可行性研究报告
- 2024年玻纤人字纹带项目可行性研究报告
- 2024年普通型全自动洗梗机项目可行性研究报告
- 2024年中国电脑多头组合秤市场调查研究报告
- 水幕系统设备维护方案
- 双塔精馏正常操作双塔精馏正常操作
- 肝性脑病的护理个案课件
- 设备采购 投标方案(技术方案)
- 振荡指标MACD(波段操作精解)
- 2024年四川航空股份有限公司招聘笔试参考题库含答案解析
- 2021中国静脉血栓栓塞症防治抗凝药物的选用与药学监护指南(2021版)解读
- 医学检验专业职业规划书
- 喘证诊疗方案临床疗效评价总结分析
- 外研版小学英语六年级上每课时教学反思
- 读后续写个人成长类+My+mother's+gift+讲义 高考英语作文复习专项
评论
0/150
提交评论