Perl 教程 之 Perl 面向对象 6

简介: Perl 面向对象编程有两种实现:匿名哈希表和数组方式。教程中展示了基于哈希表的继承示例,Employee 类继承并重写了 Person 类的方法。在Employee中,`new`构造函数被重写,添加了新属性,`getFirstName`被重写,还新增了`setLastName`和`getLastName`方法。在主程序中,创建Employee对象并调用这些方法,显示了方法重写和辅助函数的使用效果。

Perl 教程 之 Perl 面向对象 6

Perl 面向对象

Perl 中有两种不同地面向对象编程的实现:

一是基于匿名哈希表的方式,每个对象实例的实质就是一个指向匿名哈希表的引用。在这个匿名哈希表中,存储了所有的实例属性。

二是基于数组的方式,在定义一个类的时候,我们将为每一个实例属性创建一个数组,而每一个对象实例的实质就是一个指向这些数组中某一行索引的引用。在这些数组中,存储着所有的实例属性。

方法重写

上面实例中,Employee 类继承了 Person 类,但如果 Person 类的方法无法满足需求,就需要对其方法进行重写。

接下来我们在 Employee 类中添加一些新方法,并重写了 Person 类的方法:

实例

!/usr/bin/perl

package Employee;
use Person;
use strict;
our @ISA = qw(Person); # 从 Person 继承

重写构造函数

sub new {
my ($class) = @_;

# 调用父类的构造函数
my $self = $class->SUPER::new( $_[1], $_[2], $_[3] );
# 添加更多属性
$self->{_id}   = undef;
$self->{_title} = undef;
bless $self, $class;
return $self;

}

重写方法

sub getFirstName {
my( $self ) = @_;

# 这是子类函数
print "这是子类函数\n";
return $self->{_firstName};

}

添加方法

sub setLastName{
my ( $self, $lastName ) = @_;
$self->{_lastName} = $lastName if defined($lastName);
return $self->{_lastName};
}

sub getLastName {
my( $self ) = @_;
return $self->{_lastName};
}

1;
我们在 main.pl 文件中输入以下代码,并执行:

实例

!/usr/bin/perl

use Employee;

$object = new Employee( "小明", "王", 23234345);

获取姓名,使用修改后的构造函数

$firstName = $object->getFirstName();

print "设置前姓名为 : $firstName\n";

使用辅助函数设置姓名

$object->setFirstName( "小强" );

通过辅助函数获取姓名

$firstName = $object->getFirstName();
print "设置后姓名为 : $firstName\n";
执行以上程序后,输出结果为:

$ perl main.pl
名字:小明
姓氏:王
编号:23234345
这是子类函数
设置前姓名为 : 小明
这是子类函数
设置后姓名为 : 小强

目录
相关文章
|
30天前
|
存储 索引 Perl
Perl 教程 之 Perl 面向对象 5
Perl的面向对象编程涉及匿名哈希表或数组来存储对象属性。类通过`@ISA`数组实现继承,如Employee继承Person。在Employee.pm中声明`@ISA = qw(Person)`。在main.pl中,创建Employee对象并调用方法,显示继承功能。程序输出显示姓名的变化。
20 0
|
25天前
|
机器学习/深度学习 移动开发 Go
Perl 教程 之 Perl CGI编程 5
Perl CGI教程讲解如何通过Perl实现文件下载。设置HTTP Header为"Content-Type:application/octet-stream; name=\"FileName\"和"Content-Disposition: attachment; filename=\"FileName\",然后打开文件并逐块读取内容输出,实现文件下载功能。
10 1
|
29天前
|
存储 Java 索引
Perl 教程 之 Perl 面向对象 7
在Perl OOP中,对象基于匿名哈希或数组实现,存储实例属性。当调用不存在的方法时,Perl查找AUTOLOAD来动态处理。析构函数DESTROY在对象销毁时自动调用,允许执行清理操作。不能修改传递给DESTROY的只读引用,但可写入对象本身。析构器可调用基类或其他类的DESTROY,但通常不手动调用。对象释放时,其所含对象也会自动销毁。
9 1
|
29天前
|
存储 索引 Perl
Perl 教程 之 Perl 面向对象 8
Perl面向对象教程展示了两种实现:通过匿名哈希表或数组存储对象属性。示例中,`MyClass`与子类`MySubClass`被定义,后者继承并扩展了父类方法。在主程序中,创建并调用了对象,演示了构造、方法调用、继承及自动调用析构函数的过程。
17 1
|
30天前
|
存储 索引 Perl
Perl 教程 之 Perl 面向对象 6
Perl OOP教程展示了两种对象实现:基于匿名哈希和数组。在继承Person类的Employee类中,`new`方法被重写以添加额外属性,`getFirstName`被重写,且`setLastName`和`getLastName`方法被添加。当运行代码时,显示了方法重写和辅助函数的效果。
16 1
|
30天前
|
存储 索引 Perl
Perl 教程 之 Perl 面向对象 4
Perl的面向对象涉及两种对象实现:匿名哈希表和数组。对象是类的实例,类是包含方法的Perl包。方法是接收对象引用作为首参的子程序。`bless()`函数用于构造对象。以下是一个Person类的例子,包含`new`构造器、`getFirstName`和`setFirstName`方法。在`employee.pl`脚本中,创建Person对象并演示了方法的使用。输出显示了姓名的设置和获取过程。
16 2
|
1月前
|
存储 索引 Perl
Perl 教程 之 Perl 面向对象 2
Perl的面向对象编程涉及两种实现:匿名哈希表引用和数组引用。对象是类数据的引用,类是包含方法的Perl包。方法是接收类名作为首参的子程序。`bless()`函数用于构造对象。类定义为包,提供独立命名空间,文件通常以`.pm`结尾。例如: ```markdown .package Person # 类代码... .end ``` 简而言之,Perl的OOP基于引用,类是包,方法是子程序,`bless`构造对象,类定义创建命名空间。
15 2
|
1月前
|
存储 索引 Perl
Perl 教程 之 Perl 面向对象 3
Perl的面向对象编程涉及两种实现:匿名哈希表引用和数组引用。对象是类(Perl包)中数据项的引用,方法是接收类名或对象作首参的子程序。
14 3
|
1月前
|
存储 索引 Perl
Perl 教程 之 Perl 面向对象 1
Perl的面向对象编程涉及两种实现:使用匿名哈希表存储对象属性的引用,或使用数组为每个属性创建行索引。对象是类的实例,类是包含方法的Perl包。方法是接受对象或类名作为首参的子程序。`bless()`函数用于构建对象,将引用与类关联。
13 3
|
23天前
|
移动开发 数据安全/隐私保护 Perl
Perl 教程 之 Perl CGI编程 8
Perl CGI编程教程讲解了如何通过CGI接口与HTTP服务器交互。文章介绍了CGI的概念,强调使用POST方法传递敏感数据的安全性。示例脚本`test.cgi`演示了处理POST表单数据的方法,读取并显示输入的站点名称和URL。同时,给出了一个HTML表单`test.html`,用于通过POST方法向`test.cgi`提交数据。
12 2

相关实验场景

更多