本章讲述如何在SPL中使用面向对象的编程技术。
正如在Java和C++等编程语言中所了解的,面向对象的编程着重于对象的概念。对象是现实世界实体的表示形式,如个人、地点或事物。对特定对象(如个人)的统一描述或定义称为对象类型。特定的人(如“Joe”或“Sally”)就是所谓的对象类型的对象“个人”,相当于对象类型的实例“个人”,或简单地说就是“个人对象”。
注意事项
本文档中在此之前所使用的术语“数据库对象”和“对象”不应与本章中使用的对象类型和对象相混淆。这些术语以前的用法与可在数据库中创建的实体(如表、视图、索引、用户等)有关。在本章的上下文中,对象类型和对象是指SPL编程语言支持的特定数据结构,用于实现面向对象的概念。
在Oracle中,抽象数据类型 (ADT) 用于描述 PL/SQL 中的对象类型。对象类型的SPL实现旨在与Oracle抽象数据类型兼容。
PolarDB PostgreSQL版(兼容Oracle)还没有实现对面向对象的编程语言的某些功能的支持。本章仅介绍已实现的一些功能。
概念
对象类型是对某一实例的描述或定义。对象类型的定义分为两部分:
属性:描述对象实例的特定特点的字段。对于个人对象,属性示例可能包括姓名、地址、性别、出生日期、身高、体重、眼睛颜色、职业等。
方法:对对象执行某种类型的功能或操作或与对象相关的程序。对于个人对象,方法示例可能包括计算个人年龄、显示个人特征、更改分配给个人特征的值,等等。
属性
每个对象类型必须至少包含一个属性。属性的数据类型可以是以下任意一种:
基本数据类型,如NUMBER、VARCHAR2等。
其他对象类型。
全局定义的集合类型(由
CREATE TYPE
命令创建),如嵌套表或动态数组。
属性在最初创建对象实例时获取其初始值(可能是空值)。每个对象实例都有其自己的一组属性值。
方法
方法是对象类型中定义的SPL存储过程或函数。方法可分为三种常规类型:
成员方法:在对象实例的上下文中运行的存储过程或函数。成员方法可访问它们运行所在的对象实例的属性,并且可更改这些属性。
静态方法:独立于任何特定对象实例运行的存储过程或函数。静态方法无法访问并且无法改变对象实例的属性。
构造函数方法:用于创建对象类型的实例的函数。默认构造函数方法始终在定义对象类型时提供。
重载方法
在对象类型中,允许定义两个或多个具有相同类型(这是存储过程或函数)但具有不同特征的同名方法。此类方法称为重载方法。
方法的特征由形参的数量、数据类型及其顺序组成。