【基础学习】Perl中面向对象的思维

【基础学习】Perl中面向对象的思维,第1张

概述文章转载自:http://www.cnblogs.com/itech/archive/2012/08/21/2649580.html 一个对象只不过是一个引用,一个类只是一个包,一个方法只是一个子过程 一个类只是一个简单的包: 和 C++ 不同,Perl 并不为类定义提供任何特殊语法。实际上类只是一个包而已。你可以把一个包当作一个类用,并且把包里的函数当作类的方法来用。不过,有一个特殊的数组,叫做

文章转载自:http://www.cnblogs.com/itech/archive/2012/08/21/2649580.HTML

一个对象只不过是一个引用,一个类只是一个包,一个方法只是一个子过程


一个类只是一个简单的包:

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

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

给UNIBERSAL添加新方法的例子: sub UNIVERSAL::log() { my($self,$msg)=@_; print "$self: $msg\n"; } 这样就可以在每个类中调用这个函数,并且log之前会把类名打印出来。

一个对象只不过是一个引用

Perl中的构造器只是一个子程序,该子程序返回一个被bless处理的引用,这个经过 bless 处理的引用就是人们所说的“对象”,而 bless 的作用就是用来说明这个对象是隶属于哪个“类”。 最简单的构造器: package Critter; sub new { bless {} } 如果你希望用户不仅能够用 "CLASS->new()" 这种形式来调用你的构造函数,还能够以 "$obj->new()" 这样的形式来调用的话,那么就这么做:         sub new {             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",sans-serif; Font-size:14px; line-height:21px">
简单示例1、说明本程序演示了在Perl中如何进行面向对象编程:演示程序包含两个文件:person.pl 和 person.pm,把 person.pl 和 person.pm 放在当前目录下,运行"perl person.pl"即可以看到结果。person.pm定义了名为person的类。person.pl中创建了person类的实例,并测试了person的成员方法。2、person.pm的内容#!/usr/bin/perl -wpackage person;use strict;sub new {my $class = shift();print("CLASS = $class\n");my $self = {}; $self->{"name"} = shift();$self->{"sex"} = shift();bless $self,$class;return $self; }sub getname {my ($self) = @_;return $self->{"name"};}sub setname {my ($self,$name) = @_;$self->{"name"} = $name;}sub getSex {my ($self) = @_;return $self->{"sex"};}sub setSex {my ($self,$sex) = @_;$self->{"sex"} = $sex;}1;3、person.pl的内容#!/usr/bin/perl -wuse strict;use person;sub main(){my $tom = person->new("Tom","male");my $kiss = person->new("Kiss","female");my @persons = ($tom,$kiss);for my $p (@persons) {printf("name: %s\tSEX: %s\n",$p->getname(),$p->getSex());}}&main();4、程序运行结果CLASS = personCLASS = personname: Tom SEX: malename: Kiss SEX: female
总结

以上是内存溢出为你收集整理的【基础学习】Perl中面向对象的思维全部内容,希望文章能够帮你解决【基础学习】Perl中面向对象的思维所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1276215.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存