文档介绍:第八章对象行为说明
$ 操作分类对面向对象的数据库而言,相关的操作可以分为三类:
I 对象实例的构造,销毁
II 实例状态的查询
III 实例状态的转换
I 实例构造
该类操作属函数操作,将返回一个新的对象实例OID
该类操作又可细分为两类:
原始构造:通过创建函数创建特定类型的新实例例: matrix$create(i)
一般构造:通过执行某些计算而创建新实例。即新实例是对老实例的运算过程中产生的
例:矩阵对象的转置而产生一个新的转置矩阵
:零件的组装而产生一个新的组件对象实例
:商品的拆分销售产生n个其他商品对象等等
II 对象状态查询
该类操作称为观测函数observer function,它返回一个相应对象的内部状态例. (I,j)----返回一个矩阵中I,j值 Inorigin(vertex)----查询某点是否为原点
I, II 类操作均不会造成DB状态的不一致性
III 转换操作 Mutators
该类操作是一个过程,它将按照参数内容改变被激活的对象的内部状态
例: (m2)
III类操作会改变DB的状态,因此,设计该类操作时必须考虑DB的一致性状态的维护问题
对象类型可以按状态是否能改变而分为:
可转换的对象类型----至少包含一个转换操作
不可转换的操作类型
$
一个类型相关操作的定义分为两部分:
操作说明:定义了操作的接口的抽象特征
操作定义:提供了操作实现代码
操作说明子句opretion的语法结构
Opretion
declare <OperationName>:<parameterTypeList>->
<ResultType> [code <CodeName>]
<OperationName>在一个对象类型里面唯一的标识了一个操作----不同类型间可以有同名操作
<parameterTypeList>指定了参数的数量,相关顺序和类型----参数表可以为空
<Result Type>确定了返回结果的类型----若无返回结果,则指定为void
[code<codeName>]为可选部分,它可以对实现部分的代码重新命名。否则,说明部分和实现部分的操作名要一致
操作定义子句implementation结构
Implementation
操作头部:define<codeName>[“(“<parameterlist>”)”]is
变量段:<Variablesection>
操作体:<OperationBody>
在declare子句中说明的每一个操作都必须在定义子句中有相应的代码
操作头部的名字和变量表必须与说明子句中描述的一致
变量段是声明局部变量的名字和类型
操作体是程序段,用begin…end括起来
Persistent type Vertex is
public…
body [x,y,z:float;]
operations
declare translate:Vertex->void;
declare scale: Vertex->void;
declare rotate: float,char->void;
declare distance: Vertex->float;
declare inOrigin:->bool;
…
implementation
define translate(t)is
begin
:=+;
:=+;
:=+;
end define translate;
…
end type Vertex;
类型相关操作的调用
类型相关操作只能由该类型的“接受者对象”(receiver object)来调用
接受者对象与操作名间用”.”来分隔
执行时,由变量引用(或复引用)的对象实例作为接受者对象来激活由“.”引用的操作
例 var myVertex: Vertex;
translationVertex: Vertex;
…
(translationVertex);
操作调用的约束及self概念
接受者类型(receiverType):接受者对象的类型
在对象系统中,一个类型相关操作只能被该类型的对象实例所调用
在操作定义子句,代码实现部分,接受者对象由self来引用
Self可看作为隐式的定义参数----为所有操作的接受者类型参数
例:(translationVertex);