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

Slides:



Advertisements
Similar presentations
第八章 轴系零件 § 8-1 键、销及其连接 一、键连接 二、销连接 § 8-2 轴 一、轴的分类和应用 二、轴的结构和轴上零件的固定
Advertisements

纺纱学. 2 绪 论 基本要求:了解纺纱系统的类别 重点掌握:棉纺系统的工艺流程 3 一、纺纱原理与设备 纺纱:用物理或机械的方法将纺织纤维纺成纱 线的过程。 纺纱原理:初加工、原料的选配、开松除杂、 混和、梳理、精梳、并合、牵伸、加捻、卷绕等。 纺纱方法:传统纺纱方法、新型纺纱方法。 纺纱设备:开清棉联合机、梳棉机、精梳机、
第十二章 常微分方程 返回. 一、主要内容 基本概念 一阶方程 类 型 1. 直接积分法 2. 可分离变量 3. 齐次方程 4. 可化为齐次 方程 5. 全微分方程 6. 线性方程 类 型 1. 直接积分法 2. 可分离变量 3. 齐次方程 4. 可化为齐次 方程 5. 全微分方程 6. 线性方程.
概率统计( ZYH ) 节目录 3.1 二维随机变量的概率分布 3.2 边缘分布 3.4 随机变量的独立性 第三章 随机向量及其分布 3.3 条件分布.
第 12 章位运算 C 语言兼具高级语言及低级语言的特性,因此 适合编写系统软件。 C 语言具备低级语言的特性 就在于它能直接对硬件进行操作,即位运算。 所谓位运算是指,按二进制位进行的运算。 例如,将一个存储单元中各二进位左移或右移一 位等。
HistCite 结果分析示例 罗昭锋. By:SC 可能原因:文献年度过窄,少有相互引用.
位置相关查询处理 研究背景及意义 移动计算、无线通信以及定位技术的快速发展,使 得位置相关的查询处理及基于位置的信息服务技术 已经成为一个热点研究领域 。 大量的应用领域 ( 如地理信息系统、智能导航、交 通管制、天气预报、军事、移动电子商务等 ) 均迫 切需要有效地查询这些数据对象。
细分曲面 傅孝明 SA 目录 细分曲面的基本思想 两个关键问题 一些基本概念 几种简单的细分曲面算法 细分曲面方法分类.
一、拟合优度检验 二、变量的显著性检验 三、参数的置信区间
本幻灯为医用耗材集中询价采购网上操作说明,请参考收费说明、供应厂商流程等文件 综合学习。幻灯次序按操作次序进行,可配合自身用户名对照学习。 操作人员:所有类别 操作说明:所有标 new 标志的文件,务必仔细查看。原有用户名和信息均可继续使用,新 使用人员可点击注册申请使用.
编译程序 构造原理和实现技术 授课教师:吕江花. 第一章 编译程序概述 主要内容: 几个基本概念 编译器的工作过程概述 编译器各个阶段的功能描述 编译程序的实现途径.
主要内容  LR(0) 分析. 0 S→  E # E→  E+T E→  T T→  id T→  ( E ) 1 S→E  # E→E  +T 5 T→id  3 E→E+  T T→  id T→  (E) 4 E→E+T  9 E→T  6 T→(  E) E→
嵌入式操作系统 陈香兰 Fall 系统调用 10/27/09 嵌入式 OS 3/12 系统调用的意义  操作系统为用户态进程与硬件设备进行交互提供 了一组接口 —— 系统调用  把用户从底层的硬件编程中解放出来  极大的提高了系统的安全性  使用户程序具有可移植性.
地理信息系统概述. 数据和信息 (Data & Information) 数据 原始事实 如:员工姓名, 数据可以有数值、图形、声音、视觉数据等 信息 以一定规则组织在一起的事实的集合。
第 4 章 抽象解释 内容概述 以一种独立于编程语言的方式,介绍抽象解释的 一些本质概念 – 将 “ 程序分析对语言语义是正确的 ” 这个概念公式 化 – 用 “ 加宽和收缩技术 ” 来获得最小不动点的较好的 近似,并使所需计算步数得到限制 – 用 “ 伽罗瓦连接和伽罗瓦插入 ” 来把代价较大的属 性空间用代价较小的属性空间来代替.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第六十二讲 ) 离散数学. 最后,我们构造能识别 A 的 Kleene 闭包 A* 的自动机 M A* =(S A* , I , f A* , s A* , F A* ) , 令 S A* 包括所有的 S A 的状态以及一个 附加的状态 s.
2.1 结构上的作用 作用及作用效应 作用的分类 荷载分类及荷载代表值.
1 为了更好的揭示随机现象的规律性并 利用数学工具描述其规律, 有必要引入随 机变量来描述随机试验的不同结果 例 电话总机某段时间内接到的电话次数, 可用一个变量 X 来描述 例 检测一件产品可能出现的两个结果, 也可以用一个变量来描述 第五章 随机变量及其分布函数.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第三十八讲 ) 离散数学. 第八章 格与布尔代数 §8.1 引 言 在第一章中我们介绍了关于集 合的理论。如果将 ρ ( S )看做 是集合 S 的所有子集组成的集合, 于是, ρ ( S )中两个集合的并 集 A ∪ B ,两个集合的交集.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第四十八讲 ) 离散数学. 例 设 S 是一个非空集合, ρ ( s )是 S 的幂集合。 不难证明 :(ρ(S),∩, ∪,ˉ, ,S) 是一个布尔代数。 其中: A∩B 表示 A , B 的交集; A ∪ B 表示 A ,
第 5 章 分布式文件管理 中国科技大学软件学院 丁箐. 2 主要内容 5.1 分布式文件5.1 分布式文件设计 5.2 分布式文件系统的实现 5.3 分布式文件系统的5.3 分布式文件系统的趋势.
第二部分 行政法律关系主体 第一节 行政主体 一、行政主体 (一)行政主体的概念 cc (二)行政主体资格含义及构成要件 CASE1CASE1\CASE2CASE2 (三)行政主体的职权和职责 1 、行政职权的概念及内容 2 、行政职权的特点 3 、行政职责.
线性代数习题课 吉林大学 术洪亮 第一讲 行 列 式 前面我们已经学习了关 于行列式的概念和一些基本 理论,其主要内容可概括为:
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第二十五讲 ) 离散数学. 定理 群定义中的条件 ( 1 )和( 2 )可以减弱如下: ( 1 ) ’ G 中有一个元素左壹适合 1 · a=a; ( 2 ) ’ 对于任意 a ,有一个元素左逆 a -1 适 合 a -1 ·
第二章 随机变量及其分布 第一节 随机变量及其分布函数 一、随机变量 用数量来表示试验的基本事件 定义 1 设试验 的基本空间为 , ,如果对试验 的每一个基 本事件 ,规定一个实数记作 与之对应,这样就得到一个定义在基本空 间 上的一个单值实函数 ,称变量 为随机变量. 随机变量常用字母 、 、 等表示.或用.
第 4 章 过程与变量的作用范围. 4.1 Visual Basic 的代码模块 Visual Basic 的应用程序是由过程组成的, 过程代码存放在模块中。 Visual Basic 提供了 三类模块,它们是窗体模块、标准模块和类 模块。 窗体模块 窗体模块是大多数 Visual Basic.
数 学 系 University of Science and Technology of China DEPARTMENT OF MATHEMATICS 第 3 章 曲线拟合的最小二乘法 给出一组离散点,确定一个函数逼近原函数,插值是这样的一种手段。 在实际中,数据不可避免的会有误差,插值函数会将这些误差也包括在内。
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第三十九讲 ) 离散数学. 例 设 S 是一个集合, ρ ( S )是 S 的幂集合,集合 的交( ∩ ),并(∪)是 ρ ( S )上的两个代数运算, 于是,( ρ ( S ), ∩ ,∪) 是一个格。而由例 知.
OS 进程调度模拟演示 制作人: 钱晶 高上上. OS 进程调度模拟-实验原理 静态优先级原理 在这种方式下,系统一旦把处理机分配给就绪队 列中的优先权最高的进程后,该进程便一直执行下去, 直至完成。或因为发生某事件使该进程放弃处理机,系 统方可再将处理机分配给另一优先级最高的进程。这些 事件包括有优先级更高的进程进入,或是因为某些原因.
1 第 7 章 专家控制系统 概述 专家系统的起源与发展 专家系统的一般结构 专家系统的知识表示和获取 专家系统的特点及分类.
信息利用与学术论文写作 Library of Jiangsu University, Zhenjiang Sha Zhenjiang
第二章 贝叶斯决策理论 3学时.
量子化学 第四章 角动量与自旋 (Angular momentum and spin) 4.1 动量算符 4.2 角动量阶梯算符方法
主讲教师:陈殿友 总课时: 124 第十一讲 极限的运算法则. 第一章 二、 极限的四则运算法则 三、 复合函数的极限运算法则 一 、无穷小运算法则 机动 目录 上页 下页 返回 结束 §5 极限运算法则.
在发明中学习 线性代数 概念的引入 李尚志 中国科学技术大学. 随风潜入夜 : 知识的引入 之一、线性方程组的解法 加减消去法  方程的线性组合  原方程组的解是新方程的解 是否有 “ 增根 ” ?  互为线性组合 : 等价变形  初等变换  高斯消去法.
东南大学计算中心 网站应用与实践 主讲人 吴俊. 2 东南大学计算中心 网站制作流程  确定主题、风格  规划栏目、收集素材  版面设计、配色  编辑页面  测试发布 FrontPage 要完成的任务.
Photoshop CS4 标准培训教程 第三章第三章 在 Photoshop CS4 中所谓的不规则选区指的是随意性强,不被局限在几何形状内, 他们可以是鼠标任意创建的也可以是通过计算而得到的单个选区或多个选区。在 Photoshop 中可以用来创建不规则选区的工具被分组放置到套索工具组、魔棒工具组.
量子力学教程 ( 第二版 ) 3.4 连 续 谱 本 征 函 数 的 归 一 化 连续谱本征函数是不能归一化的 一维粒子的动量本征值为的本征函数 ( 平面波 ) 为 可以取 中连续变化的一切实数值. 不难看出,只要则 在量子力学中, 坐标和动量的取值是连续变化 的 ; 角动量的取值是离散的.
第 3 章 控制流分析 内容概述 – 定义一个函数式编程语言,变量可以指称函数 – 以 dynamic dispatch problem 为例(作为参数的 函数被调用时,究竟执行的是哪个函数) – 规范该控制流分析问题,定义什么是可接受的控 制流分析 – 定义可接受分析在语义模型上的可靠性 – 讨论分析算法.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第五十三讲 ) 离散数学. 定义 设 G= ( V , T , S , P ) 是一个语法结构,由 G 产生的语言 (或者说 G 的语言)是由初始状态 S 演绎出来的所有终止符的集合, 记为 L ( G ) ={w  T *
编译原理总结. 基本概念  编译器 、解释器  编译过程 、各过程的功能  编译器在程序执行过程中的作用  编译器的实现途径.
 符号表  标识符的作用: 声明部分:定义了各种对象及对应的属性和 使用规则。 程序体:对所定义的对象进行各种操作。 $ididname IdnameAttributeIR  必要性 Token : 新表-符号表(种类、类型等信息):
Department of Mathematics 第二章 解析函数 第一节 解析函数的概念 与 C-R 条件 第二节 初等解析函数 第三节 初等多值函数.
1 第 7 章 存储过程、触发器和程序包 在很多时候,都需要保存 PL/SQL 程序块,以便 随后可以重新使用。这也意味着,程序块需要一个名 称,这样需才可以调用或者引用它。命名的 PL/SQL 程序块可被独立编译并存储在数据库中,任何与数据 库相连接的应用程序都可以访问这些存储的 PL/SQL 程序块。
网上预约集港操作指南 一、登录系统 登陆下面图片显示网址:输入堆场用户名、密码和校验码登陆系统.
首 页 首 页 上一页 下一页 本讲内容本讲内容 视图,剖视图(Ⅰ) 复习: P107 ~ P115 作业: P48(6-2,6-4), P49( 去 6-6) P50, P51(6-13), P52 P50, P51(6-13), P52 P53 (6-18,6-20) P53 (6-18,6-20)
《 UML 分析与设计》 交互概述图 授课人:唐一韬. 知 识 图 谱知 识 图 谱知 识 图 谱知 识 图 谱.
适用场景 应用背景 1 、企业使用电商平台作为前 台销售门户, NC 作为后台管 理软件; 2 、后台从商城平台自动定时 下载,快速导入到 NC 形成销 售订单,并按 ERP 业务规则 进行校验及触发后续流程; 3 、提高订单传递的及时性、 准确性、规范性,减少工作量, 降低出错率;
1 、如果 x + 5 > 4 ,那么两边都 可得 x >- 1 2 、在- 3y >- 4 的两边都乘以 7 可得 3 、在不等式 — x≤5 的两边都乘以- 1 可得 4 、将- 7x — 6 < 8 移项可得 。 5 、将 5 + a >- 2 a 移项可得 。 6 、将- 8x < 0.
新一代移动物联系统 MC MOBILE CONTROL 开启办公物联网时代 Product Promotion.
项目七: PLC 功能指令应用 带进位循环左移指令 XXXXX. 项目七: PLC 功能指令应用 FX2 系列可编程控制器移位控制指令有移位、循环移位、字移位 及先进先出 FIFO 指令等 10 条指令。 带进位循环右移指令 RCR 带进位循环左移指令 RCL 字右移位指令 WSFR 先入先出读出指令.
Java 水晶报表. 目录 水晶报表开发 (CrystalReports 2008) Java 水晶报表 (JBuilder 2005) 报表项目布署 (WebSphere v6.1)
EC 营客通产品操作(九) EC 营客通产品操作(九) 400 电话 400 电话. 400 电话有助于提升企业形象,无论企业地址变更、机构 变化、人员变动,联系方式永远不变。且在 EC 上申请的 400 电话可以在 EC 平台上进行统一的 400 电话接听及 400 电话客服的管理。
§10.2 对偶空间 一、对偶空间与对偶基 二、对偶空间的有关结果 三、例题讲析.
企业产品标准信息公共服务平台 操作介绍 目录 一 、系统架构介绍 二 、企业产品标准自我声明填报系统 三 、企业产品标准公示系统.
表单自定义 “ 表单自定义 ” 功能是用于制作表单的 工具,用数飞 OA 提供的表单自定义 功能能够快速制作出内容丰富、格 式规范、美观的表单。
7 生产费用在完工产品与在产 品之间分配的核算. 2 第七章 生产费用在完工产品与在产品之 间的分配  知识点 :  理解在产品的概念  掌握生产费用在完工产品与在产品之间的分 配.
力的合成 力的合成 一、力的合成 二、力的平行四边形 上一页下一页 目 录 退 出. 一、力的合成 O. O. 1. 合力与分力 我们常常用 一个力来代替几个力。如果这个 力单独作用在物体上的效果与原 来几个力共同作用在物体上的效 果完全一样,那么,这一个力就 叫做那几个力的合力,而那几个 力就是这个力的分力。
逻辑设计基础 1 第 7 章 多级与(或)非门电路 逻辑设计基础 多级门电路.
“ 百链 ” 云图书馆. 什么是百链云图书馆?1 百链云图书馆的实际效果?2 百链云图书馆的实现原理?3 百链云图书馆的价值?44 图书馆要做什么?55 提 纲.
参考文献管理软件. 常见参考文献管理软件 : 中文 : CNKI E-learning (目前免费) NoteExpress NoteFirst 英文: Refworks Endnote (网络版免费) Mendeley……
感谢您的关注 联系电话: – 677 手机: QQ :
八. 真核生物的转录 ㈠ 特点 ① 转录单元为单顺反子( single cistron ),每 个蛋白质基因都有自身的启动子,从而造成在功能 上相关而又独立的基因之间具有更复杂的调控系统。 ② RNA 聚合酶的高度分工,由 3 种不同的酶催化转 录不同的 RNA 。 ③ 需要基本转录因子与转录调控因子的参与,这.
一、 版 面 构 成 的 概 念 版 面 构 成 的 概 念 二、 版 面 构 成 的 发 展 趋 势 版 面 构 成 的 发 展 趋 势 三、 广 告 文 字 的 版 面 构 成 广 告 文 字 的 版 面 构 成 四、 广 告 版 面 的 视 觉 流 程 广 告 版 面 的 视 觉 流 程.
张勤 人大报刊复印资料 专题全文数据库 简 介简 介 《人大报刊资料全文数据库》是中国人民大 学书报资料中心与北京博利群电子信息有限 公司联合开发研制的大型数据库光盘。它涵 盖面广、信息量大、分类科学、筛选严谨、 结构合理,是国内最具权威的社会科学、人.
1 第三章 数列 数列的概念 考点 搜索 ●数列的概念 ●数列通项公式的求解方法 ●用函数的观点理解数列 高考 猜想 以递推数列、新情境下的 数列为载体, 重点考查数列的通 项及性质, 是近年来高考的热点, 也是考题难点之所在.
第二节. 广告牌为什么会被风吹倒? 结构的稳定性: 指结构在负载的作用下 维持其原有平衡状态的能力。 它是结构的重要性质之一。
第二节 财政的基本特征 第二节 财政的基本特征 一、财政分配以政府为主体 二、财政分配一般具有强制性 三、财政分配一般具有无偿性 第一章 财政概论 四、财政分配一般具有非营利性.
目录 上页 下页 返回 结束 二、无界函数反常积分的审敛法 * 第五节 反常积分 无穷限的反常积分 无界函数的反常积分 一、无穷限反常积分的审敛法 反常积分的审敛法  函数 第五章 第五章.
§7.2 估计量的评价标准 上一节我们看到,对于总体 X 的同一个 未知参数,由于采用的估计方法不同,可 能会产生多个不同的估计量.这就提出一 个问题,当总体的一个参数存在不同的估 计量时,究竟采用哪一个好呢?或者说怎 样评价一个估计量的统计性能呢?下面给 出几个常用的评价准则. 一.无偏性.
Presentation transcript:

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

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

几种简单 sort 类型

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

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

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

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

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

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

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

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

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

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

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

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

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

共享子对象示例

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

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

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

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

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

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( ); (3) guidosTelephoneNumbers.insert( );

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

对象类型的扩展 GOM 通过 with extension 子句隐式地产生并维护一个特定对 象类型的集合对象类型,用以管理该类型实例化的对象集合。 例 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; … workPieceCuboids.insert(myCuboid); … valuableCuboids.insert( … ); type CuboidSet with extension is … end type Cuboid;

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

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

mat: id 77 value: 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;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

o o2o2 o1o1

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

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

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