面向对象编程

DolphinDB 在 DolphinScript 的基础上引入了类(class),从而实现了面向对象的编程(OOP)。面向对象编程是非常重要的编程范式,具有模块化和抽象性、代码复用、可维护性等有点。它利用继承、多态、封装等特性,有效提高了代码的可读性和可维护性,降低了复杂业务逻辑的代码维护成本。

类定义了对象的属性(成员变量),构造方法和行为(成员方法)。在深入介绍类的定义和使用之前,让我们先了解 DolphinDB 对类的一些约定:

  1. 类的命名约定:类名不能以数字开头,不能包含空格,或除了下划线(_)外的其他特殊字符。

  2. 在调用方法之前,该方法必须至少在代码中先进行声明或定义。同时,且成员变量必须在方法之前声明。

OOP 在特定场景中提供了独特的优势,特别是以下几个场景:

  • 开发响应式状态引擎算子:OOP 范式能够简化算子的开发流程,降低成本。传统方法中,开发者需使用 genericIterateState 等复杂的高阶函数,或 C++ 插件来编写算子。而 OOP 的引入,将使算子代码更加直观易懂。具体可查看示例 1

  • 在复杂事件处理(CEP)中使用 OOP 表示事件:采用 OOP 来构建事件类型,可以替代复杂字典(dict)结构的构造方式。这种方法不仅使得事件的定义和处理逻辑更加直观,而且与 Apama 的 EPL 语言相似,进一步提高了开发者编写 CEP 应用程序的效率。具体可查看示例 2

语法
class ClassName{
    // 类的属性(成员变量)
    attribute1 :: dataType
    attribute2 :: dataType
    
    // 类的构造方法,和类名同名的构造函数,有且只有一个
    //参数名不能和属性名相同,否则会覆盖属性名
    def ClassName(parameter1, parameter2){
        attribute1 = parameter1
        attribute1 = parameter2
    }
    // 类的方法(成员方法)
    def method1(){
        // 方法的实现
    }
    def method2(parameter){}
        // 方法的实现
    }
其中,attribute1, attribute2 表示成员变量名;dataType 表示变量的类型;parameter1, parameter2 表示构造函数的参数。
注意事项
  • 暂不支持 JIT。

  • 暂不支持析构函数。