gpt4 book ai didi

perl面向对象实例

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章perl面向对象实例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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

1.  一个“对象”是指一个“有办法知道它是属于哪个类”的简单引用。(对象就是引用变量) 2.  一个“类”是指一个“有办法给属于它的对象提供一些方法”的简单的包。(类就是包) 3.  一个“方法”是指一个“接受一个对象或者类名称作为第一个参数”的简单的子程序。(类的方法就是第一个参数为类名或对象的方法) 。

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

和 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", "Weight");

  。

简单示例 。

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 -w package 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; } 。

  。

3、person.pl的内容 。

  。

复制代码 代码如下:

#!/usr/bin/perl -w use 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 = person
CLASS = person
NAME: Tom SEX: male
NAME: Kiss SEX: female

最后此篇关于perl面向对象实例的文章就讲到这里了,如果你想了解更多关于perl面向对象实例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com