本章讲述如何在SPL中使用面向对象的编程技术。

正如在 Java 和 C++ 等编程语言中所了解的,面向对象的编程着重于对象的概念。对象是现实世界实体的表示形式,如个人、地点或事物。对特定对象(如个人)的统一描述或定义称为对象类型。特定的人(如“Joe”或“Sally”)就是所谓的对象类型的对象“个人”,相当于对象类型的实例“个人”,或简单地说就是“个人对象”。

注意事项

本文档中在此之前所使用的术语“数据库对象”和“对象”不应与本章中使用的对象类型和对象相混淆。这些术语以前的用法与可在数据库中创建的实体(如表、视图、索引、用户等)有关。在本章的上下文中,对象类型和对象是指SPL编程语言支持的特定数据结构,用于实现面向对象的概念。

在Oracle中,抽象数据类型 (ADT) 用于描述 PL/SQL 中的对象类型。对象类型的SPL实现旨在与Oracle抽象数据类型兼容。

PolarDB兼容Oracle数据库还没有实现对面向对象的编程语言的某些功能的支持。本章仅介绍已实现的一些功能。

概念

对象类型是对某一实例的描述或定义。对象类型的定义分为两部分:

  • 属性 – 描述对象实例的特定特点的字段。对于个人对象,属性示例可能包括姓名、地址、性别、出生日期、身高、体重、眼睛颜色、职业等
  • 方法 – 对对象执行某种类型的功能或操作或与对象相关的程序。对于个人对象,方法示例可能包括计算个人年龄、显示个人特征、更改分配给个人特征的值,等等。

属性

每个对象类型必须至少包含一个属性。属性的数据类型可以是以下任意一种:

  • 基本数据类型,如 NUMBER、VARCHAR2 等。
  • 其他对象类型。
  • 全局定义的集合类型(由 CREATETYPE 命令创建),如嵌套表或动态数组。

属性在最初创建对象实例时获取其初始值(可能是空值)。每个对象实例都有其自己的一组属性值。

方法

方法是对象类型中定义的 SPL 存储过程或函数。方法可分为三种常规类型:

  • 成员方法 – 在对象实例的上下文中运行的存储过程或函数。成员方法可访问它们运行所在的对象实例的属性,并且可更改这些属性。
  • 静态方法 – 独立于任何特定对象实例运行的存储过程或函数。静态方法无法访问并且无法改变对象实例的属性。
  • 构造函数方法 – 用于创建对象类型的实例的函数。默认构造函数方法始终在定义对象类型时提供。

重载方法

在对象类型中,允许定义两个或多个具有相同类型(这是存储过程或函数)但具有不同特征的同名方法。此类方法称为重载方法。

方法的特征由形参的数量、数据类型及其顺序组成。