Perl 教程 之 Perl 面向对象 4
Perl 面向对象
Perl 中有两种不同地面向对象编程的实现:
一是基于匿名哈希表的方式,每个对象实例的实质就是一个指向匿名哈希表的引用。在这个匿名哈希表中,存储了所有的实例属性。
二是基于数组的方式,在定义一个类的时候,我们将为每一个实例属性创建一个数组,而每一个对象实例的实质就是一个指向这些数组中某一行索引的引用。在这些数组中,存储着所有的实例属性。
面向对象基础概念
面向对象有很多基础概念,这里我们接收三个:对象、类和方法。
对象:对象是对类中数据项的引用。.
类:类是个Perl包,其中含提供对象方法的类。
方法:方法是个Perl子程序,类名是其第一个参数。
Perl 提供了 bless() 函数,bless 是用来构造对象的, 通过 bless 把一个引用和这个类名相关联,返回这个引用就构造出一个对象。
定义方法
Perl类的方法只但是是个Perl子程序而已,也即通常所说的成员函数。
Perl面向对象中Perl的方法定义不提供任何特别语法,但规定方法的第一个参数为对象或其被引用的包。
Perl 没有提供私有变量,但我们可以通过辅助的方式来管理对象数据。
接下来我们定义一个获取名字的方法:
sub getFirstName {
return $self->{_firstName};
}
同样也可以这么写:
sub setFirstName {
my ( $self, $firstName ) = @_;
$self->{_firstName} = $firstName if defined($firstName);
return $self->{_firstName};
}
接下来我们修改 Person.pm 文件的代码,如下所示:
实例
!/usr/bin/perl
package Person;
sub new
{
my $class = shift;
my $self = {
_firstName => shift,
_lastName => shift,
_ssn => shift,
};
# 输出用户信息
print "名字:$self->{_firstName}\n";
print "姓氏:$self->{_lastName}\n";
print "编号:$self->{_ssn}\n";
bless $self, $class;
return $self;
}
sub setFirstName {
my ( $self, $firstName ) = @_;
$self->{_firstName} = $firstName if defined($firstName);
return $self->{_firstName};
}
sub getFirstName {
my( $self ) = @_;
return $self->{_firstName};
}
1;
employee.pl 脚本代码如下:
实例
!/usr/bin/perl
use Person;
$object = new Person( "小明", "王", 23234345);
获取姓名
$firstName = $object->getFirstName();
print "设置前姓名为 : $firstName\n";
使用辅助函数设置姓名
$object->setFirstName( "小强" );
通过辅助函数获取姓名
$firstName = $object->getFirstName();
print "设置后姓名为 : $firstName\n";
执行以上程序后,输出结果为:
$ perl employee.pl
名字:小明
姓氏:王
编号:23234345
设置前姓名为 : 小明
设置后姓名为 : 小强