Presentation is loading. Please wait.

Presentation is loading. Please wait.

第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性 Sort 类型上的复合结构 第七章 对象类型的结构.

Similar presentations


Presentation on theme: "第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性 Sort 类型上的复合结构 第七章 对象类型的结构."— Presentation transcript:

1 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性 Sort 类型上的复合结构 第七章 对象类型的结构

2 7.1 类型系统与对象系统 类型系统( sort type )的发展 – 类型: – 早期语言只提供简单类型 – 进一步复杂类型 - > 简单类型、结构类型、串、指针... –Ada 提出抽象数据类型 ADT ( abstract data type ) 用户自己定义结构、操作 系统提供打包功能 以类型方式提供使用

3 几种简单 sort 类型

4 类型的使用、特点、局限 变量说明:指明一个变量的类型 变量赋值:类型的实例化操作 – 实例化结果:指定一个值 – 在实例的整个生命周期,值是不变的,因此类 型的实例无需标识,值就是其本身的标识 – 变量的重新赋值是重新实例化过程,原实例已 消亡。 类型系统的问题:无法描述实例的状态变化,即 不同的值代表了某个实例在不同时刻的不同状态 数据库的应用是最突出的不协调

5 面向对象类型 对象系统强调的是对象状态的变化 对象的生命周期种的某一瞬间是一个状 态(对象属性的某个值集) 但对象属性值被修改时,表明该对象由 一个状态转化为另一个状态 为了能识别不同状态下的对象,必须进 行标识。 —— 唯一性约束 对象状态的转化时内部变化,因此必须 进行封装 —— 完整性约束 对象 O 由( id#, Type, Rep) 三元组表示

6 7.2 GOM 对象类型框架定义 对象类型名唯一,超类 型名可选。 Public 子句提供外部说明 Body 子句描述结构主体 操作子句描述接口说明 – 操作名(唯一性) – 参数说明 操作实现子句 —— 描述 操作体

7 7.3 元组结构的对象类型 结构主体由三种基本结构及其组合 而成 – 元组结构 (tupe_structure) – 集合结构 (set_structure) – 表结构 (list_structure)

8 元组结构定义 Type i 可以是 简单 sort ; 组合 sort ; 对象类型;混合类 型;集合类型;表 类型;直接递归类 型等

9 内嵌的属性值读写操作 VCO 操作( Value receiving operation ) 值接收操作 Declare attri:->type i; 读取当前第 i 个属性状态 VTO 擦作( Value returning operation ) 值返回操作 Declare attri:<-type i; 将类型为 Type i 的状态写入第 i 个属性中

10 示例 ( 一 ) 直接递归示例 维护 person 的对象实例状态的操作 Var p:person … p.age:=p.age+1 (p.age  p.age->+1)

11 示例(二) 立方体对象模型的正文: * 定义 “ 点 ” 的对象类型 * 定义原材料的对象类型 * 定义立方体的对象类型

12 7.4 GOM 类型的实例化 一个对象类型框架可产生一系列对象实例 内嵌的创建对象操作 ——“ create ” GOM 类型的实例化过程 – 第一步 * Var myCuboid :Cuboid ; / 说明对象变量 – 第二步 * 执行赋值语句 : ( 1 ) myCuboid:=Cuboid$create; 或( 2 ) myCuboid.create;

13 赋值语句的作用 ( 1 )产生了一个初始化的空壳实例; ( 2 )对该空壳实例赋予了一个对象标记 OID ; ( 3 )将 OID (或实例地址)赋给变量 myCuboid ; ( 4 )将空壳属性值初始化为: Int : 0 ; float : 0.0 ; char : ’ \0 ’ ; bool : false ;复杂对 象类型: NULL ; ( 5 )当前该 OID 还仅是逻辑表示,不能被用户访问。 * 产生了一个仅仅与 OID 相联系的一个空对象。 -第三步:对空对象的每个属性进行实际值的 初始化工作

14 示例 y x V4 V8 V1 V3 V6 V7 V2 V5 图 7.2 The Topological Representation 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

15 7.5 对象标识 表示对象的三种方法: – 内容标识 — 关键字标识符 – 地址标识 — 物理对象标识符 – 逻辑对象标识符 内容标识的问题(内容依赖) – 概念的混淆:将两对象相等与两对象内容相等混为一谈。 – 一致性管理的困难。 例 1 :对大商场中,同一商品在不同柜组有不同售价,商品的 主 key 为(商品号 + 柜组号)。 例 2 :若主 key 为(人名 + 地址),当搬家而修改库时,给完整 性维护带来困难。

16 地址标识 — 用对象所分配的地址空间表示对象。 地址标识问题(地址依赖) – 存储空间的重用导致引用错误且无法查找。 例如新对象占用已删除对象空间。 – 分布式系统中对象经常被移动位置。 –DB 性能调整时常常需要重构硬盘存储区。

17 逻辑对象标识符 OID Logical Object Identity 对于 GOM ,每个对象可以描述为下述三元组 O = ( id # , Type , Rep ) Id # :系统产生的对象 O 的逻辑标识符 Type :对象 O 的类型 Rep :对象的内部状态,即属性的当前值。 OID 的特点 对象实例初始化时,系统产生一个唯一的 OID 一个对象的 OID 在整个生命周期都永远保持 当对象删除后,其 OID 值永不复用

18 7.6 共享的队象 Share Subject 标准的 RDBMS :由于 INF 约束,不支持队象的 引用 扩展的 INF 2 的 RDBMS ,只能支持层次结构, 不支持网状结构 从需求而言,复杂 DB 应用要求支持网络结构 O-O 模型中,一个对象模型可以不受限制地引 用其他对象,同时也可以被其他对象引用-- 构造出网状拓扑结构 GOM 模型通过多对象共享机制,支持网络结 构应用

19 共享子对象示例

20 共享子对象的副作用-修改可见 对象的状态变化会被其他引用对象可见 例:一个对 Material 对象的修改: anotherCuboid.mat.name = ” Copper ” ; anotherCuboid.mat.SpecWeight = 0.90 会被 myCuboid 所指 id1 可见

21 7.7 引用和重引用 Referencing and Dereferencing 复制( copy )语义:将一个值真实地复制到一个 sort 类型的变量或属性中。 引用( referencing )语义:赋值语句处理的是一个对 象时,只将该对象的 OID 赋值到相应的变量或属性中。 引用语句与 C 中的指针赋值相似,是一个间址操作。 重引用( Dereferencing )语义:引用语义沿着引用链 的传递。 重引用语义是通过 “” 操作符的重载,构造的引用链 实现的 整个对象结构可以通过引用语义构成一个网状结构 一个引用查找的实现是沿引用链,导航式地对逐个对 象实例的查询。

22 Var someMaterial:Material; w:float; muCuboid:Cuboid; … (1)someMaterial.create; (2)someMaterial.name:= “ Carbo n ” ; (3)someMaterial.specWeight:=0. 75; (4)myCuboid.mat:=someMateria l; (5)w:=myCuboid.mat.specWeigh t; mat:id 88 value:39.99 v1:id 11 … name: ” Carbon ” specWeight:0.75 … Materialid 88 id 1 Cuboid myCuboid someMaterial

23 7.8 聚合类型 collection GOM 模型提供 body 的二种内嵌的聚集类 型的类型构造子: — 集合结构 — 表结构

24 集合结构的对象类型 集合结构的对象类型是一个集合对象 表达如下: Type set typeName is public … body {Element type} … end 集合元素类型 ElementType 可以是 sort 类型,也可以 是对象类型

25 type SetTypeName is Public … body {ElementType} … 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) guidosTelephoneNumbers.insert(6082080);

26 集合结构的对象类型特点 需要定义一个元素 Element 的类型 集合对象类型本身可以用于定义对象属性的类型 集合对象类型支持数学上的 Set 概念,即不允许有相 同元素存在。( GOM 要作唯一性检查) 当 Element 是 sort 类型时,插入概念是复制语义,插入 值; 当 Element 是对象类型时,插入概念是引用语义,插 入 OID 集合对象允许共享,当有共享发生时,为共享子对象。 共享概念的引入,使集合对象的概念可以作为对象库 概念。 共享的副作用 — 修改可见

27 对象类型的扩展 GOM 通过 with extension 子句隐式地产生并维护一个特定对 象类型的集合对象类型,用以管理该类型实例化的对象集合。 例 type Cuboid is with extention is … end type Cuboid 则系统自动产生一个 set Cuboid 对象类型 Cuboids 。并将所有 Cuboid 的实例化对象自动插入到 Cuboids 中。 Cuboids 类型只允许用户使用 ext (Cuboid) 进行访问。 不允许任何显式地修改、删除、插入等操作 利用扩展概念建立对象实例库

28 type CuboidSet is {Cuboid}; var workPieceCuboids:CuboidSet; valuableCuboids:CuboidSet; … workPieceCuboids.insert(myCuboid); … valuableCuboids.insert( … ); type CuboidSet with extension is … end type Cuboid;

29 表结构对象类型 表结构对象类型的特点 — 列表中的元素是有序的 — 类标的数学概念是 bag ,即允许相同的元素在表 中不同位置多次出现 — 列表中元素的类型可以是 sort type 或 object type 表结构对象类型的定义方式 type Name is public … body …

30 CuboidSetid 59 workPiece Cuboids {id 1,id 2,id 3 } {id 3 } name: ” Iron ” specWeight:0.89 name: ” Gold ” specWeight:1.32 valuable Cuboids id 60 CuboidSet id 77 id 99 Cuboid Material Vertex id 1 mat: id 77 value:39.99 v1:id 11 v2:id 12 v3:id 13 v4:id 14 v5:id 15 v6:id 16 v7:id 17 v8:id 18 id 11 x: 0.0 y: 0.0 z: 0.0 id 1 mat: id 99 value:89.90 v1:id 31 v2:id 32 v3:id 33 v4:id 34 v5:id 35 v6:id 36 v7:id 37 v8:id 38 id 2 mat: id 77 value:19.95 v1:id 21 v2:id 22 v3:id 23 v4:id 24 v5:id 25 v6:id 26 v7:id 27 v8:id 28 id 18 x: 0.0 y: 1.0 z: 1.0 id 21 x: 0.0 y: 0.0 z: 0.0 id 28 x: 0.0 y: 2.0 z: 2.0 id 31 x: 0.0 y: 0.0 z: 0.0 id 38 x: 0.0 y: 3.0 z: 3.0

31 mat: id 77 value: 250.00 vertices: id 899 Cuboid2id 299 id 899 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;

32 7.9 类型安全 非类型安全数据类型:数据库的组件 (属性,变量,集合元素等),并不限 制为一个特定的类型(不需要类型说 明),即编译时不对它们进行类型检查, 好处是使用灵活。 问题:大量的错误只能在运行时被检测 出来

33 类型安全(续) 类型安全数据类型:对所有构件均限制了数据类 型。 — 强类型语言 — GOM 为强类型的 优点 1. 类型安全 2. 高效,在运行时无需作类型检查。 3. 支持结构化设计 4. 类型约束的组件为:属性、变量、操作参数、 表和集合类型的元素。 5. 强类型语言编译时检查表达式中类型的兼容 性。

34 type City is Public … body[name: string; mayor: Person; inhabitants: PersonSet;] operations … implementation … end type City; type Person is 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;Perso n; …

35 name: “ Los Angeles ” mayor: id 188 inhabitants: id 115 id 571 City cityOfLA {id 193,id 188,id 372 } id 115 PersonSet name: “ Mickey Mouse ” age: 60 spouse: id 372 livesIn: id 571 Personid 188 name: “ Mini Mouse ” age: 50 spouse: id 188 livesIn: id 571 Personid 372 name: “ Donald Duck ” age: 45 spouse: NULL livesIn: id 571 Personid 193 donaldmickey

36 var totalAge,ageOfSomeBod y:int; anyBody:Person; name:string; … (1) ageOfSomeBody:=cityOf LA.mayor.spouse.age; (2) foreach(anyBody in cityOfLA.inhabitants) totalAge:=totalAge+any Body.age; foreach(anyBody in cityOfLA.inhabitants) totalAge:=totalAge+anyBody.age; ageOfSomeBody:=cityOfLA. mayor. spouse. age; intCity Person int PersonCity PersonSet int Person

37 7.10 持久性 Persistence 持久性:当程序的执行终止后,其创建的构件和数据 仍然存在。 需进行持久化构件 — 持久化对象类型 — 持久化对象实例 — 持久化变量 处理持久化数据采用的方式 — 嵌入式 SQL 语言 — 持久化程序设计语言 嵌入式 SQL 语言:持久性数据的存取操作,必须由设 计者显式地用 SQL 提供的语句进行 DB 读写。

38 持久化程序设计语言 — 查询语言与宿主语言完全无缝联接 优点 — 对象在 DB 中的创建、存储无需任何格式联接。 — 用户对持久化数据的操纵与一般数据一样,无需 进行显式的读 / 写。 缺点 — 由于宿主语言过强,对 DB 数据的一致性维护更加 困难。 — 由于语言的复杂性,数据查询的优化处理变得更 困难。 — 与 SQL 的无缝联接目前作的并不理想。

39 GOM 持久性构件 — 类型的持久化 类型的持久化:类型的持久性由 Persistence 定义符 说明。 例: Persistence Type Vertex is 其中,持久性类型名称不能被重定义 持久性类型的依赖关系 — 在元组结构类型中,持久化类型的所有属性都 必须是持久的。 — 在聚合结构类型中,其元素类型也必须持久。 — 在继承的 is-a 层次内部,一个持久类型的超类型 (祖先)必须是持久的。

40 对象的持久性 一个对象实例的持久化可以采用以下几种途 径: 1. 按类型持久:一个持久化类型的实例可以自 动确认为持久的。 缺点:使用极不方便,在需要持久和临时共 存时,操作困难。有的系统采用持久意向概 念,即持久类型实例化的对象可能潜在变为 持久。 2. 按创建持久 — 将持久操作与初始化操作绑定, 即将持久对象与临时对象采用不同的初始化 子。

41 对象的持久性(续) 3. 提供一个持久化操作,即用显式的持久化操 作将对象持久化。即将持久化声明延迟到对 象创建之后。 4. 按引用声明持久:仅对一个(或多个)对象 显式的声明为持久对象(根对象)。其他对 象的持久化定义为沿着根对象的引用链进行 持久化扩展。 优点:持久化定义简洁。 缺点:系统确定持久化对象的代价较大。

42 GOM 的对象持久化方法 GOM 采用 2 , 3 两种方法: –GOM 提供一个持久化操作子( persistence ) 例如: aVertex.persistence aVertex 在持久化操作之前仍然是临时对象 –GOM 提供初始化阶段的持久化操作 GOM 不支持第 4 种方法,带来的危险行 为 – 当用户从一个持久化对象中引用了一个临时 对象时,会导致浮动引用

43 持久对象的实现方法 地址依赖方法: – 当声明一个对象持久化时,系统初始化一特 定的外存区域,并提供一个持久化地址指针 OID 持久方法: – 对持久化对象的标识进行持久化

44 持久对象的存储和访问 有三种访问策略: – 名字法:在持久化区域内按名字查找 —— 不 适合有大量对象的情况 – 通过 OID 或持久化指针查找 – 系统对每一个持久类型提供一个持久性容 器 —— 其区间存放同类型的持久对象 GOM 支持 2 , 3 种方法

45 变量的持久化 变量的持久化声明: –Persistence var myVertices:Vertexset; »aVertex:Vertex ; – 使用要求: 变量名必须保持唯一性,无二义性 变量类型必须已定义为持久性 – 持久性变量由系统管理:它的值在定义它的程序结 束后,仍然有定义 – 问题:系统不能保证持久性变量引用一个临时对象, 因此会产生悬空引用,即它的值在再次赋值前是未 定义的

46 7.11 垃圾回收( Garbage Collection ) 对于不再被使用的对象,应当及时从 DB 库中删除, 删除的复杂性由以下原因引起: – 对象的共享 – 不可及对象的检查困难 对象 O 既不是任何集合或列表的成员,又不被任何 属性或变量引用; 对无递归引用的对象,一般采用引用计数器法; 对递归引用,采用 Garbage 算法。

47 删除的复杂性由以下原因引起 (续) – 提供一个对象的显示删除操作,该操作需要 不但能删除最外层的对象,也能删除它的引 用对象 – 因此 delete 操作需定义一个重载操作进行引 用链的捆绑删除 问题:显示删除容易造成共享对象的悬空 访问

48 o o2o2 o1o1

49 7.12 sort 类型的复合定义 Sort 类型的基本类型是简单类型 Sort 类型可以组合定义构成抽象类型 ADT Sort 类型的体有三种类型: – 元组类型 [ ] – 集合类型 { } – 表类型 〈 〉

50 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 类型不允许递归定义

51 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;childr en:childSet;];


Download ppt "第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性 Sort 类型上的复合结构 第七章 对象类型的结构."

Similar presentations


Ads by Google