编辑: 枪械砖家 | 2016-09-20 |
多媒体数据;
嵌套. 可扩展性:反映建模的用户定义数据类型. 性能. 正如前面概括的,Oracle 8通过提供特定的能力如继承、集合、容器和用户定义数据模型 满足了这些需要中的很大一部分.然而,性能是难以决定的,更多地依赖于整个数据库物理 的和逻辑的设计.但是适当地应用分割并配合实验、迭代测试(基准程序)通常伴随性能调 整效果,能够帮助你判断是 Oracle 8使用面向对象还是只用 Oracle 8能够更好地满足你的特定 应用的性能需要. 12.2 面向对象技术 面向对象技术的一个主要问题是在面向对象团体中总是缺少一个标准定义,也就是什么 是对象.相比之下,关系技术实质上对于什么是关系,在关系团体中从没有任何争论. 无论如何,Oracle 8定义对象作为对象类型的实例,一个对象类型作为基本面向对象模型 的组成块通常直接指向真实世界的业务项目.因此,类似于表中的行,对象是数据,而对象 类型是结构,与其他数据结构(例如记录)很相似.在许多其他面向对象语言和系统中, Oracle对象类型等于对象类.一个 Oracle 8对象类型有两部分: 第12章计面向对象的特性计计117 下载 属性―基本的数据类型或其他对象类型,有时称为对象类型的结构化部分. 方法―组成在对象类型上允许的集合操作的 PL/SQL(或C)子程序;
有时称为对象 类型的行为部分. 多态性和继承 在面向对象技术中,其他的重要概念包括继承和多态性.继承是一个对象包括来自另一 个对象类型的属性或方法的能力.方向是从一般到特殊,正像关系型模型中的子类型.一个 例子是,你可能有一个雇员对象类型和一个经理对象类型(雇员类型的子类型) .所有雇员有 名字、地址、社会保险号等等,还有雇佣日期、薪水、雇佣比例等等.所有前面这些代表一 般的或普通的属性,能从雇员对象类型继承到经理对象类型.这意味着有两件事与效率有关:
一、所有雇员(包括经理)的共同属性和方法只需要存储一次;
二、经理对象类型仅需要存 储它自己特有的属性和方法,如signature_authority(属性)或rate_an_employee(方法) .因此 继承可以基于属性(结构)或方法(行为) . 刚刚被描述的情况(经理对象模型从雇员对象中继承属性和方法)称之为单继承.有另 一种类型的继承称之为多继承.单继承是一个子类最多有一个父类的形式;
多继承允许一个 更一般的模型:网络(或格子)模型,也就是子类型能够有多个父类,像在真实世界中的情 况一样.与雇员到经理的单继承对比,考虑也包含官员的多继承方案:雇员→经理←官员. 箭头特指继承方向,从一般(父)到特殊(子) . 多态性像继承一样可以是结构的或行为的.考虑一个没有经理对象类型的雇员对象类型. 雇员只简单地是一个雇员,而不是经理.你如何从一个雇员类型获得经理类型呢?事实上, 这是一个旧的程序结构,在不同的编程语言中有不同的术语,但在这里为了全面将它描述为 变量记录.一个变量记录依赖于被输入的记录类型能够包含一些共同(继承)的数据,也能 包含一些附加的域.这种情况对非规范化表是模棱两可的,可能同时包含经理和雇员.方法 是怎么样的?与属性类似,方法是否可见依赖于被具体说明的对象(雇员或经理) . 刚才描述了常见的结构多态性是什么.那么行为多态性是什么?在面向对象中,当一种 方法被调用时,称为向它发送了一条消息(进行执行) .当你向方法发送一条消息时,它可能 有不同的执行,取决于它当前属于的对象类型或被影响的实例.例如,如果你调用一个 hire方法,它构造(创建)一个新的职员或经理.尽管你调用的是同一个 hire方法,这里实际上有构 造一个实例(实例化一个对象)的两种不同实现:通过为雇员填入共同雇员属性,或通过为 经理填入共同雇员属性和特定的经理属性.面向对象系统能够通过简单 IF/THEN逻辑在单个 程序内或通过定向化实现这个变化的程序,定向是 IF/THEN逻辑加一个对所有可能程序之外 的一个必要程序的调用.多态性也称之为重载.稍后捆绑(运行时捆绑)使多态性在现代语 言和系统中成为可能.在面向对象中,每一个对象类型总是至少有一种方法―它自身的构 造方法. 另外一个重要的概念是对象 ID(OID) ,它表示一个在对象创建以后唯一代表该对象的统 一标识符.这意味着它在所有的,甚至在 Oracle之外的面向对象系统和语言中是唯一的.在Oracle