1. Perl
  2. オブジェクト指向プログラミング
  3. 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

Perlテキスト処理のエッセンス

PerlでポータブルなLinuxファイル管理入門

ITエンジニアの求人情報など

 ITエンジニアの求人情報・Webサービス・ソフトウェア・スクールなどの情報。

システム開発のお問い合わせ