LISP - 面向对象编程
-
简述
Common LISP 比面向对象编程的进步早了几十年。然而,它的面向对象是在后来的阶段被纳入其中的。 -
定义类
这defclass宏允许创建用户定义的类。它将类建立为数据类型。它具有以下语法 -槽是存储数据或字段的变量。插槽描述的形式为 (slot-name slot-option*),其中每个选项都是一个关键字,后跟名称、表达式和其他选项。最常用的插槽选项是 --
:accessor函数名
-
:initform表达
-
:initarg象征
例如,让我们定义一个 Box 类,具有三个插槽长度、宽度和高度。 -
-
提供对插槽的访问和读/写控制
除非插槽具有可以访问、读取或写入的值,否则类是毫无用处的。您可以指定accessors在定义类时为每个插槽。例如,以我们的 Box 类为例 -也可以单独指定accessor用于读取和写入插槽的名称。 -
创建一个类的实例
泛型函数make-instance创建并返回类的新实例。它具有以下语法 -例子
让我们创建一个 Box 类,具有三个槽,长度、宽度和高度。我们将使用三个槽访问器来设置这些字段中的值。创建一个名为 main.lisp 的新源代码文件,并在其中键入以下代码。当您执行代码时,它返回以下结果 - -
定义类方法
这defmethod宏允许您在类中定义一个方法。下面的示例扩展了我们的 Box 类以包含一个名为 volume 的方法。创建一个名为 main.lisp 的新源代码文件,并在其中键入以下代码。当您执行代码时,它返回以下结果 - -
遗产
LISP 允许您根据另一个对象来定义一个对象。这就是所谓的inheritance.您可以通过添加新的或不同的功能来创建派生类。派生类继承父类的功能。以下示例解释了这一点 -例子
创建一个名为 main.lisp 的新源代码文件,并在其中键入以下代码。当您执行代码时,它返回以下结果 -