资源描述:
《面向对象编程3》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、PL/SQL从入门到精通视频第十七讲:面向对象的编程课程安排对象基础定义对象类型管理对象表管理对象类型对象基础面向对象简介什么是对象类型PL/SQL中对象的组成结构类与对象的示意图对象类型与对象实例PL/SQL中对象的组成结构在PL/SQL中,可以定义如下几种类型的方法:构造方法:该方法类似于Java、C#等语言中的构造函数,用来初始化一个对象类型并返回对象的实例。MEMBER方法:该方法允许对象的实例进行调用,在MEMBER方法中可以访问对象实例的数据,通常称为实例方法或成员方法。STATIC方法:该方法
2、可以直接在对象类型上进行调用,它用于在对象类型上执行全局操作,通常称为静态方法。MAP方法:用于在多个对象间排序的映射方法。ORDER方法:用于在2个对象实例间排序的排序方法。定义对象类型由于对象类型规范和对象类型体的隔离特性,在定义对象类型时,必须先定义对象类型规范,定义语法如下所示:CREATE[ORREPLACE]TYPEtype_name[AUTHID{CURRENT_USER
3、DEFINER}]{{IS
4、AS}OBJECT
5、UNDERsupertype_name}(attribute_nameda
6、tatype[,attribute_namedatatype]...[{MAP
7、ORDER}MEMBERfunction_spec,][{FINAL
8、NOTFINAL}MEMBERfunction_spec,][{INSTANTIABLE
9、NOTINSTANTIABLE}MEMBERfunction_spec,][{MEMBER
10、STATIC}{subprogram_spec
11、call_spec}[,{MEMBER
12、STATIC}{subprogram_spec
13、call_spec}]...])[{FINA
14、L
15、NOTFINAL}][{INSTANTIABLE
16、NOTINSTANTIABLE}];定义对象体[CREATE[ORREPLACE]TYPEBODYtype_name{IS
17、AS}{{MAP
18、ORDER}MEMBERfunction_body;
19、{MEMBER
20、STATIC}{subprogram_body
21、call_spec};}[{MEMBER
22、STATIC}{subprogram_body
23、call_spec};]...END;]定义属性在定义对象类型的属性时,必须要了解一些属性定义的限制:属性的
24、声明必须是在方法的声明以前,也就是说在对象规范中CREATETYPE下面的声明必须最先是属性的定义。属性的数据类型必须是Oracle数据库类型,不能是任何PL/SQL类型或者是PL/SQL自定义类型,但是排除了Oracle中的ROWID、UROWID、LONG、LONGRAW、NCHAR、NCLOB、NVARCHAR2类型。在定义属性时不能对属性应用NOTNULL约束或者是使用DEFAULT指定默认值。在一个对象类型中至少要定义一个属性,但是不能大于1000个属性。定义方法对象方法是在对象规范定义中使用ME
25、MBER或STATIC声明在对象说明部分的子程序,它们是在属性声明之后进行的,MEMBER和STATIC的区别如下所示:MEMBER方法:成员方法是基于对象实例调用的,而不是基于对象类型调用的。STATIC方法:静态方法独立于对象实例,也不能在对象类型主体中引用这个对象的属性。其他对象要点使用SELF关键字定义构造函数为对象提供初始化功能,以避免许多具有特别用途的过程只初始化对象的不同部分,可以通过构造函数进行统一初始化。可以在构造函数中为某些属性提供默认值,这样就能确保属性值的正确性,而不必依赖于调用者所
26、提供的每一个属性值。出于维护性的考虑,在新的属性添加到对象中时,避免要更改调用构造函数的应用程序中的代码,这样可以使已经存在的构造函数调用继续工作。定义MAP和ORDER方法MAP方法:该函数会将对象实例根据一定的调用规则返回DATE、NUMBER、VARCAHR2类型的标量类型,在映射对象类型为标量函数后,就可以通过对标量函数的比较来得到结果了。ORDER方法:ORDER方法只能对2个对象之间进行比较,必须是返回数值型结果的函数,根据结果返回正数、负数或零。该方法只有2个参数,SELF和另一个要比较的对象
27、类型,如果传递该参数为NULL,则返回NULL。使用对象类型声明对象初始化对象调用对象方法对象继承类继承结构方法重载在介绍子程序和包时,讨论过重载的技术,所谓的重载就是定义一个或多个具有同名的函数或过程,但是参数类型名个数不同,由编译器根据调用参数确定执行哪一个子程序。这种重载方式有时候也称为静态多态。在使用对象继承时,也可以使用方法重载。但是这种方法重载不同于过程或包中的重载,这种重使用了动态方法调用的能力,也