51
第第第第 第第第第第第 GOM Generic Object Model 第第第 第第第第第 统统 GOM 第第第第第 第第第第 第第第第 第第第第第 第第第第第第 第第第第第第 Sort 第第第第第第第第 第第第 第第第第第第第

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

  • View
    378

  • Download
    0

Embed Size (px)

Citation preview

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

第三部分 面向对象模型 GOM Generic Object Model

• 类型系统与对象系统• GOM 的结构定义

• 元组结构 • 聚集结构

• 对象的标识• 子对象的共享• 对象的持久性• Sort 类型上的复合结构

第七章 对象类型的结构

Page 2: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

7.1 类型系统与对象系统• 类型系统( sort type )的发展

– 类型: < 类型名, { 值域 } , { 操作 }>– 早期语言只提供简单类型– 进一步复杂类型 - > 简单类型、结构类型、串、指针 ...– Ada 提出抽象数据类型 ADT ( abstract data

type )• 用户自己定义结构、操作• 系统提供打包功能• 以类型方式提供使用

Page 3: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

几种简单 sort 类型

Page 4: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

类型的使用、特点、局限• 变量说明:指明一个变量的类型• 变量赋值:类型的实例化操作

– 实例化结果:指定一个值– 在实例的整个生命周期,值是不变的,因此类

型的实例无需标识,值就是其本身的标识– 变量的重新赋值是重新实例化过程,原实例已

消亡。• 类型系统的问题:无法描述实例的状态变化,即

不同的值代表了某个实例在不同时刻的不同状态• 数据库的应用是最突出的不协调

Page 5: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

面向对象类型• 对象系统强调的是对象状态的变化• 对象的生命周期种的某一瞬间是一个状态(对象

属性的某个值集)• 但对象属性值被修改时,表明该对象由一个状态

转化为另一个状态• 为了能识别不同状态下的对象,必须进行标识。

——唯一性约束• 对象状态的转化时内部变化,因此必须进行封装

——完整性约束• 对象 O 由( id#, Type, Rep) 三元组表示

Page 6: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

7.2 GOM 对象类型框架定义• 对象类型名唯一,超类型

名可选。• Public 子句提供外部说明• Body 子句描述结构主体• 操作子句描述接口说明

– 操作名(唯一性)– 参数说明

• 操作实现子句——描述操作体

Page 7: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

7.3 元组结构的对象类型

• 结构主体由三种基本结构及其组合而成– 元组结构 (tupe_structure)

– 集合结构 (set_structure)

– 表结构 (list_structure)

Page 8: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

元组结构定义

Type i 可以是• 简单 sort ; 组合 sort ;• 对象类型;混合类

型;集合类型;表类型;直接递归类型等

Page 9: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

内嵌的属性值读写操作• VCO 操作( Value receiving operation ) 值接收操作

Declare attri:->type i;

读取当前第 i 个属性状态• VTO 擦作( Value returning operation ) 值返回操作

Declare attri:<-type i;

将类型为 Type i 的状态写入第 i 个属性中

Page 10: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

示例 ( 一 )

• 直接递归示例

• 维护 person 的对象实例状态的操作 Var p:person … p.age:=p.age+1 (p.agep.age->+1)

Page 11: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

示例(二)• 立方体对象模型的正文:

* 定义“点”的对象类型

* 定义原材料的对象类型

* 定义立方体的对象类型

Page 12: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

7.4 GOM 类型的实例化• 一个对象类型框架可产生一系列对象实例• 内嵌的创建对象操作——“ create”• GOM 类型的实例化过程

– 第一步 * Var myCuboid :Cuboid ; / 说明对象变量– 第二步 * 执行赋值语句 :

( 1 ) myCuboid:=Cuboid$create;

或( 2 ) myCuboid.create;

Page 13: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

赋值语句的作用( 1 )产生了一个初始化的空壳实例;( 2 )对该空壳实例赋予了一个对象标记 OID ;( 3 )将 OID (或实例地址)赋给变量 myCuboid ;( 4 )将空壳属性值初始化为: Int : 0 ; float : 0.0 ; char :’ \0’ ; bool : false ;

复杂对象类型: NULL ;( 5 )当前该 OID 还仅是逻辑表示,不能被用户访问。

* 产生了一个仅仅与 OID 相联系的一个空对象。 -第三步:对空对象的每个属性进行实际值的

初始化工作

Page 14: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

示例

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 : NULLvalue : 0.0v1 : NULLv2 : NULLv3 : NULLv4 : NULLv5 : NULLv6 : NULLv7 : NULLv8 : NULL

id1 Cuboid

Page 15: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

7.5 对象标识

• 表示对象的三种方法:– 内容标识—关键字标识符– 地址标识—物理对象标识符– 逻辑对象标识符

• 内容标识的问题(内容依赖)– 概念的混淆:将两对象相等与两对象内容相等混为一谈。– 一致性管理的困难。例 1 :对大商场中,同一商品在不同柜组有不同售价,商品

的主 key 为(商品号 +柜组号)。例 2 :若主 key 为(人名 + 地址),当搬家而修改库时,给

完整性维护带来困难。

Page 16: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

地址标识• 地址标识 — 用对象所分配的地址空间表示对象。• 地址标识问题(地址依赖)

– 存储空间的重用导致引用错误且无法查找。例如新对象占用已删除对象空间。

– 分布式系统中对象经常被移动位置。– DB 性能调整时常常需要重构硬盘存储区。

Page 17: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

逻辑对象标识符 OIDLogical Object Identity

对于 GOM ,每个对象可以描述为下述三元组O = ( id# , Type , Rep )

• Id# :系统产生的对象 O 的逻辑标识符• Type :对象 O 的类型• Rep :对象的内部状态,即属性的当前值。

OID 的特点• 对象实例初始化时,系统产生一个唯一的 OID• 一个对象的 OID 在整个生命周期都永远保持• 当对象删除后,其 OID 值永不复用

Page 18: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

7.6 共享的队象Share Subject

• 标准的 RDBMS :由于 INF 约束,不支持队象的引用

• 扩展的 INF2 的 RDBMS ,只能支持层次结构,不支持网状结构

• 从需求而言,复杂 DB 应用要求支持网络结构• O-O 模型中,一个对象模型可以不受限制地引

用其他对象,同时也可以被其他对象引用--构造出网状拓扑结构

• GOM 模型通过多对象共享机制,支持网络结构应用

Page 19: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

共享子对象示例

Page 20: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

共享子对象的副作用-修改可见

• 对象的状态变化会被其他引用对象可见• 例:一个对 Material 对象的修改:

anotherCuboid.mat.name = ”Copper”;

anotherCuboid.mat.SpecWeight = 0.90

• 会被 myCuboid所指 id1 可见

Page 21: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

7.7 引用和重引用Referencing and Dereferencing

• 复制( copy )语义:将一个值真实地复制到一个sort 类型的变量或属性中。

• 引用( referencing )语义:赋值语句处理的是一个对象时,只将该对象的 OID 赋值到相应的变量或属性中。

• 引用语句与 C 中的指针赋值相似,是一个间址操作。• 重引用( Dereferencing )语义:引用语义沿着引用链的传递。

• 重引用语义是通过“•”操作符的重载,构造的引用链实现的

• 整个对象结构可以通过引用语义构成一个网状结构• 一个引用查找的实现是沿引用链,导航式地对逐个对

象实例的查询。

Page 22: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

Var someMaterial:Material;

w:float;

muCuboid:Cuboid;

(1)someMaterial.create;

(2)someMaterial.name:=“Carbon”;

(3)someMaterial.specWeight:=0.75;

(4)myCuboid.mat:=someMaterial;

(5)w:=myCuboid.mat.specWeight;

mat:id88

value:39.99v1:id11

name:”Carbon”specWeight:0.75

Materialid88

id1Cuboid

myCuboid

someMaterial

Page 23: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

7.8 聚合类型 collection

• GOM 模型提供 body 的二种内嵌的聚集类型的类型构造子:

— 集合结构— 表结构

Page 24: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

集合结构的对象类型

• 集合结构的对象类型是一个集合对象表达如下:

Type set typeName ispublic …body {Element type}…end

• 集合元素类型 ElementType 可以是 sort 类型,也可以是对象类型

Page 25: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

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);

Page 26: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

集合结构的对象类型特点• 需要定义一个元素 Element 的类型• 集合对象类型本身可以用于定义对象属性的类型• 集合对象类型支持数学上的 Set 概念,即不允许有相

同元素存在。( GOM要作唯一性检查)• 当 Element 是 sort 类型时,插入概念是复制语义,插

入值;当 Element 是对象类型时,插入概念是引用语义,插入 OID

• 集合对象允许共享,当有共享发生时,为共享子对象。• 共享概念的引入,使集合对象的概念可以作为对象库

概念。• 共享的副作用 — 修改可见

Page 27: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

对象类型的扩展• GOM通过 with extension 子句隐式地产生并维护一个特定对

象类型的集合对象类型,用以管理该类型实例化的对象集合。• 例 type Cuboid is

with extention is…end type Cuboid

则系统自动产生一个 set Cuboid 对象类型 Cuboids 。并将所有 Cuboid 的实例化对象自动插入到 Cuboids 中。

• Cuboids 类型只允许用户使用 ext (Cuboid) 进行访问。• 不允许任何显式地修改、删除、插入等操作• 利用扩展概念建立对象实例库

Page 28: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

type CuboidSet is

{Cuboid};

var workPieceCuboids:CuboidSet;

valuableCuboids:CuboidSet;

workPieceCuboids.insert(myCuboid);

valuableCuboids.insert(…);

type CuboidSet

with extension is

end type Cuboid;

Page 29: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

表结构对象类型• 表结构对象类型的特点

— 列表中的元素是有序的— 类标的数学概念是 bag ,即允许相同的元素在表中不同位置多次出现— 列表中元素的类型可以是 sort type 或 object type

• 表结构对象类型的定义方式type Name ispublic …body <Element type> …

Page 30: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

CuboidSetid59

workPiece Cuboids

{id1,id2,id3} {id3}

name:”Iron”specWeight:0.89

name:”Gold”specWeight:1.32

valuable Cuboids

id60 CuboidSet

id77id99

Cuboid

Material

Vertex

id1mat: id77

value:39.99v1:id11 v2:id12

v3:id13 v4:id14

v5:id15 v6:id16

v7:id17 v8:id18

id11

x: 0.0y: 0.0z: 0.0

id1mat: id99

value:89.90v1:id31 v2:id32

v3:id33 v4:id34

v5:id35 v6:id36

v7:id37 v8:id38

id2mat: id77

value:19.95v1:id21 v2:id22

v3:id23 v4:id24

v5:id25 v6:id26

v7:id27 v8:id28

id18

x: 0.0y: 1.0z: 1.0

id21

x: 0.0y: 0.0z: 0.0

id28

x: 0.0y: 2.0z: 2.0

id31

x: 0.0y: 0.0z: 0.0

id38

x: 0.0y: 3.0z: 3.0

Page 31: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

mat: id77

value: 250.00vertices: id899

Cuboid2id299

<id111,id112,id113,id114,id115,id116,id117,id118>

id899 VertexList

type VertexList is

Public…

body

<vertex>

operations

implementation

end type VertexList;

type Cuboid2 is

Public…

body [mat: Material;

value: float;

vertices:VertexList;]

operations

implementation

end type Cuboid2;

Page 32: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

7.9 类型安全• 非类型安全数据类型:数据库的组件

(属性,变量,集合元素等),并不限制为一个特定的类型(不需要类型说明),即编译时不对它们进行类型检查,好处是使用灵活。

• 问题:大量的错误只能在运行时被检测出来

Page 33: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

类型安全(续)• 类型安全数据类型:对所有构件均限制了数据类

型。— 强类型语言— GOM 为强类型的

• 优点1. 类型安全2. 高效,在运行时无需作类型检查。3. 支持结构化设计4. 类型约束的组件为:属性、变量、操作参数、

表和集合类型的元素。5. 强类型语言编译时检查表达式中类型的兼容

性。

Page 34: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

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;Person;

Page 35: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

name: “Los Angeles”mayor: id188

inhabitants: id115

id571City

cityOfLA

{id193,id188,id372}

id115PersonSet

name: “Mickey Mouse”age: 60spouse: id372

livesIn: id571

Personid188

name: “Mini Mouse”age: 50spouse: id188

livesIn: id571

Personid372

name: “Donald Duck”age: 45spouse: NULLlivesIn: id571

Personid193

donaldmickey

Page 36: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

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:=totalAge+anyBody.age;

ageOfSomeBody:=cityOfLA. mayor. spouse. age;

int City

Person

Person

int

int

Person City

PersonSet

int int Person

Page 37: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

7.10 持久性 Persistence

• 持久性:当程序的执行终止后,其创建的构件和数据仍然存在。

• 需进行持久化构件— 持久化对象类型— 持久化对象实例— 持久化变量

• 处理持久化数据采用的方式— 嵌入式 SQL 语言— 持久化程序设计语言

• 嵌入式 SQL 语言:持久性数据的存取操作,必须由设计者显式地用 SQL 提供的语句进行 DB 读写。

Page 38: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

持久化程序设计语言—查询语言与宿主语言完全无缝联接

• 优点— 对象在 DB 中的创建、存储无需任何格式联接。— 用户对持久化数据的操纵与一般数据一样,无需 进行显式的读 / 写。

• 缺点— 由于宿主语言过强,对 DB 数据的一致性维护更加 困难。— 由于语言的复杂性,数据查询的优化处理变得更 困难。— 与 SQL 的无缝联接目前作的并不理想。

Page 39: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

GOM 持久性构件—类型的持久化

• 类型的持久化:类型的持久性由 Persistence 定义符说明。例: Persistence Type Vertex is其中,持久性类型名称不能被重定义

• 持久性类型的依赖关系— 在元组结构类型中,持久化类型的所有属性都 必须是持久的。— 在聚合结构类型中,其元素类型也必须持久。— 在继承的 is-a层次内部,一个持久类型的超类型 (祖先)必须是持久的。

Page 40: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

对象的持久性一个对象实例的持久化可以采用以下几种途径:

1. 按类型持久:一个持久化类型的实例可以自动确认为持久的。缺点:使用极不方便,在需要持久和临时共存时,操作困难。有的系统采用持久意向概念,即持久类型实例化的对象可能潜在变为持久。

2. 按创建持久—将持久操作与初始化操作绑定,即将持久对象与临时对象采用不同的初始化子。

Page 41: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

对象的持久性(续)3. 提供一个持久化操作,即用显式的持久化操

作将对象持久化。即将持久化声明延迟到对象创建之后。

4. 按引用声明持久:仅对一个(或多个)对象显式的声明为持久对象(根对象)。其他对象的持久化定义为沿着根对象的引用链进行持久化扩展。优点:持久化定义简洁。缺点:系统确定持久化对象的代价较大。

Page 42: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

GOM 的对象持久化方法• GOM采用 2 , 3 两种方法:

– GOM 提供一个持久化操作子( persistence )• 例如: aVertex.persistence• aVertex 在持久化操作之前仍然是临时对象

– GOM 提供初始化阶段的持久化操作• GOM 不支持第 4 种方法,带来的危险行为

– 当用户从一个持久化对象中引用了一个临时对象时,会导致浮动引用

Page 43: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

持久对象的实现方法• 地址依赖方法:

– 当声明一个对象持久化时,系统初始化一特定的外存区域,并提供一个持久化地址指针

• OID 持久方法:– 对持久化对象的标识进行持久化

Page 44: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

持久对象的存储和访问• 有三种访问策略:

– 名字法:在持久化区域内按名字查找——不适合有大量对象的情况

– 通过 OID 或持久化指针查找– 系统对每一个持久类型提供一个持久性容器

——其区间存放同类型的持久对象• GOM支持 2 , 3 种方法

Page 45: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

变量的持久化• 变量的持久化声明:

– Persistence var myVertices:Vertexset;» aVertex:Vertex ;

– 使用要求:• 变量名必须保持唯一性,无二义性• 变量类型必须已定义为持久性

– 持久性变量由系统管理:它的值在定义它的程序结束后,仍然有定义

– 问题:系统不能保证持久性变量引用一个临时对象,因此会产生悬空引用,即它的值在再次赋值前是未定义的

Page 46: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

7.11 垃圾回收( Garbage Collection )• 对于不再被使用的对象,应当及时从 DB

库中删除,• 删除的复杂性由以下原因引起:

– 对象的共享– 不可及对象的检查困难

• 对象 O既不是任何集合或列表的成员,又不被任何属性或变量引用;

• 对无递归引用的对象,一般采用引用计数器法;• 对递归引用,采用 Garbage算法。

Page 47: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

删除的复杂性由以下原因引起(续)

– 提供一个对象的显示删除操作,该操作需要不但能删除最外层的对象,也能删除它的引用对象

– 因此 delete 操作需定义一个重载操作进行引用链的捆绑删除

问题:显示删除容易造成共享对象的悬空访问

Page 48: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

o

o2o1

Page 49: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

7.12 sort 类型的复合定义• Sort 类型的基本类型是简单类型• Sort 类型可以组合定义构成抽象类型

ADT

• Sort 类型的体有三种类型:– 元组类型 [ ]– 集合类型 { }– 表类型 〈 〉

Page 50: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

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

Page 51: 第三部分 面向对象模型 GOM Generic Object Model 类型系统与对象系统 GOM 的结构定义 元组结构 聚集结构 对象的标识 子对象的共享 对象的持久性

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;children:childSet;];