以下の内容はhttps://r9.hateblo.jp/entry/20110106/p1より取得しました。


abstract メソッド

Mojo.pmを見ていて、Perlでもabstract(抽象)メソッドとして定義する方法が分かったのでメモ。
まあ厳密には違うのだけれども。


親となるクラス内で、

sub handler { croak 'Method "handler" not implemented in subclass' }

このように死ぬだけのサブルーチンをつくっておけばよい。
これだけで、少なくともこの親クラスを継承して、このサブルーチンを使用する子クラスは定義せざるを得なくなる。
(実装せずに使ったら親クラスの死ぬだけのサブルーチンが呼ばれちゃうのだものね)
(ファクトリメソッドパターンというのかな?)




ただし、これだけではPHPのようなabstractメソッドはできない。
PHPだとabstractなクラスのabstractなメソッドは、子クラス側で実装していなければ、起動時に死ぬ。

<?php
abstract class Oya {
  abstract function ok();
}
class Ko extends Oya {
  function ng() { print "ng\n"; }
}

$ko = new Ko();
$ko->ok();
$ko->ng();
?>
Fatal error: Class Ko contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Oya::ok)

Perlでこういう動きは出せないか。




以上の内容はhttps://r9.hateblo.jp/entry/20110106/p1より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14