版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三部分面向对象模型GOMGenericObjectModel类型系统与对象系统GOM结构定义元组结构聚集结构对象标识子对象共享对象持久性Sort类型上复合结构第七章对象类型结构三部分面向对象模型专家讲座第1页7.1类型系统与对象系统类型系统(sorttype)发展类型:<类型名,{值域},{操作}>早期语言只提供简单类型深入复杂类型->简单类型、结构类型、串、指针...Ada提出抽象数据类型ADT(abstractdatatype)用户自己定义结构、操作系统提供打包功效以类型方式提供使用三部分面向对象模型专家讲座第2页几个简单sort类型三部分面向对象模型专家讲座第3页类型使用、特点、局限变量说明:指明一个变量类型变量赋值:类型实例化操作实例化结果:指定一个值在实例整个生命周期,值是不变,因这类型实例无需标识,值就是其本身标识变量重新赋值是重新实例化过程,原实例已消亡。类型系统问题:无法描述实例状态改变,即不一样值代表了某个实例在不一样时刻不一样状态数据库应用是最突出不协调三部分面向对象模型专家讲座第4页面向对象类型对象系统强调是对象状态改变对象生命周期种某一瞬间是一个状态(对象属性某个值集)但对象属性值被修改时,表明该对象由一个状态转化为另一个状态为了能识别不一样状态下对象,必须进行标识。——唯一性约束对象状态转化时内部改变,所以必须进行封装——完整性约束对象O由(id#,Type,Rep)三元组表示三部分面向对象模型专家讲座第5页7.2GOM对象类型框架定义对象类型名唯一,超类型名可选。Public子句提供外部说明Body子句描述结构主体操作子句描述接口说明操作名(唯一性)参数说明操作实现子句——描述操作体三部分面向对象模型专家讲座第6页7.3元组结构对象类型结构主体由三种基本结构及其组合而成元组结构(tupe_structure)集合结构(set_structure)表结构(list_structure)三部分面向对象模型专家讲座第7页元组结构定义Typei能够是简单sort;组合sort;对象类型;混合类型;集合类型;表类型;直接递归类型等三部分面向对象模型专家讲座第8页内嵌属性值读写操作VCO操作(Valuereceivingoperation)值接收操作Declareattri:->typei;读取当前第i个属性状态VTO擦作(Valuereturningoperation)值返回操作Declareattri:<-typei;将类型为Typei状态写入第i个属性中三部分面向对象模型专家讲座第9页示例(一)直接递归示例维护person对象实例状态操作
Varp:person…p.age:=p.age+1(p.agep.age->+1)三部分面向对象模型专家讲座第10页示例(二)立方体对象模型正文:*定义“点”对象类型*定义原材料对象类型*定义立方体对象类型三部分面向对象模型专家讲座第11页7.4GOM类型实例化一个对象类型框架可产生一系列对象实例内嵌创建对象操作——“create”GOM类型实例化过程第一步*VarmyCuboid:Cuboid;/说明对象变量第二步*执行赋值语句:(1)myCuboid:=Cuboid$create;或(2)myCuboid.create;三部分面向对象模型专家讲座第12页赋值语句作用(1)产生了一个初始化空壳实例;(2)对该空壳实例赋予了一个对象标识OID;(3)将OID(或实例地址)赋给变量myCuboid;(4)将空壳属性值初始化为:Int:0;float:0.0;char:’\0’;bool:false;复杂对象类型:NULL;(5)当前该OID还仅是逻辑表示,不能被用户访问。 *产生了一个仅仅与OID相联络一个空对象。-第三步:对空对象每个属性进行实际值初始化工作三部分面向对象模型专家讲座第13页示例yxV4V8V1V3V6V7V2V5图7.2TheTopologicalRepresentationOfaCuboidmyCuboid图7.3The“Skeleton”ofaNewCuboidInstancemat:NULLvalue:0.0v1:NULLv2:NULLv3:NULLv4:NULLv5:NULLv6:NULLv7:NULLv8:NULLid1Cuboid三部分面向对象模型专家讲座第14页7.5对象标识表示对象三种方法:内容标识—关键字标识符地址标识—物理对象标识符逻辑对象标识符内容标识问题(内容依赖)概念混同:将两对象相等与两对象内容相等混为一谈。一致性管理困难。例1:对大商场中,同一商品在不一样柜组有不一样售价,商品主key为(商品号+柜组号)。例2:若主key为(人名+地址),当迁居而修改库时,给完整性维护带来困难。三部分面向对象模型专家讲座第15页地址标识地址标识 —用对象所分配地址空间表示对象。地址标识问题(地址依赖)存放空间重用造成引用错误且无法查找。 比如新对象占用已删除对象空间。分布式系统中对象经常被移动位置。DB性能调整时经常需要重构硬盘存放区。三部分面向对象模型专家讲座第16页逻辑对象标识符OID
LogicalObjectIdentity对于GOM,每个对象能够描述为下述三元组 O=(id#,Type,Rep)Id#
:系统产生对象O逻辑标识符Type:对象O类型Rep:对象内部状态,即属性当前值。OID特点对象实例初始化时,系统产生一个唯一OID一个对象OID在整个生命周期都永远保持当对象删除后,其OID值永不复用三部分面向对象模型专家讲座第17页7.6共享队象
ShareSubject标准RDBMS:因为INF约束,不支持队象引用扩展INF2RDBMS,只能支持层次结构,不支持网状结构从需求而言,复杂DB应用要求支持网络结构O-O模型中,一个对象模型能够不受限制地引用其它对象,同时也能够被其它对象引用--结构出网状拓扑结构GOM模型经过多对象共享机制,支持网络结构应用三部分面向对象模型专家讲座第18页共享子对象示例三部分面向对象模型专家讲座第19页共享子对象副作用-修改可见对象状态改变会被其它引用对象可见例:一个对Material对象修改:
anotherC=”Copper”; anotherCuboid.mat.SpecWeight=0.90会被myCuboid所指id1可见三部分面向对象模型专家讲座第20页7.7引用和重引用
ReferencingandDereferencing复制(copy)语义:将一个值真实地复制到一个sort类型变量或属性中。引用(referencing)语义:赋值语句处理是一个对象时,只将该对象OID赋值到对应变量或属性中。引用语句与C中指针赋值相同,是一个间址操作。重引用(Dereferencing)语义:引用语义沿着引用链传递。重引用语义是经过“•”操作符重载,结构引用链实现整个对象结构能够经过引用语义组成一个网状结构一个引用查找实现是沿引用链,导航式地对逐一对象实例查询。三部分面向对象模型专家讲座第21页VarsomeMaterial:Material; w:float; muCuboid:Cuboid; …(1)someMaterial.create;(2)someM:=“Carbon”;(3)someMaterial.specWeight:=0.75;(4)myCuboid.mat:=someMaterial;(5)w:=myCuboid.mat.specWeight;mat:id88value:39.99v1:id11…name:”Carbon”specWeight:0.75…Materialid88id1CuboidmyCuboidsomeMaterial三部分面向对象模型专家讲座第22页7.8聚合类型collectionGOM模型提供body二种内嵌聚集类型类型结构子: — 集合结构 — 表结构三部分面向对象模型专家讲座第23页集合结构对象类型集合结构对象类型是一个集合对象 表示以下: TypesettypeNameis public… body{Elementtype} … end集合元素类型ElementType能够是sort类型,也能够是对象类型三部分面向对象模型专家讲座第24页typeSetTypeNameis
Public…
body {ElementType} …endtypeSetTypeName;typeTelephoneNumbersis {int};typeTelephoneNumbersis
Public…
body {int}
operations …
implementation …endtypeTelephoneNumbers;申明一个变量varguidosTelephoneNumbers:TelephoneNumbers; …(1)guidosTelephoneNumbers.create;(2)guidosTelephoneNumbers.insert(6082080);(3)guidosTelephoneNumbers.insert(6082080);三部分面向对象模型专家讲座第25页集合结构对象类型特点需要定义一个元素Element类型集合对象类型本身能够用于定义对象属性类型集合对象类型支持数学上Set概念,即不允许有相同元素存在。(GOM要作唯一性检验)当Element是sort类型时,插入概念是复制语义,插入值; 当Element是对象类型时,插入概念是引用语义,插入OID集合对象允许共享,当有共享发生时,为共享子对象。共享概念引入,使集合对象概念能够作为对象库概念。共享副作用—修改可见三部分面向对象模型专家讲座第26页对象类型扩展GOM经过withextension子句隐式地产生并维护一个特定对象类型集合对象类型,用以管理该类型实例化对象集合。例 typeCuboidis withextentionis … endtypeCuboid 则系统自动产生一个setCuboid对象类型Cuboids。并将全部Cuboid实例化对象自动插入到Cuboids中。Cuboids类型只允许用户使用ext(Cuboid)进行访问。不允许任何显式地修改、删除、插入等操作利用扩展概念建立对象实例库三部分面向对象模型专家讲座第27页typeCuboidSetis {Cuboid};varworkPieceCuboids:CuboidSet; valuableCuboids:CuboidSet; …workPieceCuboids.insert(myCuboid); …valuableCuboids.insert(…);typeCuboidSet
withextensionis …endtypeCuboid;三部分面向对象模型专家讲座第28页表结构对象类型表结构对象类型特点
—列表中元素是有序 —类标数学概念是bag,即允许相同元素在表中不一样位置屡次出现 —列表中元素类型能够是sorttype或objecttype表结构对象类型定义方式
typeNameis public… body<Elementtype> …三部分面向对象模型专家讲座第29页CuboidSetid59workPieceCuboids{id1,id2,id3}{id3}name:”Iron”specWeight:0.89name:”Gold”specWeight:1.32valuableCuboidsid60CuboidSetid77id99CuboidMaterialVertexid1mat:id77value:39.99v1:id11 v2:id12v3:id13 v4:id14v5:id15 v6:id16v7:id17 v8:id18id11x:0.0y:0.0z:0.0id1mat:id99value:89.90v1:id31 v2:id32v3:id33 v4:id34v5:id35 v6:id36v7:id37 v8:id38id2mat:id77value:19.95v1:id21 v2:id22v3:id23 v4:id24v5:id25 v6:id26v7:id27 v8:id28id18x:0.0y:1.0z:1.0id21x:0.0y:0.0z:0.0id28x:0.0y:2.0z:2.0id31x:0.0y:0.0z:0.0id38x:0.0y:3.0z:3.0三部分面向对象模型专家讲座第30页mat:id77value:250.00vertices:id899Cuboid2id299<id111,id112,id113,id114,id115,id116,id117,id118>id899VertexListtypeVertexListis
Public…
body <vertex>
operations …
implementation …endtypeVertexList;typeCuboid2is
Public…
body [mat:Material; value:float; vertices:VertexList;]
operations …
implementation …endtypeCuboid2;三部分面向对象模型专家讲座第31页7.9类型安全非类型安全数据类型:数据库组件(属性,变量,集合元素等),并不限制为一个特定类型(不需要类型说明),即编译时不对它们进行类型检验,好处是使用灵活。问题:大量错误只能在运行时被检测出来三部分面向对象模型专家讲座第32页类型安全(续)类型安全数据类型:对全部构件均限制了数据类型。 —强类型语言
—GOM为强类型优点
1. 类型安全
2. 高效,在运行时无需作类型检验。 3. 支持结构化设计 4. 类型约束组件为:属性、变量、操作参数、 表和集合类型元素。 5. 强类型语言编译时检验表示式中类型兼容 性。三部分面向对象模型专家讲座第33页typeCityis
Public…
body [name:string; mayor:Person; inhabitants:PersonSet;]
operations …
implementation …endtypeCity;typePersonis
Public…
body [name:string; age:int; spouse:Person; livesIn:City;]
operations …
implementation …endtypePerson;typePersonSetis
Public…
body {Person}
operations …
implementation …endtypePersonSet;VarcityOfLA:City; mickey,mini,dinald;Person; …三部分面向对象模型专家讲座第34页name:“LosAngeles”mayor:id188inhabitants:id115id571CitycityOfLA{id193,id188,id372}id115PersonSetname:“MickeyMouse”age:60spouse:id372livesIn:id571Personid188name:“MiniMouse”age:50spouse:id188livesIn:id571Personid372name:“DonaldDuck”age:45spouse:NULLlivesIn:id571Personid193donaldmickey三部分面向对象模型专家讲座第35页vartotalAge,ageOfSomeBody:int; anyBody:Person; name:string; …(1)ageOfSomeBody:=cityOfLA.mayor.spouse.age;(2)foreach(anyBodyincityOfLA.inhabitants) totalAge:=totalAge+anyBody.age;
foreach(anyBodyincityOfLA.inhabitants) totalAge:=totalAge+anyBody.age;ageOfSomeBody:=cityOfLA.mayor.spouse.age;intCityPersonPersonintintPersonCityPersonSetintintPerson三部分面向对象模型专家讲座第36页7.10持久性Persistence持久性:当程序执行终止后,其创建构件和数据依然存在。需进行持久化构件
—持久化对象类型
—持久化对象实例
—持久化变量处理持久化数据采取方式
—嵌入式SQL语言
—持久化程序设计语言嵌入式SQL语言:持久性数据存取操作,必须由设计者显式地用SQL提供语句进行DB读写。三部分面向对象模型专家讲座第37页持久化程序设计语言
—查询语言与宿主语言完全无缝联接优点
— 对象在DB中创建、存放无需任何格式联接。
— 用户对持久化数据操纵与普通数据一样,无需 进行显式读/写。缺点
— 因为宿主语言过强,对DB数据一致性维护愈加 困难。
— 因为语言复杂性,数据查询优化处理变得更 困难。
— 与SQL无缝联接当前作并不理想。三部分面向对象模型专家讲座第38页GOM持久性构件—类型持久化类型持久化:类型持久性由Persistence定义符说明。 例:PersistenceTypeVertexis 其中,持久性类型名称不能被重定义持久性类型依赖关系
— 在元组结构类型中,持久化类型全部属性都 必须是持久。
— 在聚合结构类型中,其元素类型也必须持久。
— 在继承is-a层次内部,一个持久类型超类型 (祖先)必须是持久。三部分面向对象模型专家讲座第39页对象持久性 一个对象实例持久化能够采取以下几个路径:按类型持久:一个持久化类型实例能够自动确认为持久。 缺点:使用极不方便,在需要持久和暂时共存时,操作困难。有系统采取持久意向概念,即持久类型实例化对象可能潜在变为持久。按创建持久—将持久操作与初始化操作绑定,即将持久对象与暂时对象采取不一样初始化子。三部分面向对象模型专家讲座第40页对象持久性(续)提供一个持久化操作,即用显式持久化操作将对象持久化。即将持久化申明延迟到对象创建之后。按引用申明持久:仅对一个(或多个)对象显式申明为持久对象(根对象)。其它对象持久化定义为沿着根对象引用链进行持久化扩展。
优点:持久化定义简练。
缺点:系统确定持久化对象代价较大。三部分面向对象模型专家讲座第41页GOM对象持久化方法GOM采取2,3两种方法:GOM提供一个持久化操作子(persistence)比如:aVertex.persistenceaVertex在持久化操作之前依然是暂时对象GOM提供初始化阶段持久化操作GOM不支持第4种方法,带来危险行为当用户从一个持久化对象中引用了一个暂时对象时,会造成浮动引用三部分面向对象模型专家讲座第42页持久对象实现方法地址依赖方法:当申明一个对象持久化时,系统初始化一特定外存区域,并提供一个持久化地址指针OID持久方法:对持久化对象标识进行持久化三部分面向对象模型专家讲座第43页持久对象存放和访问有三种访问策略:名字法:在持久化区域内按名字查找——不适合有大量对象情况经过OID或持久化指针查找系统对每一个持久类型提供一个持久性容器——其区间存放同类型持久对象GOM支持2,3种方法三部分面向对象模型专家讲座第44页变量持久化变量持久化申明:PersistencevarmyVertices:Vertexset;aVertex:Vertex;使用要求:变量名必须保持唯一性,无二义性变量类型必须已定义为持久性持久性变量由系统管理:它值在定义它程序结束后,依然有定义问题:系统不能确保持久性变量引用一个暂时对象,所以会产生悬空引用,即它值在再次赋值前是未定义三部分面向对象模型专家讲座第45页7.11垃圾回收(GarbageCollection)对于不再被使用对象,应该及时从DB库中删除,删除复杂性由以下原因引发:对象共享不可及对象检验困难对象O既不是任何集合或列表组员,又不被任何属性或变量引用;对无递归引用对象,普通采取引用计数器法;对递归引用,采取Garbage算法。三部分面向对象模
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汽车线束技术部奖惩制度
- 供电局奖惩制度
- 法院调研工作奖惩制度
- 学校期末测试奖惩制度
- 内部学习考核奖惩制度
- 团队小组内部奖惩制度
- 空调安装公司奖惩制度
- 九大岗位管理奖惩制度
- 学校护校值班奖惩制度
- 反恐怖防范工作奖惩制度
- 2023年冬、雨季施工监理细则
- 风险和机遇识别、评价及控制措施表
- 部队珍爱生命教育课件
- 国家临床重点专科心血管内科等13个专科评分标准(试行)
- 城市燃气工程系统的规划的资料课件
- 漆安慎力学第二版课后习题解答及漆安慎-力学答案
- PCI围术期强化他汀治疗的获益和机制课件
- 沥青搅拌站安全生产风险分级管控体系方案资料(2022-2023版)
- WTO海关估价协议中文版
- 【广东省】工作证明模板(仅供参考)
- YS/T 613-2006碳膜电位器用电阻浆料
评论
0/150
提交评论