简单的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');
阅读(1912) | 评论(1) | 转发(0) |