- Perl ›
- オブジェクト指向プログラミング ›
- here
@ISA - 親クラスの取得・設定
特殊変数@ISAで、親クラスを取得・設定することができます。単一継承を行う場合は、クラスをひとつだけ、多重継承を行う場合は、二つ以上指定します。
# 単一継承
package MyClass;
our @ISA = ('ParentClass');
# 多重継承
package MyClass;
our @ISA = ('ParentClass1', 'ParentClass2');
他のクラスを継承してみます。少し注意してほしいことがあります。通常はクラスというものは、ファイル単位で作成します。もしパッケージ名を、Componet にしたとすると、そのパッケージだけを含んだファイルをComponent.pm という名前をつけて保存します。
そして、そのクラスを利用したいスクリプトから呼び出します。けれども、解説を簡易にするために、多くのサンプルでは、ひとつのファイルの中に複数のクラスを記述します。
x, y というメソッドを持つComponentというクラスを継承したButtonクラスの例を考えてみます。
Perlの継承はどのような仕組みで動くのでしょうか。それを説明するために以下のサンプルを動かしてみましょう。
use strict;
use warnings;
# コンポーネントクラス
package Component;
sub x { return 5 }
# ボタンクラス
package Button;
# 継承
our @ISA = ('Component');
sub new { bless {}, 'Button' }
package main;
# ボタンクラスを使用する。
my $button = Button->new;
print $button->x;
このスクリプトを動かしてみるとわかるのですが、 5と表示されると思います。大切なことは、Buttonクラスには、 x というメソッドはないにもかかわらず、 xというメソッドを呼ぶことができるということです。
Componentクラスにxというメソッドがあり、ButtonクラスがComponentクラスを継承しているので、このようなことができます。
our @ISA = ('Component');
という部分に注目してください。これが継承を行っている部分です。継承するにはパッケージ変数 @ISA に継承したいクラスの名前を代入するだけです。
package main
という部分が気になるかもしれません。クラスをファイルに分けて記述した場合はこの記述はいりません。
スクリプトが始まったときは、最初はmainパッケージというものに属しています。Button クラスを利用するときに、mainパッケージに戻って実行するのが自然なためそのようにしています。
Perlゼミ

