ライブコーディング(?)で学ぶ
  Perl オブジェクト指向
   Perl Beginners #4
     Lightning Talk

      @ytnobody
ネタ的に

時間オーバーの予感
銅鑼ないので

あまり気にしてませんが
オブジェクト指向とはなんぞや
手前味噌ですが、

     Perl Beginners #1 LT
   「大ざっぱにオブジェクト指向」

http://xrl.us/perlbeginners-roughoop

          をご覧ください。
今回はライブコーディングを通して

  Perlのオブジェクト指向を

 知ってもらおうと思っています
よくある例:Animalクラス
●   Cryという変数を持っている
    ●   鳴き声を表現
●   Barkというメソッドを持っている
    ●   Cry変数で指定された鳴き声で鳴くことができる
DEMO: 動物を鳴かせよう
●   Animalクラスを定義
●   Animalオブジェクトを$catに格納
●   $cat に “meow” と鳴かせる
●   Animalオブジェクトを$dogに格納
●   $dog に “bow” と鳴かせる
シンプルだが面倒
●   毎回鳴き声を定義するのが億劫。
●   そもそも俺は猫を定義したいんだ!
●   じゃあどうする?
    ●   「継承」という概念を取り入れよう
継承を取り入れると




              継承




                   Cat クラス
 Animal クラス
DEMO: 猫を鳴かせよう
●   Animalクラスを継承したCatクラスを定義する
    ●   鳴き声は基本”meow”
●   $catにCatオブジェクトを格納する
●   $catに “meow” と鳴かせる
DEMO: 鳥を飛ばそう
●   Animalクラスを派生させて、Birdクラスも定義しよう
    ●   鳴き声は特に指定なし
    ●   Flyメソッドを追加する
        – 鳥だから飛べるはず
●   $birdにBirdオブジェクトを格納する
●   $birdを飛ばす
DEMO:キメラをつくろう
●   CatとBirdの両方を継承する Chimera クラスを定義
●   $chimera に Chimeraオブジェクトを格納
●   $chimeraを飛ばす
●   さらに”meow”と鳴かせる
コウモリを作りたいが・・・
●   コウモリは鳥じゃない
●   でも飛べる
●   どうする・・・
    ●   「飛ぶ」能力だけを他のクラスに分ける
        – Mixinといいます
        – Exporterを使うといいんじゃないですか
●   Animal::Mixin::Fly というクラスに定義してみる
DEMO: コウモリを作る
●   Animal::Mixin::Fly を定義する
●   Batクラスを定義する
    ●   鳴き声は”geeh!”
    ●   Animal::Mixin::Flyをuseするのを忘れないように。。。
●   $bat に Batオブジェクトを格納する
●   $batを飛ばす & 鳴かす
クラスを定義するのに
便利なCPANモジュール
●   Class::Accessor::Fast
    ●   アクセッサと呼ばれるメソッドを簡単に定義できる
●   Mouse
    ●   アクセッサに型指定や読み書きの権限を設定できる
    ●   Mixin(MouseではRoleと呼ぶ)の実装が楽
    ●   自動的にuse strict; use warnings; される
DEMO

こんどはMouseでコウモリを

    つくってみる
まとめ
●   “package Foo::Bar;” でクラスを定義
    ●   1ファイルにつき1クラスが見通しよくていい感じ
●   オブジェクト = bless { some => 'data', ... }, $classname;
    ●   コンストラクタ(newとか)はこれをreturnする関数
●   継承を使うと、親クラスにある機能は全部使える
    ●   親を複数指定してもOK(キメラのように)
●   クラスにないメソッドは呼べません
    ●   Mixinを使うと、あとからメソッドを追加できます
        Exporterでmixinクラスを作る
        –
      – Mouse と Mouse::Roleを使って対応する
●   クラスの最後は真を置くべし!
    ●   1; とか、 'Happy hacking! ('; とか。
        –   普通はだいたい”1;”
ありがとうございました

ライブコーディング(?)で学ぶPerlオブジェクト指向

  • 1.
    ライブコーディング(?)で学ぶ Perlオブジェクト指向 Perl Beginners #4 Lightning Talk @ytnobody
  • 2.
  • 3.
  • 4.
  • 5.
    手前味噌ですが、 Perl Beginners #1 LT 「大ざっぱにオブジェクト指向」 http://xrl.us/perlbeginners-roughoop をご覧ください。
  • 6.
  • 7.
    よくある例:Animalクラス ● Cryという変数を持っている ● 鳴き声を表現 ● Barkというメソッドを持っている ● Cry変数で指定された鳴き声で鳴くことができる
  • 8.
    DEMO: 動物を鳴かせよう ● Animalクラスを定義 ● Animalオブジェクトを$catに格納 ● $cat に “meow” と鳴かせる ● Animalオブジェクトを$dogに格納 ● $dog に “bow” と鳴かせる
  • 9.
    シンプルだが面倒 ● 毎回鳴き声を定義するのが億劫。 ● そもそも俺は猫を定義したいんだ! ● じゃあどうする? ● 「継承」という概念を取り入れよう
  • 10.
    継承を取り入れると 継承 Cat クラス Animal クラス
  • 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; される
  • 17.
  • 18.
    まとめ ● “package Foo::Bar;” でクラスを定義 ● 1ファイルにつき1クラスが見通しよくていい感じ ● オブジェクト = bless { some => 'data', ... }, $classname; ● コンストラクタ(newとか)はこれをreturnする関数 ● 継承を使うと、親クラスにある機能は全部使える ● 親を複数指定してもOK(キメラのように) ● クラスにないメソッドは呼べません ● Mixinを使うと、あとからメソッドを追加できます Exporterでmixinクラスを作る – – Mouse と Mouse::Roleを使って対応する ● クラスの最後は真を置くべし! ● 1; とか、 'Happy hacking! ('; とか。 – 普通はだいたい”1;”
  • 19.