SlideShare ist ein Scribd-Unternehmen logo
1 von 19
Downloaden Sie, um offline zu lesen
ライブコーディング(?)で学ぶ
  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;”
ありがとうございました

Weitere ähnliche Inhalte

Andere mochten auch

Andere mochten auch (20)

Microprocesadores[1]
Microprocesadores[1]Microprocesadores[1]
Microprocesadores[1]
 
Future of retail security
Future of retail securityFuture of retail security
Future of retail security
 
GMM 2012 Chiamati a far risplendere la Parola di verità
GMM 2012  Chiamati a far risplendere la Parola di veritàGMM 2012  Chiamati a far risplendere la Parola di verità
GMM 2012 Chiamati a far risplendere la Parola di verità
 
Watch my doc!
Watch my doc!Watch my doc!
Watch my doc!
 
Arp Attack
Arp AttackArp Attack
Arp Attack
 
Aprile
AprileAprile
Aprile
 
Oa 한글표준화
Oa 한글표준화Oa 한글표준화
Oa 한글표준화
 
Febbraio
FebbraioFebbraio
Febbraio
 
Rabies
RabiesRabies
Rabies
 
Mantra rus
Mantra rusMantra rus
Mantra rus
 
Novembre 2011
Novembre 2011Novembre 2011
Novembre 2011
 
Strumento di lavoro
Strumento di lavoroStrumento di lavoro
Strumento di lavoro
 
Pati alegre (fil eminimizer)
Pati alegre (fil eminimizer)Pati alegre (fil eminimizer)
Pati alegre (fil eminimizer)
 
Heather
Heather     Heather
Heather
 
Guidelines
GuidelinesGuidelines
Guidelines
 
Family tree
Family tree Family tree
Family tree
 
How great thou art
How great thou artHow great thou art
How great thou art
 
Io vangelo iii_avvento_anno_b_14 dicembre
Io vangelo iii_avvento_anno_b_14 dicembreIo vangelo iii_avvento_anno_b_14 dicembre
Io vangelo iii_avvento_anno_b_14 dicembre
 
Kozma Szilárd: Nagy Attila Puli, avagy az árnyék én a sorsképlet tükrében
Kozma Szilárd: Nagy Attila Puli, avagy az árnyék én a sorsképlet tükrébenKozma Szilárd: Nagy Attila Puli, avagy az árnyék én a sorsképlet tükrében
Kozma Szilárd: Nagy Attila Puli, avagy az árnyék én a sorsképlet tükrében
 
Scuola dante alighieri
Scuola dante alighieriScuola dante alighieri
Scuola dante alighieri
 

Mehr von azuma satoshi

finally (not finally)
finally (not finally)finally (not finally)
finally (not finally)azuma satoshi
 
時を駆けるINSERT.pptx
時を駆けるINSERT.pptx時を駆けるINSERT.pptx
時を駆けるINSERT.pptxazuma satoshi
 
できる!サーバレスアーキテクチャ
できる!サーバレスアーキテクチャできる!サーバレスアーキテクチャ
できる!サーバレスアーキテクチャazuma satoshi
 
印刷に耐えられる品質のQRCodeをPerlで生成したよ! - Mishima.pm #1
印刷に耐えられる品質のQRCodeをPerlで生成したよ! - Mishima.pm #1印刷に耐えられる品質のQRCodeをPerlで生成したよ! - Mishima.pm #1
印刷に耐えられる品質のQRCodeをPerlで生成したよ! - Mishima.pm #1azuma satoshi
 
Perlbeginnes 9 lt_ytnobody
Perlbeginnes 9 lt_ytnobodyPerlbeginnes 9 lt_ytnobody
Perlbeginnes 9 lt_ytnobodyazuma satoshi
 
Perlbeginnes 9 opening
Perlbeginnes 9 openingPerlbeginnes 9 opening
Perlbeginnes 9 openingazuma satoshi
 
Perlbeginners proposal
Perlbeginners proposalPerlbeginners proposal
Perlbeginners proposalazuma satoshi
 
入れ子構造を分解する
入れ子構造を分解する入れ子構造を分解する
入れ子構造を分解するazuma satoshi
 
YAPC::Asia 2012 CPANに恩返ししよう
YAPC::Asia 2012 CPANに恩返ししようYAPC::Asia 2012 CPANに恩返ししよう
YAPC::Asia 2012 CPANに恩返ししようazuma satoshi
 
Perlbeginnes 4 keynote
Perlbeginnes 4 keynotePerlbeginnes 4 keynote
Perlbeginnes 4 keynoteazuma satoshi
 
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話azuma satoshi
 
Perlbeginners 3 opening talk
Perlbeginners 3 opening talkPerlbeginners 3 opening talk
Perlbeginners 3 opening talkazuma satoshi
 
Perlbeginnes 2 keynote
Perlbeginnes 2 keynotePerlbeginnes 2 keynote
Perlbeginnes 2 keynoteazuma satoshi
 
Perl Beginners #1 keynote
Perl Beginners #1 keynotePerl Beginners #1 keynote
Perl Beginners #1 keynoteazuma satoshi
 
大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向azuma satoshi
 

Mehr von azuma satoshi (20)

finally (not finally)
finally (not finally)finally (not finally)
finally (not finally)
 
時を駆けるINSERT.pptx
時を駆けるINSERT.pptx時を駆けるINSERT.pptx
時を駆けるINSERT.pptx
 
できる!サーバレスアーキテクチャ
できる!サーバレスアーキテクチャできる!サーバレスアーキテクチャ
できる!サーバレスアーキテクチャ
 
印刷に耐えられる品質のQRCodeをPerlで生成したよ! - Mishima.pm #1
印刷に耐えられる品質のQRCodeをPerlで生成したよ! - Mishima.pm #1印刷に耐えられる品質のQRCodeをPerlで生成したよ! - Mishima.pm #1
印刷に耐えられる品質のQRCodeをPerlで生成したよ! - Mishima.pm #1
 
L tthon
L tthonL tthon
L tthon
 
Perlbeginnes 9 lt_ytnobody
Perlbeginnes 9 lt_ytnobodyPerlbeginnes 9 lt_ytnobody
Perlbeginnes 9 lt_ytnobody
 
Perlbeginnes 9 opening
Perlbeginnes 9 openingPerlbeginnes 9 opening
Perlbeginnes 9 opening
 
Perlbeginners proposal
Perlbeginners proposalPerlbeginners proposal
Perlbeginners proposal
 
Chibapm01 lt
Chibapm01 ltChibapm01 lt
Chibapm01 lt
 
入れ子構造を分解する
入れ子構造を分解する入れ子構造を分解する
入れ子構造を分解する
 
YAPC::Asia 2012 CPANに恩返ししよう
YAPC::Asia 2012 CPANに恩返ししようYAPC::Asia 2012 CPANに恩返ししよう
YAPC::Asia 2012 CPANに恩返ししよう
 
Perlbeginnes 4 keynote
Perlbeginnes 4 keynotePerlbeginnes 4 keynote
Perlbeginnes 4 keynote
 
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
 
Perlbeginners 3 opening talk
Perlbeginners 3 opening talkPerlbeginners 3 opening talk
Perlbeginners 3 opening talk
 
PSGIへの誘い
PSGIへの誘いPSGIへの誘い
PSGIへの誘い
 
Perlbeginnes 2 keynote
Perlbeginnes 2 keynotePerlbeginnes 2 keynote
Perlbeginnes 2 keynote
 
Hachiojipm 14 LT
Hachiojipm 14 LTHachiojipm 14 LT
Hachiojipm 14 LT
 
Perl Beginners #1 keynote
Perl Beginners #1 keynotePerl Beginners #1 keynote
Perl Beginners #1 keynote
 
大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向
 
Hachioji.pm #13 LT
Hachioji.pm #13 LTHachioji.pm #13 LT
Hachioji.pm #13 LT
 

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

  • 1. ライブコーディング(?)で学ぶ Perl オブジェクト指向 Perl Beginners #4 Lightning Talk @ytnobody
  • 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. シンプルだが面倒 ● 毎回鳴き声を定義するのが億劫。 ● そもそも俺は猫を定義したいんだ! ● じゃあどうする? ● 「継承」という概念を取り入れよう
  • 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; される
  • 18. まとめ ● “package Foo::Bar;” でクラスを定義 ● 1ファイルにつき1クラスが見通しよくていい感じ ● オブジェクト = bless { some => 'data', ... }, $classname; ● コンストラクタ(newとか)はこれをreturnする関数 ● 継承を使うと、親クラスにある機能は全部使える ● 親を複数指定してもOK(キメラのように) ● クラスにないメソッドは呼べません ● Mixinを使うと、あとからメソッドを追加できます Exporterでmixinクラスを作る – – Mouse と Mouse::Roleを使って対応する ● クラスの最後は真を置くべし! ● 1; とか、 'Happy hacking! ('; とか。 – 普通はだいたい”1;”