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