关于perl OOP编程。请不吝赐教

关于perl OOP编程。请不吝赐教

高手请出手。

本人,刚刚接触PERL。但是感觉语言都是相通的,没有感觉到什么压力。但是最近在学习PERL 的时候发现OOP ,对于我很难理解。我认为语言都是用写,人用的,所以也不会超出人的理解能力。但是OOP 我实在难理解。

请高手,大概说一下,形象些,最好。

其次是大概的结构。

package Bug; # 第一步,建立一个 package
use strict;
sub new  # 建立 subroutine
{
    my ($class) = @_;                     ·····························????
    my $objref = {};                       ·····························????
    #其他的一些代码
    bless $objref, $class; #用 bless 语法产生了一个 object    ·················????
}

sub print_me # 又建立了一个subroutine
{
    my ($self) = @_;
    #实现功能的一些代码
}





#! /usr/bin/perl -w
use Bug;
use strict;

my $object = Bug->new(@args);  #利用 @args 中的数据创立一个对象,它属于 Bug 这个 class
$object->print_me();  #调用Bug class 中定义的print_me()函数


查了些东西还是不明白。 先谢谢高手了。
【但是感觉语言都是相通的,没有感觉到什么压力】
你轻敌了。重新去看入门部分吧。
你打的三个问号有两个属于基础中的基础。
sub new
{
    my $first = shift;
    my $class = ref ($first) || $first;
    my $objref = { @_ };                          
   bless $objref, $class;
    return $objref;
}


这个就是其它oo语言中的constructor
你如果有 oo 的概念的话,其实这个很好懂, 因为perl把每个步骤都告诉你了,通过代码可以看出,
$first  是用来接收传入给constructor 的第一个参数,这个参数不是你的new后面括号里的内容,而是 一个object 或者Bug (package name)。 所以,你所需要做的就是用一个reference 去绑定 它(bless的作用),然后你就可以通过这个reference 去掉用它的方法。至于my $objref = { @_ };     这个是为了接受你的初始化参数所用
我今天怎么这么有 耐心阿。。。。
我是这么理解的, Perl偷偷的把类似C++的this pointer作为第一个参数传进来了


QUOTE:
原帖由 forlorngenius 于 2008-9-11 11:27 发表
我今天怎么这么有 耐心阿。。。。

是不是今天买彩票会中奖??哈哈
perl的对象, 我认为其本质就是一个ref而已, 只不过这个ref 被bless过了, 所以通过这个ref可以调用被bless到的模块的方法。

以ref to hash举例,
perl创建对象的步骤是这样的,
1.  先my $rh =  {};
2.  定义模块
package Module;
sub some_method {print "some method\n";}

3. 把$rh跟Moudle关联起来,也就是用bless.
bless $rh, 'Module';

现在$rh就是一个object了,但是你仍然可以把它当作hashref来使用, 同时你可以通过它调用Module的方法:
$rh->{some_key} = "some value";
$rh->some_method();
严格来说 $rh 非 object, 而是object 的reference
没有中,哎


QUOTE:
原帖由 forlorngenius 于 2008-9-11 13:46 发表
没有中,哎

坚持买,也许能中