第三部分面向对象模型GOMGenericObjectModel.ppt

上传人:本田雅阁 文档编号:3147231 上传时间:2019-07-17 格式:PPT 页数:51 大小:339.02KB
返回 下载 相关 举报
第三部分面向对象模型GOMGenericObjectModel.ppt_第1页
第1页 / 共51页
第三部分面向对象模型GOMGenericObjectModel.ppt_第2页
第2页 / 共51页
第三部分面向对象模型GOMGenericObjectModel.ppt_第3页
第3页 / 共51页
第三部分面向对象模型GOMGenericObjectModel.ppt_第4页
第4页 / 共51页
第三部分面向对象模型GOMGenericObjectModel.ppt_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《第三部分面向对象模型GOMGenericObjectModel.ppt》由会员分享,可在线阅读,更多相关《第三部分面向对象模型GOMGenericObjectModel.ppt(51页珍藏版)》请在三一文库上搜索。

1、第三部分 面向对象模型GOM Generic Object Model,类型系统与对象系统 GOM的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性 Sort类型上的复合结构,第七章 对象类型的结构,7.1 类型系统与对象系统,类型系统(sort type)的发展 类型: 早期语言只提供简单类型 进一步复杂类型 简单类型、结构类型、串、指针. Ada提出抽象数据类型ADT(abstract data type) 用户自己定义结构、操作 系统提供打包功能 以类型方式提供使用,几种简单sort类型,类型的使用、特点、局限,变量说明:指明一个变量的类型 变量赋值:类型的实例化操作

2、 实例化结果:指定一个值 在实例的整个生命周期,值是不变的,因此类型的实例无需标识,值就是其本身的标识 变量的重新赋值是重新实例化过程,原实例已消亡。 类型系统的问题:无法描述实例的状态变化,即不同的值代表了某个实例在不同时刻的不同状态 数据库的应用是最突出的不协调,面向对象类型,对象系统强调的是对象状态的变化 对象的生命周期种的某一瞬间是一个状态(对象属性的某个值集) 但对象属性值被修改时,表明该对象由一个状态转化为另一个状态 为了能识别不同状态下的对象,必须进行标识。唯一性约束 对象状态的转化时内部变化,因此必须进行封装完整性约束 对象O由(id#, Type, Rep)三元组表示,7.2

3、 GOM对象类型框架定义,对象类型名唯一,超类型名可选。 Public子句提供外部说明 Body子句描述结构主体 操作子句描述接口说明 操作名(唯一性) 参数说明 操作实现子句描述操作体,7.3 元组结构的对象类型,结构主体由三种基本结构及其组合而成 元组结构(tupe_structure) 集合结构(set_structure) 表结构(list_structure),元组结构定义,Type i可以是 简单sort; 组合sort; 对象类型;混合类型;集合类型;表类型;直接递归类型等,内嵌的属性值读写操作,VCO操作(Value receiving operation) 值接收操作 Dec

4、lare attri:-type i; 读取当前第i个属性状态 VTO擦作(Value returning operation) 值返回操作 Declare attri:-type i; 将类型为Type i的状态写入第i个属性中,示例(一),直接递归示例 维护person的对象实例状态的操作 Var p:person p.age:=p.age+1 (p.agep.age-+1),示例(二),立方体对象模型的正文: *定义“点”的对象类型 *定义原材料的对象类型 *定义立方体的对象类型,7.4 GOM类型的实例化,一个对象类型框架可产生一系列对象实例 内嵌的创建对象操作“create” GOM

5、类型的实例化过程 第一步* Var myCuboid :Cuboid;/说明对象变量 第二步*执行赋值语句: (1) myCuboid:=Cuboid$create; 或(2) myCuboid.create;,赋值语句的作用,(1)产生了一个初始化的空壳实例; (2)对该空壳实例赋予了一个对象标记OID; (3)将OID(或实例地址)赋给变量myCuboid; (4)将空壳属性值初始化为: Int:0;float:0.0;char:0;bool:false;复杂对象类型:NULL; (5)当前该OID还仅是逻辑表示,不能被用户访问。 *产生了一个仅仅与OID相联系的一个空对象。 第三步:对空

6、对象的每个属性进行实际值的初始化工作,示例,7.5 对象标识,表示对象的三种方法: 内容标识关键字标识符 地址标识物理对象标识符 逻辑对象标识符 内容标识的问题(内容依赖) 概念的混淆:将两对象相等与两对象内容相等混为一谈。 一致性管理的困难。 例1:对大商场中,同一商品在不同柜组有不同售价,商品的主key为(商品号+柜组号)。 例2:若主key为(人名+地址),当搬家而修改库时,给完整性维护带来困难。,地址标识,地址标识 用对象所分配的地址空间表示对象。 地址标识问题(地址依赖) 存储空间的重用导致引用错误且无法查找。 例如新对象占用已删除对象空间。 分布式系统中对象经常被移动位置。 DB性

7、能调整时常常需要重构硬盘存储区。,逻辑对象标识符 OID Logical Object Identity,对于GOM,每个对象可以描述为下述三元组 O = (id#,Type,Rep) Id# :系统产生的对象O的逻辑标识符 Type:对象O的类型 Rep:对象的内部状态,即属性的当前值。 OID的特点 对象实例初始化时,系统产生一个唯一的OID 一个对象的OID在整个生命周期都永远保持 当对象删除后,其OID值永不复用,7.6 共享的队象 Share Subject,标准的RDBMS:由于INF约束,不支持队象的引用 扩展的INF2的RDBMS,只能支持层次结构,不支持网状结构 从需求而言,

8、复杂DB应用要求支持网络结构 O-O模型中,一个对象模型可以不受限制地引用其他对象,同时也可以被其他对象引用构造出网状拓扑结构 GOM模型通过多对象共享机制,支持网络结构应用,共享子对象示例,共享子对象的副作用修改可见,对象的状态变化会被其他引用对象可见 例:一个对Material对象的修改: anotherCuboid.mat.name = ”Copper”; anotherCuboid.mat.SpecWeight = 0.90 会被myCuboid所指id1可见,7.7 引用和重引用 Referencing and Dereferencing,复制(copy)语义:将一个值真实地复制到一

9、个sort类型的变量或属性中。 引用(referencing)语义:赋值语句处理的是一个对象时,只将该对象的OID赋值到相应的变量或属性中。 引用语句与C中的指针赋值相似,是一个间址操作。 重引用(Dereferencing)语义:引用语义沿着引用链的传递。 重引用语义是通过“”操作符的重载,构造的引用链实现的 整个对象结构可以通过引用语义构成一个网状结构 一个引用查找的实现是沿引用链,导航式地对逐个对象实例的查询。,Var someMaterial:Material; w:float; muCuboid:Cuboid; (1)someMaterial.create; (2)someMater

10、ial.name:=“Carbon”; (3)someMaterial.specWeight:=0.75; (4)myCuboid.mat:=someMaterial; (5)w:=myCuboid.mat.specWeight;,mat:id88 value:39.99 v1:id11 ,name:”Carbon” specWeight:0.75 ,Material,id88,id1,Cuboid,myCuboid,someMaterial,7.8 聚合类型 collection,GOM模型提供body的二种内嵌的聚集类型的类型构造子: 集合结构 表结构,集合结构的对象类型,集合结构的对象类

11、型是一个集合对象 表达如下: Type set typeName is public body Element type end 集合元素类型ElementType可以是sort类型,也可以是对象类型,type SetTypeName is Public body ElementType end type SetTypeName;,type TelephoneNumbers is int;,type TelephoneNumbers is Public body int operations implementation end type TelephoneNumbers;,声明一个变量 va

12、r guidosTelephoneNumbers: TelephoneNumbers; (1) guidosTelephoneNumbers.create; (2) guidosTelephoneNumbers.insert(6082080); (3) guidosTelephoneNumbers.insert(6082080);,集合结构的对象类型特点,需要定义一个元素Element的类型 集合对象类型本身可以用于定义对象属性的类型 集合对象类型支持数学上的Set概念,即不允许有相同元素存在。(GOM要作唯一性检查) 当Element是sort类型时,插入概念是复制语义,插入值; 当Elem

13、ent是对象类型时,插入概念是引用语义,插入OID 集合对象允许共享,当有共享发生时,为共享子对象。 共享概念的引入,使集合对象的概念可以作为对象库概念。 共享的副作用 修改可见,对象类型的扩展,GOM通过with extension子句隐式地产生并维护一个特定对象类型的集合对象类型,用以管理该类型实例化的对象集合。 例 type Cuboid is with extention is end type Cuboid 则系统自动产生一个set Cuboid对象类型Cuboids。并将所有Cuboid的实例化对象自动插入到Cuboids中。 Cuboids类型只允许用户使用ext (Cuboid

14、)进行访问。 不允许任何显式地修改、删除、插入等操作 利用扩展概念建立对象实例库,type CuboidSet is Cuboid;,var workPieceCuboids:CuboidSet; valuableCuboids:CuboidSet; workPieceCuboids.insert(myCuboid); valuableCuboids.insert();,type CuboidSet with extension is end type Cuboid;,表结构对象类型,表结构对象类型的特点 列表中的元素是有序的 类标的数学概念是bag,即允许相同的元素在表中不同位置多次出现 列

15、表中元素的类型可以是sort type或object type 表结构对象类型的定义方式 type Name is public body ,CuboidSet,id59,workPiece Cuboids,id1,id2,id3,id3,name:”Iron” specWeight:0.89,name:”Gold” specWeight:1.32,valuable Cuboids,id60,CuboidSet,id77,id99,Cuboid,Material,Vertex,mat: id77 value: 250.00 vertices: id899,Cuboid2,id299,id899

16、,VertexList,type VertexList is Public body operations implementation end type VertexList;,type Cuboid2 is Public body mat: Material; value: float; vertices:VertexList; operations implementation end type Cuboid2;,7.9 类型安全,非类型安全数据类型:数据库的组件(属性,变量,集合元素等),并不限制为一个特定的类型(不需要类型说明),即编译时不对它们进行类型检查,好处是使用灵活。 问题:

17、大量的错误只能在运行时被检测出来,类型安全(续),类型安全数据类型:对所有构件均限制了数据类型。 强类型语言 GOM为强类型的 优点 1. 类型安全 2. 高效,在运行时无需作类型检查。 3. 支持结构化设计 4. 类型约束的组件为:属性、变量、操作参数、 表和集合类型的元素。 5. 强类型语言编译时检查表达式中类型的兼容 性。,type City is Public body name: string; mayor: Person; inhabitants: PersonSet; operations implementation end type City;,type Person is

18、Public body name: string; age: int; spouse:Person; livesIn: City; operations implementation end type Person;,type PersonSet is Public body Person operations implementation end type PersonSet;,Var cityOfLA: City; mickey,mini,dinald;Person; ,name: “Los Angeles” mayor: id188 inhabitants: id115,id571,Ci

19、ty,cityOfLA,id193,id188,id372,id115,PersonSet,donald,mickey,var totalAge,ageOfSomeBody:int; anyBody:Person; name:string; (1) ageOfSomeBody:=cityOfLA.mayor.spouse.age; (2) foreach(anyBody in cityOfLA.inhabitants) totalAge:=totalAge+anyBody.age;,foreach(anyBody in cityOfLA.inhabitants) totalAge:=total

20、Age+anyBody.age;,ageOfSomeBody:=cityOfLA. mayor. spouse. age;,int,City,Person,Person,int,int,Person,City,PersonSet,Person,7.10 持久性Persistence,持久性:当程序的执行终止后,其创建的构件和数据仍然存在。 需进行持久化构件 持久化对象类型 持久化对象实例 持久化变量 处理持久化数据采用的方式 嵌入式SQL语言 持久化程序设计语言 嵌入式SQL语言:持久性数据的存取操作,必须由设计者显式地用SQL提供的语句进行DB读写。,持久化程序设计语言 查询语言与宿主语言完

21、全无缝联接,优点 对象在DB中的创建、存储无需任何格式联接。 用户对持久化数据的操纵与一般数据一样,无需 进行显式的读/写。 缺点 由于宿主语言过强,对DB数据的一致性维护更加 困难。 由于语言的复杂性,数据查询的优化处理变得更 困难。 与SQL的无缝联接目前作的并不理想。,GOM持久性构件类型的持久化,类型的持久化:类型的持久性由Persistence定义符说明。 例:Persistence Type Vertex is 其中,持久性类型名称不能被重定义 持久性类型的依赖关系 在元组结构类型中,持久化类型的所有属性都 必须是持久的。 在聚合结构类型中,其元素类型也必须持久。 在继承的is-a

22、层次内部,一个持久类型的超类型 (祖先)必须是持久的。,对象的持久性,一个对象实例的持久化可以采用以下几种途径: 按类型持久:一个持久化类型的实例可以自动确认为持久的。 缺点:使用极不方便,在需要持久和临时共存时,操作困难。有的系统采用持久意向概念,即持久类型实例化的对象可能潜在变为持久。 按创建持久将持久操作与初始化操作绑定,即将持久对象与临时对象采用不同的初始化子。,对象的持久性(续),提供一个持久化操作,即用显式的持久化操作将对象持久化。即将持久化声明延迟到对象创建之后。 按引用声明持久:仅对一个(或多个)对象显式的声明为持久对象(根对象)。其他对象的持久化定义为沿着根对象的引用链进行持

23、久化扩展。 优点:持久化定义简洁。 缺点:系统确定持久化对象的代价较大。,GOM的对象持久化方法,GOM采用2,3两种方法: GOM提供一个持久化操作子(persistence) 例如:aVertex.persistence aVertex在持久化操作之前仍然是临时对象 GOM提供初始化阶段的持久化操作 GOM不支持第4种方法,带来的危险行为 当用户从一个持久化对象中引用了一个临时对象时,会导致浮动引用,持久对象的实现方法,地址依赖方法: 当声明一个对象持久化时,系统初始化一特定的外存区域,并提供一个持久化地址指针 OID持久方法: 对持久化对象的标识进行持久化,持久对象的存储和访问,有三种访

24、问策略: 名字法:在持久化区域内按名字查找不适合有大量对象的情况 通过OID或持久化指针查找 系统对每一个持久类型提供一个持久性容器其区间存放同类型的持久对象 GOM支持2,3种方法,变量的持久化,变量的持久化声明: Persistence var myVertices:Vertexset; aVertex:Vertex; 使用要求: 变量名必须保持唯一性,无二义性 变量类型必须已定义为持久性 持久性变量由系统管理:它的值在定义它的程序结束后,仍然有定义 问题:系统不能保证持久性变量引用一个临时对象,因此会产生悬空引用,即它的值在再次赋值前是未定义的,7.11 垃圾回收(Garbage Col

25、lection),对于不再被使用的对象,应当及时从DB库中删除, 删除的复杂性由以下原因引起: 对象的共享 不可及对象的检查困难 对象O既不是任何集合或列表的成员,又不被任何属性或变量引用; 对无递归引用的对象,一般采用引用计数器法; 对递归引用,采用Garbage算法。,删除的复杂性由以下原因引起(续),提供一个对象的显示删除操作,该操作需要不但能删除最外层的对象,也能删除它的引用对象 因此delete操作需定义一个重载操作进行引用链的捆绑删除 问题:显示删除容易造成共享对象的悬空访问,o,o2,o1,7.12 sort类型的复合定义,Sort类型的基本类型是简单类型 Sort类型可以组合定

26、义构成抽象类型ADT Sort类型的体有三种类型: 元组类型 集合类型 表类型 ,Sort 类型的特点,Sort类型的成员可以是对象类型 Sort类型的实例化是一个值,因此,它是复制语义 例: sort data is day : int; month : int; year : int . . Var d1: data ; -系统分配给d1一个data类型的空间 d1.day=1; d1.month=1,d1.year=2002; 当d2=d1时,d2也获得一个值 当d1.day=d1.day+1时,d2不变 Sort类型不允许递归定义,sort data is day: int; mont

27、h: int; year: int; var d1: date; d1.day := 1; d1.month := 1; d1.year := 1980; d2 := d1 d1.day := d1.day +1;,type Car is creationDate:data; chassis:Chassis; sort s is a: u; sort t is b: s; sort u is c: t; sort s is a: u; type T is b: s; sort u is c: T; sort childSet is Person; type Person is age:int;spouse:Person;children:childSet;,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1