perl面向对象实例.docxVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

首先让我们来看看有关Perl面向对象编程的三个基本定义:

1.?一个“对象”是指一个“有办法知道它是属于哪个类”的简单引用。(对象就是引用变量)

2.?一个“类”是指一个“有办法给属于它的对象提供一些方法”的简单的包。(类就是包)

3.?一个“方法”是指一个“接受一个对象或者类名称作为第一个参数”的简单的子程序。(类的方法就是第一个参数为类名或对象的方法)

一个类只是一个简单的包

和C++不同,Perl并不为类定义提供任何特殊语法。实际上类只是一个包而已。你可以把一个包当作一个类用,并且把包里的函数当作类的方法来用。不过,有一个特殊的数组,叫做@ISA,它说明了“当Perl在当前包中找不到想要的方法时,应当继续从哪儿去找”。这就是Perl实现“继承”的关键。@ISA中的每个元素都是一个别的包的名字。当类找不到方法时,它会从@ISA数组中依次寻找(深度优先)。类通过访问@ISA来知道哪些类是它的基类。

所有的类都有一个隐含的基类(祖先类):"UNIVERSAL"。"UNIVERSAL"类为它的子类提供几个通用的类方法。它提供以下几个方法:isa,can。其中isa用来判断变量是否从某个类继承而来,can后面的参数则是一个方法,判断这个方法是否在这个类或者基类中被定义。另外你可以给UNIVERSAL添加新的方法。一旦给它添加了新的方法,所有的class都可以调用。

给UNIBERSAL添加新方法的例子:

subUNIVERSAL::log()

{

my($self,$msg)=@_;

print"$self:$msg\n";

}

这样就可以在每个类中调用这个函数,并且log之前会把类名打印出来。

对象仅仅只是引用

Perl中的构造器只是一个子程序,该子程序返回一个被bless处理的引用,这个经过bless处理的引用就是人们所说的“对象”,而bless的作用就是用来说明这个对象是隶属于哪个“类”。

最简单的构造器:

packageCritter;

subnew{bless{}}

如果你希望用户不仅能够用"CLASS->new()"这种形式来调用你的构造函数,还能够以"$obj->new()"这样的形式来调用的话,那么就这么做:

subnew{

my$this=shift;

my$class=ref($this)||$this;

my$self={};

bless$self,$class;

$self->initialize();

return$self;

}

一个方法就是一个简单的子程序

方法把它被调用时的对象或者类名称当作它的第一个参数。有两种不同的调用方法的途径,分别成为“调用类方法”和“调用实例方法”。类方法把类名当作第一个参数。它提供针对类的功能,而不是针对某个具体的对象的功能。构造器通常是一个类方法。大多数类方法简单地忽略第一个参数,因为方法知道自己处在什么类里面,也不关心它是通过什么类来调用的。

Perl提供了两种不同的形式去调用一个方法。最简单的形式是采用箭头符号:

?my$fred=Critter->find("Fred");

???????$fred->display("Height","Weight");

你可以早就熟悉了引用的"->"操作符。事实上,因为上面的$fred是一个指向了对象的引用,因此你也可以把箭头操作符理解为另外一种形式的解引用。

出现在箭头左边的引用或者类名,将作为第一个参数传递给箭头右边的方法。所以上面的代码就分别相当于这样:

??my$fred=Critter::find("Critter","Fred");

???????Critter::display($fred,"Height","Weight");

简单示例

1、说明

本程序演示了在Perl中如何进行面向对象编程:演示程序包含两个文件:person.pl和person.pm,把person.pl和person.pm放在当前目录下,运行"perlperson.pl"即可以看到结果。person.pm定义了名为person的类。person.pl中创建了person类的实例,并测试了person的成员方法。

2、person.pm的内容

#!/usr/bin/perl-w

packageperson;

usestrict;

subnew{

my$class=shift();

print("CLASS=$class\n");

my$self={};

$self->{"name"}=shift();

$self->{"sex"}=shift();

bles

文档评论(0)

guanyulong + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档