- 1、本文档共87页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第05章表类型
第五章表类型(教材第9章) 什么是对象类型? 对象类型是一个用户自定义复合类型,它封装了数据结构和操作这个数据结构的函数和过程。 数据结构中的变量称为属性,函数和过程称为方法。 通常,我们认为对象(如人、车、银行账户)都是有着属性和行为的。例如一个婴儿有性别、年龄和体重这些属性,行为有吃、喝、睡等。 对象类型能够让我们把这些内容抽象出来并在应用程序中使用。 使用CREATE TYPE语句创建对象类型的时候,实际上是创建了真实世界中某个对象的抽象模板。 模板只指定了在程序中能用到的属性和行为。比如一个雇员有很多属性,但通常只有他的一部分信息是我们的应用程序所需要的。 编写一个为雇员分发奖金的程序 因为并不是雇员的所有属性都能用于解决这个问题,所以,只需设计一个抽象的雇员,拥有与解决问题相关的属性即可:姓名、ID号、部门、职称、工资和级别。然后,设计一些具体的操作方法,例如更改雇员的级别。 下一步就是定义用于数据表现的变量(属性)和用于执行操作的子程序集(方法)。最后,我们把属性和方法封装到对象类型中去。 对象的属性是公有的(对客户端程序可见)。但是,设计良好的程序是不应该直接操作这些属性的,我们应该为这些操作编写相应的方法。这样,雇员数据就能保存在一个合适的状态。 在运行时,我们可以建立抽象雇员的实例(通常称为对象),然后为它的属性赋值。我们可以按照我们的需求创建任意多个实例。每个对象都有姓名、编号、职别等。 为什么使用对象类型 ? 对象类型能把大的系统划分为多个逻辑实体,简化系统复杂度。可以创建模块化、可维护、可重用的组件。也能让不同小组的程序员并行开发软件组件。 对象类型靠封装数据的操作来把数据维护代码从SQL脚本中分离出来,并把PL/SQL块封装到方法里。使用对象方法可以避免很多在数据访问时带来的负面影响,同时,对象类型隐藏实现细节,更新细节内容时不必修改客户端程序。 对象类型可以为现实数据建模。现实世界中的复杂实体和关系都可以直接映射到对象类型中。并且,对象类型还可以直接映射到面向对象语言(如Java和C++)的类中。 对象类型的结构 与包相同,对象类型也有两部分:说明和体。 说明部分是应用程序接口;它声明了数据结构(属性集合)和所需的操作(方法)。 方法体部分是对已声明方法的实现。 客户端程序要使用到的所有方法都在说明中声明。 可以把对象说明想象成一个可选的接口,把对象体想象成一个黒盒。可以在不改变说明部分的前提下调试,增强或替换对象体,并且不会对客户端程序造成影响。 在一个对象说明中,所有的属性都必须声明在方法之前。只有子程序的声明才需要实现。所以,如果一个对象类型的说明只声明了属性,那么对象类型的体就没有必要了。 不能在对象体中声明属性。对象说明中的声明都是公有的。 例:一个复数的对象类型,有实数部分和虚数部分,并有几个与复数操作相关的方法。 CREATE or replace TYPE complex AS OBJECT( rpart REAL, ipart REAL, MEMBER FUNCTION plus(x complex) RETURN complex, MEMBER FUNCTION LESS(x complex) RETURN complex, MEMBER FUNCTION times(x complex) RETURN complex, MEMBER FUNCTION divby(x complex) RETURN complex ) CREATE or replace TYPE BODY complex AS MEMBER FUNCTION plus(x complex) RETURN complex IS BEGIN RETURN complex(rpart + x.rpart, ipart + x.ipart); END plus; MEMBER FUNCTION LESS(x complex) RETURN complex IS BEGIN RETURN complex(rpart - x.rpart, ipart - x.ipart); END LESS; MEMBER FUNCTION times(x complex) RETURN complex IS BEGIN RETURN complex(rpart * x.rpart - ipart * x.ipart, rpart * x.ipart + ipart * x.rpart); END times; MEMBER FUNCTION divby(x complex) RETURN complex IS
文档评论(0)