燈明ブログ

現状は小池啓仁の応援ブログ

Perlでのオブジェクト指向について

Perlは元々は、オブジェクト指向言語ではありません。
しかし、柔軟な言語仕様のPerlでは、オブジェクト指向言語のように振る舞うことも可能なのです。


普通、オブジェクト指向プログラミングでは、以下の要素が必要です。


ということで、カプセル化オーバーロード以外は、大丈夫なのです。
以下に、クラス、コンストラクタ、継承、多態性、オーバーライドを使用したサンプルを書いてみました。

  • クラスは、Person、Otokonoko、Onnanokoのパッケージを使用する。
  • コンストラクタは、『return bless $self, $class;』でblessリファレンスをコンストラクトする。
  • 継承は、『use base 'Person';』でbaseプラグマを使用する。
  • 多態性は、動的な条件によって、予めコーディングしてあるオブジェクトのメソッドの振る舞いが替わる。
  • オーバーライドは、スーパークラスでの抽象getNameメソッドをサブクラスの具象getNameメソッドで置き換える。

◆サンプル

use strict;
use warnings;

my $obj;
my $hiki = shift;

if ($hiki eq '1') {
    $obj = Otokonoko->new();
}
else {
    $obj = Onnanoko->new();
}
print $obj->getName(), "\n";
$obj->shumi();


package Person;
sub new {
    my $class = shift;
    my $self = {
        Name => $class,
    };
    return bless $self, $class;
}
sub getName {};


package Otokonoko;
use base 'Person';
sub getName {
    my $self = shift;
    return $self->{Name};
}
sub shumi {
    print "バスケ\n";
}


package Onnanoko;
use base 'Person';
sub getName {
    my $self = shift;
    return $self->{Name};
}
sub shumi {
    print "ケーキ作り\n";
}

◆実行結果

C:\perltest>perl tatai.pl 1
Otokonoko
バスケ

C:\perltest>perl tatai.pl 2
Onnanoko
ケーキ作り

もしかしたら、かなり間違ったこと書いているかもしれません。その時は、ご指摘、コメント下さい!