タヌキのお散歩
タヌキのお散歩

Perlオブジェクト指向

現在人来訪中
トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン 印刷

Perlオブジェクト指向

オブジェクト指向の基本要素

  • クラスとは、パッケージ(package)
  • メソッドは、サブルーチン(sub)
  • オブジェクト(インスタンス)は、構造体

呼び出し方

  • オブジェクト指向 class->method(@arg); # &class::sub("class",@arg);の呼び出しと同等、文字列クラス名と引数配列
 package main;
 use strict;
 use warnings;
 use flower;
 my $obj_ref = flower->new();#//コンストラクタの呼び出し
 $obj_ref->hana_set('himawari'); #//メソッドの呼び出し
  • PERLパケージ &package::sub(@arg); #引数配列
  • 構造体 bless {}, "class"; #//無名ハッシュのリファレンスとクラス名の文字列をつなぐ。
    • blessがあるサブルーチンを「コンストラクタ」と呼びます
    • blessできるもの、ハッシュ、配列、スカラー、正規表現、サブルーチン、形ブログ
 package flower;
 use strict;
 use warnings;
 sub new{ #//コンストラクタ
  my $class = shift;
  my $self  = {};
  return (bless $self=>$class);       #//blessされたリファレンスを返す
 }
 sub hana_set{ #//メソッド
  my ($self,$name) = @_;
  $self->{'name'}=$name;
 }
  • 引数を持たない &Package::sub(); と Packege->sub(); は同じ結果を返す

継承

  • クラスの継承(class inheritance)には use base qw( BASE ) を使います。BASE には親クラス(base class)となるクラスの名前(パッケージ名)を空白で区切って書き並べます。
  • base 宣言したPACKAGEの中に該当呼び出しメソッドが無い場合、base宣言したクラス内にそのメソッドがあるか探索します。
 package main;
 use strict;
 use warnings;
 use color;
 my $obj_ref = color->new();#//コンストラクタの呼び出し
 $obj_ref->hana_set('himawari'); #//メソッドの呼び出し
 $obj_ref->color_set('red'); #//メソッドの呼び出し
 
 package color;
 use strict;
 use warnings;
 use base qw( flower ); #//継承
  sub color_set{ #//メソッド
   my ($self,$name) = @_;
   $self->{'color'}=$name;
  }

クラスメソッドと インスタンスメソッドとの違い

  • その最初の引数がインスタンス(ブレスされたリファレンス) なのかクラス名(文字列)なのかという点だけです。

クラスに対して呼ばれたのか それともインスタンスに対して呼ばれたのかを区別する方法

  • ref演算子をブラスされたリファレンスに対して使うと 文字列(クラス名)を返し、(クラス名のような)文字列に 対して使うと "" を返します

SUPER

SUPER::method は現在のパッケージの @ISA から method を探し, 最初に見つかったものを呼び出します. これは $class の @ISA は見ない点に注意してください.

最終更新時間:2012年09月06日 00時58分28秒