Perl 对象概念2024 年 8 月 29 日 | 5 分钟阅读 Perl 提供了一些工具来构建面向对象的系统。 Perl 面向对象的概念基于引用、匿名数组和哈希。 Perl 基本对象一个 对象 只是一个数据结构,它知道它所属的类名。 它以标量变量中的引用形式存储。 同一个标量变量可以在不同的类中保存不同的对象,因为它只保存对对象的引用。 一个 类 只是一个包。 它包含对对象进行操作的方法(创建和操作对象)。 一个 方法 是一个子例程,它期望一个对象引用或一个包名作为第一个参数。 Perl 类声明要创建一个类,我们需要在 Perl 中创建一个包。 包包含可以重用的变量和子例程。 由于每个类都是一个包,因此它有自己的命名空间,其中包含符号名称。 类是使用 package 关键字创建的命名空间。 它通常在与类同名的模块中实现。 例如,My::File 将在文件 File.pm 中实现,位置位于目录 My 中,内容如下。 这里的 1 在末尾表示文件已成功加载。 包的作用域扩展到文件末尾或直到遇到另一个 package 关键字。 Perl 构造函数一个代码需要一个构造函数才能成为一个功能齐全的类。 通常,构造函数被实现为 new 方法。 Perl 实例/对象实例或对象通常是对哈希的祝福引用。 祝福某物意味着我们正在祝福变量引用的事物。 输出 Class not blessed 在上面的程序中,当我们调用变量上的“bless”时,我们正在祝福变量引用的数据结构。 引用没有被祝福。 因此,当我们第二次调用 blessed( $Christian ) 时,它返回 false。 因为 $Christian 没有存储对对象的引用。 Perl 析构函数Perl 析构函数用于在对象不再需要时清理分配给对象的内存。 当对象超出范围时,它会在 Perl 中自动完成。 因此通常不在 Perl 中实现。 要实现析构函数,有一个名为 DESTROY 的函数。 它在对象被销毁并且内存被 Perl 回收之前被调用。 Perl 定义方法在 Perl 中定义方法没有特殊的语法。 它只是一个使用“sub”关键字声明的常规子例程。 一个方法期望一个对象或一个类名作为它的第一个参数。 要调用一个方法,使用 -> 操作符。 要将一个方法作为对象调用,使用以下语法 左侧是对象名称,右侧是方法名称。 在调用方法时,左侧的对象作为第一个参数传递到右侧。 示例 在这个例子中,我们将设置一个辅助方法和一个辅助函数来设置学生的姓名和排名。 步骤 1 在 hw.pl 文件中,定义一个辅助方法 studentName 来获取学生的姓名。 定义一个辅助函数 studentRank 来获取学生的排名。 步骤 2 在 student.pm 文件中,编写 Student 包和辅助函数。 步骤 3 在 person.pl 文件中,我们将使用 Student 对象来获取输出。 输出 Student's name is Ana Student's rank is 9th Name set using constructor is : Ana Name set using helper is : Anastasia Perl 继承继承意味着子类将继承父类的属性和方法。 因此,要重用代码,您可以简单地继承它。 在 Perl 中,@ISA 数组定义继承。 在使用继承时,应考虑以下几点
也可以使用 parent 指令声明继承,该指令取代了旧的 base 指令。 示例 我们的脚本加载一个模块,调用它的构造函数,然后调用两个方法。 使用以下脚本创建 hw.pl 文件。 在这里,模块本身使用 parent 指令声明其继承。 输出 This is Hello message from Module1 This is Bye message from Module2 使用以下脚本创建 Module1.pm 文件。 它声明了我们从中继承构造函数和另一个方法的模块。 使用以下脚本创建 Module2.pm 文件。 从 Module1 调用 new 方法时,Perl 将在 Module1 中找不到它。 它将在继承链中的下一个模块 Module2 中查找它。 因此,将从 Module2 调用 new 方法。 Perl 多态多态意味着基类中定义的方法将覆盖父类中定义的方法。 它在不重新编程整个类的情况下附加现有类的功能。 示例 输出 Inside B::B1 在类 B 中定义的 sub A1 覆盖了从类 A 继承的 sub A1。 下一主题Perl 日期 & 时间 |
我们请求您订阅我们的新闻通讯以获取最新更新。