《第三部分面向对象模型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)三元
3、组表示 7.2 GOM对象类型框架定义 对象类型名唯一,超 类型名可选。 Public子句提供外部说 明 Body子句描述结构主 体 操作子句描述接口说 明 操作名(唯一性) 参数说明 操作实现子句描 述操作体 7.3 元组结构的对象类型 结构主体由三种基本结构及其组合 而成 元组结构(tupe_structure) 集合结构(set_structure) 表结构(list_structure) 元组结构定义 Type i可以是 简单sort; 组合sort; 对象类型;混合 类型;集合类型 ;表类型;直接 递归类型等 内嵌的属性值读写操作 VCO操作(Value receiving oper
4、ation ) 值接收操作 Declare attri:-type i; 读取当前第i个属性状态 VTO擦作(Value returning operation ) 值返回操作 Declare attri:+1) 示例(二) 立方体对象模型的正文: *定义“点”的对象类型 *定义原材料的对象类型 *定义立方体的对象类型 7.4 GOM类型的实例化 一个对象类型框架可产生一系列对象实例 内嵌的创建对象操作“create” GOM类型的实例化过程 第一步* Var myCuboid :Cuboid;/说明对象变量 第二步*执行赋值语句: (1) myCuboid:=Cuboid$create; 或
5、(2) myCuboid.create; 赋值语句的作用 (1)产生了一个初始化的空壳实例; (2)对该空壳实例赋予了一个对象标记OID; (3)将OID(或实例地址)赋给变量myCuboid; (4)将空壳属性值初始化为: Int:0;float:0.0;char:0;bool:false;复杂 对象类型:NULL; (5)当前该OID还仅是逻辑表示,不能被用户访问。 *产生了一个仅仅与OID相联系的一个空对象。 第三步:对空对象的每个属性进行实际值的 初始化工作 示例 y x V4 V8 V1 V3 V6 V7 V2 V5 图7.2 The Topological Representati
6、on Of a Cuboid myCuboid 图7.3 The “Skeleton” of a New Cuboid Instance mat:NULL value:0.0 v1:NULL v2:NULL v3:NULL v4:NULL v5:NULL v6:NULL v7:NULL v8:NULL id1Cuboid 7.5 对象标识 表示对象的三种方法: 内容标识关键字标识符 地址标识物理对象标识符 逻辑对象标识符 内容标识的问题(内容依赖) 概念的混淆:将两对象相等与两对象内容相等混为一谈 。 一致性管理的困难。 例1:对大商场中,同一商品在不同柜组有不同售价,商品 的主key为(商品
7、号+柜组号)。 例2:若主key为(人名+地址),当搬家而修改库时,给完 整性维护带来困难。 地址标识 地址标识 用对象所分配的地址空间表示对象 。 地址标识问题(地址依赖) 存储空间的重用导致引用错误且无法查找 。 例如新对象占用已删除对象空间。 分布式系统中对象经常被移动位置。 DB性能调整时常常需要重构硬盘存储区。 逻辑对象标识符 OID Logical Object Identity 对于GOM,每个对象可以描述为下述三元组 O = (id#,Type,Rep) Id# :系统产生的对象O的逻辑标识符 Type:对象O的类型 Rep:对象的内部状态,即属性的当前值。 OID的特点 对象
8、实例初始化时,系统产生一个唯一的OID 一个对象的OID在整个生命周期都永远保持 当对象删除后,其OID值永不复用 7.6 共享的队象 Share Subject 标准的RDBMS:由于INF约束,不支持队象 的引用 扩展的INF2的RDBMS,只能支持层次结构 ,不支持网状结构 从需求而言,复杂DB应用要求支持网络结构 O-O模型中,一个对象模型可以不受限制地 引用其他对象,同时也可以被其他对象引用 构造出网状拓扑结构 GOM模型通过多对象共享机制,支持网络结 构应用 共享子对象示例 共享子对象的副作用修改可见 对象的状态变化会被其他引用对象可见 例:一个对Material对象的修改: an
9、otherCuboid.mat.name = ”Copper”; anotherCuboid.mat.SpecWeight = 0.90 会被myCuboid所指id1可见 7.7 引用和重引用 Referencing and Dereferencing 复制(copy)语义:将一个值真实地复制到一个 sort类型的变量或属性中。 引用(referencing)语义:赋值语句处理的是一个 对象时,只将该对象的OID赋值到相应的变量或属 性中。 引用语句与C中的指针赋值相似,是一个间址操作 。 重引用(Dereferencing)语义:引用语义沿着引用 链的传递。 重引用语义是通过“”操作符的重
10、载,构造的引用链 实现的 整个对象结构可以通过引用语义构成一个网状结构 一个引用查找的实现是沿引用链,导航式地对逐个 对象实例的查询。 Var someMaterial:Material; w:float; muCuboid:Cuboid; (1)someMaterial.create; (2)someMaterial.name:=“Car bon”; (3)someMaterial.specWeight:= 0.75; (4)myCuboid.mat:=someMate rial; (5)w:=myCuboid.mat.specWei ght; mat:id88 value:39.99 v1
11、:id11 name:”Carbon” specWeight:0.75 Materialid88 id1 Cuboid myCuboid someMaterial 7.8 聚合类型 collection GOM模型提供body的二种内嵌的聚集 类型的类型构造子: 集合结构 表结构 集合结构的对象类型 集合结构的对象类型是一个集合对象 表达如下: Type set typeName is public body Element type end 集合元素类型ElementType可以是sort类型,也可 以是对象类型 type SetTypeName is Public body Element
12、Type end type SetTypeName; type TelephoneNumbers is int; type TelephoneNumbers is Public body int operations implementation end type TelephoneNumbers; 声明一个变量 var guidosTelephoneNumbers: TelephoneNumbers; (1) guidosTelephoneNumbers.create; (2) guidosTelephoneNumbers.insert(6082080); (3) guidosTelepho
13、neNumbers.insert(6082080); 集合结构的对象类型特点 需要定义一个元素Element的类型 集合对象类型本身可以用于定义对象属性的类型 集合对象类型支持数学上的Set概念,即不允许有相 同元素存在。(GOM要作唯一性检查) 当Element是sort类型时,插入概念是复制语义,插 入值; 当Element是对象类型时,插入概念是引用语义,插 入OID 集合对象允许共享,当有共享发生时,为共享子对 象。 共享概念的引入,使集合对象的概念可以作为对象 库概念。 共享的副作用 修改可见 对象类型的扩展 GOM通过with extension子句隐式地产生并维护一个特定 对象类
14、型的集合对象类型,用以管理该类型实例化的对象 集合。 例type Cuboid is with extention is end type Cuboid 则系统自动产生一个set Cuboid对象类型Cuboids。并将所 有Cuboid的实例化对象自动插入到Cuboids中。 Cuboids类型只允许用户使用ext (Cuboid)进行访问。 不允许任何显式地修改、删除、插入等操作 利用扩展概念建立对象实例库 type CuboidSet is Cuboid; var workPieceCuboids:CuboidSet; valuableCuboids:CuboidSet; workPie
15、ceCuboids.insert(myCuboid); valuableCuboids.insert(); type CuboidSet with extension is end type Cuboid; 表结构对象类型 表结构对象类型的特点 列表中的元素是有序的 类标的数学概念是bag,即允许相同的元素在 表中不同位置多次出现 列表中元素的类型可以是sort type或object type 表结构对象类型的定义方式 type Name is public body CuboidSetid59 workPiece Cuboids id1,id2,id3 id3 name:”Iron” sp
16、ecWeight:0.89 name:”Gold” specWeight:1.32 valuable Cuboids id60CuboidSet id77 id99 Cuboid Material Vertex id1 mat: id77 value:39.99 v1:id11v2:id12 v3:id13v4:id14 v5:id15v6:id16 v7:id17v8:id18 id11 x: 0.0 y: 0.0 z: 0.0 id1 mat: id99 value:89.90 v1:id31v2:id32 v3:id33v4:id34 v5:id35v6:id36 v7:id37v8:i
17、d38 id2 mat: id77 value:19.95 v1:id21v2:id22 v3:id23v4:id24 v5:id25v6:id26 v7:id27v8:id28 id18 x: 0.0 y: 1.0 z: 1.0 id21 x: 0.0 y: 0.0 z: 0.0 id28 x: 0.0 y: 2.0 z: 2.0 id31 x: 0.0 y: 0.0 z: 0.0 id38 x: 0.0 y: 3.0 z: 3.0 mat: id77 value: 250.00 vertices: id899 Cuboid2id299 id899VertexList type Vertex
18、List is Public body operations implementation end type VertexList; type Cuboid2 is Public bodymat: Material; value: float; vertices:VertexList; operations implementation end type Cuboid2; 7.9 类型安全 非类型安全数据类型:数据库的组件( 属性,变量,集合元素等),并不限制 为一个特定的类型(不需要类型说明) ,即编译时不对它们进行类型检查,好 处是使用灵活。 问题:大量的错误只能在运行时被检测 出来 类型
19、安全(续) 类型安全数据类型:对所有构件均限制了数据类 型。 强类型语言 GOM为强类型的 优点 1.类型安全 2.高效,在运行时无需作类型检查。 3.支持结构化设计 4.类型约束的组件为:属性、变量、操作参数、 表和集合类型的元素。 5.强类型语言编译时检查表达式中类型的兼容 性。 type City is Public bodyname: string; mayor: Person; inhabitants: PersonSet; operations implementation end type City; type Person is Public bodyname: string;
20、 age: int; spouse:Person; livesIn: City; operations implementation end type Person; type PersonSet is Public bodyPerson operations implementation end type PersonSet; Var cityOfLA: City; mickey,mini,dinald;Per son; name: “Los Angeles” mayor: id188 inhabitants: id115 id571 City cityOfLA id193,id188,id
21、372 id115 PersonSet name: “Mickey Mouse” age: 60 spouse: id372 livesIn: id571 Personid188 name: “Mini Mouse” age: 50 spouse: id188 livesIn: id571 Personid372 name: “Donald Duck” age: 45 spouse: NULL livesIn: id571 Personid193 donaldmickey var totalAge,ageOfSomeB ody:int; anyBody:Person; name:string;
22、 (1) ageOfSomeBody:=city OfLA.mayor.spouse.a ge; (2) foreach(anyBody in cityOfLA.inhabitants) totalAge:=totalAge+a nyBody.age; foreach(anyBody in cityOfLA.inhabitants) totalAge:=totalAge+anyBody.age; ageOfSomeBody:=cityOfLA. mayor. spouse. age; intCity Person Person int int PersonCity PersonSet inti
23、ntPerson 7.10 持久性Persistence 持久性:当程序的执行终止后,其创建的构件和数 据仍然存在。 需进行持久化构件 持久化对象类型 持久化对象实例 持久化变量 处理持久化数据采用的方式 嵌入式SQL语言 持久化程序设计语言 嵌入式SQL语言:持久性数据的存取操作,必须由 设计者显式地用SQL提供的语句进行DB读写。 持久化程序设计语言 查询语言与宿主语言完全无缝联接 优点 对象在DB中的创建、存储无需任何格式联 接。 用户对持久化数据的操纵与一般数据一样 ,无需进行显式的读/写。 缺点 由于宿主语言过强,对DB数据的一致性维 护更加困难。 由于语言的复杂性,数据查询的优化处
24、理 变得更困难。 与SQL的无缝联接目前作的并不理想。 GOM持久性构件类型的持久化 类型的持久化:类型的持久性由Persistence定义 符说明。 例:Persistence Type Vertex is 其中,持久性类型名称不能被重定义 持久性类型的依赖关系 在元组结构类型中,持久化类型的所有属 性都必须是持久的。 在聚合结构类型中,其元素类型也必须持 久。 在继承的is-a层次内部,一个持久类型的 超类型 (祖先)必须是持久的。 对象的持久性 一个对象实例的持久化可以采用以下几种途 径: 按类型持久:一个持久化类型的实例可以自 动确认为持久的。 缺点:使用极不方便,在需要持久和临时共
25、存时,操作困难。有的系统采用持久意向概 念,即持久类型实例化的对象可能潜在变为 持久。 按创建持久将持久操作与初始化操作绑定 ,即将持久对象与临时对象采用不同的初始 化子。 对象的持久性(续) 提供一个持久化操作,即用显式的持久化操 作将对象持久化。即将持久化声明延迟到对 象创建之后。 按引用声明持久:仅对一个(或多个)对象 显式的声明为持久对象(根对象)。其他对 象的持久化定义为沿着根对象的引用链进行 持久化扩展。 优点:持久化定义简洁。 缺点:系统确定持久化对象的代价较大。 GOM的对象持久化方法 GOM采用2,3两种方法: GOM提供一个持久化操作子(persistence ) 例如:a
26、Vertex.persistence aVertex在持久化操作之前仍然是临时对象 GOM提供初始化阶段的持久化操作 GOM不支持第4种方法,带来的危险行 为 当用户从一个持久化对象中引用了一个临 时对象时,会导致浮动引用 持久对象的实现方法 地址依赖方法: 当声明一个对象持久化时,系统初始化一 特定的外存区域,并提供一个持久化地址 指针 OID持久方法: 对持久化对象的标识进行持久化 持久对象的存储和访问 有三种访问策略: 名字法:在持久化区域内按名字查找 不适合有大量对象的情况 通过OID或持久化指针查找 系统对每一个持久类型提供一个持久性容 器其区间存放同类型的持久对象 GOM支持2,3
27、种方法 变量的持久化 变量的持久化声明: Persistence var myVertices:Vertexset; aVertex:Vertex; 使用要求: 变量名必须保持唯一性,无二义性 变量类型必须已定义为持久性 持久性变量由系统管理:它的值在定义它的程序 结束后,仍然有定义 问题:系统不能保证持久性变量引用一个临时对 象,因此会产生悬空引用,即它的值在再次赋值 前是未定义的 7.11 垃圾回收(Garbage Collection) 对于不再被使用的对象,应当及时从DB 库中删除, 删除的复杂性由以下原因引起: 对象的共享 不可及对象的检查困难 对象O既不是任何集合或列表的成员,又不
28、被任 何属性或变量引用; 对无递归引用的对象,一般采用引用计数器法; 对递归引用,采用Garbage算法。 删除的复杂性由以下原因引起( 续) 提供一个对象的显示删除操作,该操作需 要不但能删除最外层的对象,也能删除它 的引用对象 因此delete操作需定义一个重载操作进行引 用链的捆绑删除 问题:显示删除容易造成共享对象的 悬空访问 o o2o1 7.12 sort类型的复合定义 Sort类型的基本类型是简单类型 Sort类型可以组合定义构成抽象类型 ADT Sort类型的体有三种类型: 元组类型 集合类型 表类型 Sort 类型的特点 Sort类型的成员可以是对象类型 Sort类型的实例化
29、是一个值,因此,它是复制语义 例: 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; month: 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;chil dren:childSet;
链接地址:https://www.31doc.com/p-2581290.html