home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

Perl/codepiece/OOP(基本)

Perl/codepiece/OOP(基本)

Perl / codepiece / OOP(基本)
id: 341 所有者: msakamoto-sf    作成日: 2004-09-14 21:44:17
カテゴリ: Perl 

PerlでのOOPの基本。

  1. "new"という名前のサブルーチンを持つパッケージを用意する。
    1. "new"はbless()された適当なリファレンスを返す。
  2. インスタンスメソッドとして使うサブルーチンは第一引数にbless()されたリファレンスを取る。
  3. 継承を行うには、パッケージの::ISAに継承したいパッケージ名のリストを指定する。
  4. 継承元のインスタンスメソッドを呼びたい場合は、SUPERを使う。
#!/usr/bin/perl
 
use strict;
use warnings;
use Test::More qw(no_plan); # サンプルなので"no_plan"で手抜き。
 
{
    package Animal;
    sub new {
        my $class = shift;
        my $self = {};
        print "in '$class' constructor...\n";
        bless ($self, $class);
        return $self;
    }
    sub speak {
        my $class = shift;
        print "in '$class' speak method...\n";
        print "a $class goes ", $class->sound, "!\n";
    }
}
 
{
    package Mouse;
    @Mouse::ISA = qw(Animal);
    sub sound { "squeak" }
    sub speak {
        my $class = shift;
        #$class->Animal::speak($class);
        $class->SUPER::speak($class);
        print "[but you can barely hear it!]\n";
    }
}
 
$main::obj = Mouse->new();
 
$main::obj->speak();
 
isa_ok($main::obj, 'Animal');
isa_ok($main::obj, 'Mouse');
isnt(UNIVERSAL::isa($main::obj, "Horse"), 0);
 
can_ok($main::obj, qw(speak sound));
isnt(UNIVERSAL::can($main::obj, 'hoge'), 0);

実行結果

DOS> perl class01.pl
in 'Mouse' constructor...
in 'Mouse=HASH(0x284fd4)' speak method...
a Mouse=HASH(0x284fd4) goes squeak!
[but you can barely hear it!]
ok 1 - The object isa Animal
ok 2 - The object isa Mouse
ok 3
ok 4 - Mouse->can(...)
ok 5
1..5

PerlでのOOPの基本原理は変わりませんが、より分かりやすい書き方をサポートする為のCPANの主流が時代と共に変わるので厄介です。
上に挙げたコードはあくまでも基本原理の中核部分で、一番簡単なサンプルです。



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2009-04-12 21:53:14
md5:d334a09b208f65693fa7f1e7310fd1d6
sha1:b83999e1a2bfd48fce4b5a70ccd115d29ff38b52
コメント
コメントを投稿するにはログインして下さい。