blessを使ったオブジェクト指向 - 詳細

親クラス

package MyClass;

sub new {
    my $thing = shift;
    my $class = ref $thing || $thing;
    my $self  = bless {@_} , $class;
    $self->init() if $self->can('init');
    $self;
}

our %default = ( name => 'anonymous' );

sub init {
    my $self = shift;
    $self->{$_} = $default{$_} for keys %default;
    $self;
}

sub name {
    my $self = shift;
    $self->{name} = shift if @_;
    return $self->{name};
}
  • new がコンストラクタ。
  • "my $class = ref $thing || $thing" は Class->new ではなく、$object->new() で既存のオブジェクトを生成できるように。
  • can()はUNIVERSAL メソッド。メソッドが存在するか調べる。詳しくは、http://search.cpan.org/perldoc?perlobj#Default_UNIVERSAL_methods_
  • name()はアクセサ。

子クラス

package MyClass::Sub;

our @ISA = qw/MyClass/;

our %default = ( 'name' => 'taro' );

sub init {
    my $self = shift;
    $self->SUPER::init();
    $self->{$_} = $default{$_} for keys %default;
}

クラスを利用

#!/usr/local/bin/perl

my $obj = MyClass::Sub->new( name => 'jiro' );
print $obj->name, "\n";
$obj->name('saburo');
print $obj->name, "\n";

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2011-06-11 (土) 14:24:52 (2658d)