Transcript
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;];


Top Related