Contenu connexe
Plus de azuma satoshi (20)
ライブコーディング(?)で学ぶPerlオブジェクト指向
- 5. 手前味噌ですが、
Perl Beginners #1 LT
「大ざっぱにオブジェクト指向」
http://xrl.us/perlbeginners-roughoop
をご覧ください。
- 7. よくある例:Animalクラス
● Cryという変数を持っている
● 鳴き声を表現
● Barkというメソッドを持っている
● Cry変数で指定された鳴き声で鳴くことができる
- 8. DEMO: 動物を鳴かせよう
● Animalクラスを定義
● Animalオブジェクトを$catに格納
● $cat に “meow” と鳴かせる
● Animalオブジェクトを$dogに格納
● $dog に “bow” と鳴かせる
- 9. シンプルだが面倒
● 毎回鳴き声を定義するのが億劫。
● そもそも俺は猫を定義したいんだ!
● じゃあどうする?
● 「継承」という概念を取り入れよう
- 11. DEMO: 猫を鳴かせよう
● Animalクラスを継承したCatクラスを定義する
● 鳴き声は基本”meow”
● $catにCatオブジェクトを格納する
● $catに “meow” と鳴かせる
- 12. DEMO: 鳥を飛ばそう
● Animalクラスを派生させて、Birdクラスも定義しよう
● 鳴き声は特に指定なし
● Flyメソッドを追加する
– 鳥だから飛べるはず
● $birdにBirdオブジェクトを格納する
● $birdを飛ばす
- 13. DEMO:キメラをつくろう
● CatとBirdの両方を継承する Chimera クラスを定義
● $chimera に Chimeraオブジェクトを格納
● $chimeraを飛ばす
● さらに”meow”と鳴かせる
- 14. コウモリを作りたいが・・・
● コウモリは鳥じゃない
● でも飛べる
● どうする・・・
● 「飛ぶ」能力だけを他のクラスに分ける
– Mixinといいます
– Exporterを使うといいんじゃないですか
● Animal::Mixin::Fly というクラスに定義してみる
- 15. DEMO: コウモリを作る
● Animal::Mixin::Fly を定義する
● Batクラスを定義する
● 鳴き声は”geeh!”
● Animal::Mixin::Flyをuseするのを忘れないように。。。
● $bat に Batオブジェクトを格納する
● $batを飛ばす & 鳴かす
- 16. クラスを定義するのに
便利なCPANモジュール
● Class::Accessor::Fast
● アクセッサと呼ばれるメソッドを簡単に定義できる
● Mouse
● アクセッサに型指定や読み書きの権限を設定できる
● Mixin(MouseではRoleと呼ぶ)の実装が楽
● 自動的にuse strict; use warnings; される
- 18. まとめ
● “package Foo::Bar;” でクラスを定義
● 1ファイルにつき1クラスが見通しよくていい感じ
● オブジェクト = bless { some => 'data', ... }, $classname;
● コンストラクタ(newとか)はこれをreturnする関数
● 継承を使うと、親クラスにある機能は全部使える
● 親を複数指定してもOK(キメラのように)
● クラスにないメソッドは呼べません
● Mixinを使うと、あとからメソッドを追加できます
Exporterでmixinクラスを作る
–
– Mouse と Mouse::Roleを使って対応する
● クラスの最後は真を置くべし!
● 1; とか、 'Happy hacking! ('; とか。
– 普通はだいたい”1;”