perl 面向对象 笔记

简单的OOL
在Perl中方法有二种,
实例方法:用于特定对象的方法,实现执行某个功能.
类方法:用于整个类的方法
类的多态性:总是某个类型的特定对象选择最合适的行为的特性叫多态性
构造器: 类中生成对象实例的方法叫构造器

简单的讲perl的对象
对象只不过是一个引用….嗯,引用物
类就是包
方法就是子例程:方法和普通子例程的区别是,它们的包在什么时候被解析,子例程的包是程序开始运行之前,编译时就解析的.但方法是在调用时才解析

方法调用
方法是对象的核心,提供了一个抽象层,不是直接访问对象中的一块数据区,而是调用实例的方法.只是,不在是直接调用包中的子例程,而是调用一个类的方法.
调用者(invocant):对类来讲,调用者是包的名字,对实例方法来讲,调用者是指定对象的引用.换句话讲,调用者就是调用方法的那种东西,有的文章叫他为代理(agent)施动者(actor).
INVOCANT->METHOD(LIST)
在调用时先定位由INVOCANT和METHOD名字的类共同确定的子例程.然后调用这个子例程,并将INVOCANT传递给它作为第一个参数. 这时,如果INVOCANT是一个引用,我们就讲这是以实例方法调用的,但当它是一个包名字时,就看看成一个类方法.
构造对象:
package Critter;
sub spawn {
    my $self={}; #指向一个空的匿名散列
    bless $self, "Critter"; #给散列作成一个Critter对象
    return $self; #返回新生成的Critter
}
$pet = Critter->spawn; #创建


 
创建类:

方法一:


sub new {
my $invocant = shift; #类名称
my $class = ref($invocant) || $invocant; #判断是不是引用
my $self = { #对象属性
color => "bay",
legs => 4,
owner => undef,
@_, #剩下的参数(hash)变成属性,写在最后面有相同的参数时,正好可以磛盖以前的属性
};
return bless $self,$class; #new方法一般只return bless对象属性到所有方法
}



$stallion = Horse->new(color => "black"); #调用类



方法二:


use vars qw(@ISA); # 这一句用于 inheritance,也可以省略
sub new {
my ($class, $args) = @_;
my $self = bless {
'fname' => $first,
'lname' => $last,
'id' => $id,
'mother' => $mother,
'father' => $father,
}, $class;
return $self;
}
sub father {
my ($self, $args) = @_;
return $self->{'father'};
}
sub id { return shift->{'id'} }
1;




类继承

package Horse;
our @ISA = "Critter"; #当在Horse中调用没有时,就会到Critter中查找相关的方法.


继承例子:

PM file:


package M1;


sub new {
    my $class = shift;
    $class = ref($class) || $class;
    my $self = {
        "name" => "jophy",
        "race" => "unknown",
        "weight" => "",
        @_,
    };
    return bless $self, $class;
}


sub get_name {
    my $self = shift;
    return $self->{name};
}
1;


package M2;
our @ISA = qw/M1/; #继承package M1

sub get_race {
my $class = shift;
$class = ref($class) || $class;
my $self = {};
bless $self, $class;
my ($arg) = @_;


}
1;



perl script:

use pmfile; #pm文件名

my $oo = M2->new();
print $oo->get_name('12');





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值