SlideShare uma empresa Scribd logo
1 de 12
Baixar para ler offline
大ざっぱにオブジェクト指向

Perl Beginners #1 Lightning Talk
          @ytnobody
オブジェクト指向プログラミング(OOP)
       って何?
そもそもオブジェクトとは何か
➢   データを持っている。
    ●
        年齢とか名前とか性別とか。。。
➢   メソッドを持っている。
    ●   メソッドというのは、オブジェクトが持っているデータを活用し
        た関数の事
➢
    何らかのクラスに属している
    ●
        上記のメソッドは、このクラスに属することで初めて提供され
        る。
クラスって何なのか
➢   基本的に金型みたいなものです。
➢   データを収める受け口がある。
➢   メソッドの実装がある。
➢
    クラス名がある。
    package Animal; #クラス名はAnimal。


    sub new {
      my ( $class, %args ) = @_;
      return bless { %args }, $class;
    }


    sub howl {
      my ( $self ) = @_;
      printf '%s was howl as “%s”.', $self->{name}, $self->{voice};
    }


    1;
クラスとオブジェクトの関係って?
➢   クラスにデータを渡して「インスタンス化」してやると、オ
    ブジェクトが出てくる。(ちょうど金型でクッキーの型抜きをしたかのように。)
    use Animal; #Animalクラスを使うことを明示。

    # Animalクラスをインスタンス化。
    my $a = Animal->new(
      name => 'Hamutaro',
         voice => 'Heke!',
    );


    #howlメソッドを実行させる
    $a->howl; # Hamutaro was howl as “Heke!”.
OOP、何がうれしいのか
➢   よく使いそうなクラスをまとめておくことで、それらを再
    利用することができる
➢   結果的に手早い実装が出来るようになっていく
➢   クラスに処理がまとめられているので、割とデバッグし
    やすい
OOPを手軽にしてくれる
 CPANモジュールたち
Class::Accessor::Fast
package Animal; #クラス名はAnimal。


sub new {
  my ( $class, %args ) = @_;
  return bless { %args }, $class;
}


sub howl {
  my ( $self ) = @_;
  printf '%s was howl as “%s”.', $self->{name}, $self->{voice};
}


1;                                           package Animal;
                                             use parent “Class::Accessor::Fast”;


                                             __PACKAGE__->mk_accessors( 'name', 'voice' );


                                             sub howl {
          これがこうなる                              my ( $self ) = @_;
                                               printf '%s was howl as “%s”.', $self->name, $self->voice;
                                             }


                                             1;
Module::Setup
➢   クラスの雛形(CPAN形式)を作ってくれる
[ytnobody@ytnobody work]$ module-setup Oreore
Creating directory Oreore
Creating Oreore/Makefile.PL
Creating Oreore/MANIFEST.SKIP


### 中略 ###


[ytnobody@ytnobody work]$ cd Oreore/
[ytnobody@ytnobody Oreore]$ ls -l
合計 32
-rw-rw-r-- 1 ytnobody ytnobody 104 2月   21   22:27   Changes
-rw-rw-r-- 1 ytnobody ytnobody 531 2月   21   22:27   MANIFEST
-rw-rw-r-- 1 ytnobody ytnobody 200 2月   21   22:27   MANIFEST.SKIP
-rw-rw-r-- 1 ytnobody ytnobody 192 2月   21   22:27   Makefile.PL
-rw-rw-r-- 1 ytnobody ytnobody 473 2月 21 22:27 README
drwxrwxr-x 2 ytnobody ytnobody 4096 2月 21 22:27 lib
drwxrwxr-x 2 ytnobody ytnobody 4096 2月 21 22:27 t
drwxrwxr-x 2 ytnobody ytnobody 4096 2月 21 22:27 xt
ほかにもたくさんあるけど
     割愛
まとめ
➢   OOPは実はそこまで難しくない
➢   OOPはお得
    ●
        再利用できるとか
    ●   デバッグしやすいとか
➢   CPANに登録されてるモジュールを使うと楽できる
    ●   大抵は、OOPで利用することで真価を発揮する。
ご清聴

ありがとうございました

Mais conteúdo relacionado

Mais procurados

Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの] Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
norry_gogo
 
Img select hint_for_h
Img select hint_for_hImg select hint_for_h
Img select hint_for_h
Jun Chiba
 
Cakephpstudy5 hacks jp
Cakephpstudy5 hacks jpCakephpstudy5 hacks jp
Cakephpstudy5 hacks jp
Hiroki Shimizu
 
System select hint_for_h2
System select hint_for_h2System select hint_for_h2
System select hint_for_h2
Jun Chiba
 
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
azuma satoshi
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
jamadam
 

Mais procurados (19)

【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
 
PHP classの教室
PHP classの教室PHP classの教室
PHP classの教室
 
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの] Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
 
Ruby 同好会宣言
Ruby 同好会宣言Ruby 同好会宣言
Ruby 同好会宣言
 
Currying in perl
Currying in perlCurrying in perl
Currying in perl
 
Yahoo!ボックスAPI Hackday資料
Yahoo!ボックスAPI Hackday資料Yahoo!ボックスAPI Hackday資料
Yahoo!ボックスAPI Hackday資料
 
Yahoo!ボックスAPI Hackathon向け資料
Yahoo!ボックスAPI Hackathon向け資料Yahoo!ボックスAPI Hackathon向け資料
Yahoo!ボックスAPI Hackathon向け資料
 
PHP Object Injection入門
PHP Object Injection入門PHP Object Injection入門
PHP Object Injection入門
 
Img select hint_for_h
Img select hint_for_hImg select hint_for_h
Img select hint_for_h
 
Cakephpstudy5 hacks jp
Cakephpstudy5 hacks jpCakephpstudy5 hacks jp
Cakephpstudy5 hacks jp
 
Railsによるurlの描き方
Railsによるurlの描き方Railsによるurlの描き方
Railsによるurlの描き方
 
System select hint_for_h2
System select hint_for_h2System select hint_for_h2
System select hint_for_h2
 
CakePHPで開発する時に統一しておきたいコーディング内容(080316)
CakePHPで開発する時に統一しておきたいコーディング内容(080316)CakePHPで開発する時に統一しておきたいコーディング内容(080316)
CakePHPで開発する時に統一しておきたいコーディング内容(080316)
 
2012 keynote-2
2012 keynote-22012 keynote-2
2012 keynote-2
 
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
 
実用裏方 Perl 入門
実用裏方 Perl 入門実用裏方 Perl 入門
実用裏方 Perl 入門
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
 
WordPress のキャッシュ機構
WordPress のキャッシュ機構WordPress のキャッシュ機構
WordPress のキャッシュ機構
 
Drupal8 DBに保存して読み込む
Drupal8 DBに保存して読み込むDrupal8 DBに保存して読み込む
Drupal8 DBに保存して読み込む
 

Destaque

Innovación educativa con recursos abiertos
Innovación educativa con recursos abiertosInnovación educativa con recursos abiertos
Innovación educativa con recursos abiertos
Colegio San Ignacio
 
ライブコーディング(?)で学ぶPerlオブジェクト指向
ライブコーディング(?)で学ぶPerlオブジェクト指向ライブコーディング(?)で学ぶPerlオブジェクト指向
ライブコーディング(?)で学ぶPerlオブジェクト指向
azuma satoshi
 
Giornata Missionaria Mondiale 2013
Giornata Missionaria Mondiale 2013Giornata Missionaria Mondiale 2013
Giornata Missionaria Mondiale 2013
Maike Loes
 
Strumento di lavoro
Strumento di lavoroStrumento di lavoro
Strumento di lavoro
Maike Loes
 
Giornata Mondiale del Migrante e del Rifugiato
Giornata Mondiale del Migrante e del RifugiatoGiornata Mondiale del Migrante e del Rifugiato
Giornata Mondiale del Migrante e del Rifugiato
Maike Loes
 
Faculty presentation
Faculty presentationFaculty presentation
Faculty presentation
stoliros
 
Thao Hoang's Portfolio
Thao Hoang's PortfolioThao Hoang's Portfolio
Thao Hoang's Portfolio
sgcha
 

Destaque (20)

Woof, woof – meow!
Woof, woof – meow!Woof, woof – meow!
Woof, woof – meow!
 
Triángulos
TriángulosTriángulos
Triángulos
 
Innovación educativa con recursos abiertos
Innovación educativa con recursos abiertosInnovación educativa con recursos abiertos
Innovación educativa con recursos abiertos
 
Lectio Divina Dom. XXIII T.O. Ciclo ‘C’. Lc. 14,25-33
Lectio Divina Dom.  XXIII  T.O.  Ciclo ‘C’.   Lc. 14,25-33Lectio Divina Dom.  XXIII  T.O.  Ciclo ‘C’.   Lc. 14,25-33
Lectio Divina Dom. XXIII T.O. Ciclo ‘C’. Lc. 14,25-33
 
Information Technology and people's science organisation
Information Technology and people's science organisationInformation Technology and people's science organisation
Information Technology and people's science organisation
 
Crofton house
Crofton houseCrofton house
Crofton house
 
ライブコーディング(?)で学ぶPerlオブジェクト指向
ライブコーディング(?)で学ぶPerlオブジェクト指向ライブコーディング(?)で学ぶPerlオブジェクト指向
ライブコーディング(?)で学ぶPerlオブジェクト指向
 
sab 1
sab 1sab 1
sab 1
 
Самостоятельное счастье!
Самостоятельное счастье!Самостоятельное счастье!
Самостоятельное счастье!
 
Giornata Missionaria Mondiale 2013
Giornata Missionaria Mondiale 2013Giornata Missionaria Mondiale 2013
Giornata Missionaria Mondiale 2013
 
tie-dyeing
tie-dyeingtie-dyeing
tie-dyeing
 
Strumento di lavoro
Strumento di lavoroStrumento di lavoro
Strumento di lavoro
 
In diretta
In direttaIn diretta
In diretta
 
Apple on fire
Apple on fireApple on fire
Apple on fire
 
Presentation1
Presentation1Presentation1
Presentation1
 
Anastasi Lecture 2008
Anastasi Lecture 2008Anastasi Lecture 2008
Anastasi Lecture 2008
 
Giornata Mondiale del Migrante e del Rifugiato
Giornata Mondiale del Migrante e del RifugiatoGiornata Mondiale del Migrante e del Rifugiato
Giornata Mondiale del Migrante e del Rifugiato
 
Faculty presentation
Faculty presentationFaculty presentation
Faculty presentation
 
UX Riga meetup personas
UX Riga meetup personasUX Riga meetup personas
UX Riga meetup personas
 
Thao Hoang's Portfolio
Thao Hoang's PortfolioThao Hoang's Portfolio
Thao Hoang's Portfolio
 

Semelhante a 大ざっぱにオブジェクト指向

EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみましたEucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
Etsuji Nakai
 
Doctrineではじめるsymfony1.2開発
Doctrineではじめるsymfony1.2開発Doctrineではじめるsymfony1.2開発
Doctrineではじめるsymfony1.2開発
Katsuhiro Ogawa
 
Zend Db Table拡張説明資料
Zend Db Table拡張説明資料Zend Db Table拡張説明資料
Zend Db Table拡張説明資料
co-hey japan
 
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミング
lestrrat
 

Semelhante a 大ざっぱにオブジェクト指向 (12)

【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
 
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみましたEucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
 
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
 
Doctrineではじめるsymfony1.2開発
Doctrineではじめるsymfony1.2開発Doctrineではじめるsymfony1.2開発
Doctrineではじめるsymfony1.2開発
 
モダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasiaモダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasia
 
Mavenへのはじめの一歩
Mavenへのはじめの一歩Mavenへのはじめの一歩
Mavenへのはじめの一歩
 
Zend Db Table拡張説明資料
Zend Db Table拡張説明資料Zend Db Table拡張説明資料
Zend Db Table拡張説明資料
 
swooleを試してみた
swooleを試してみたswooleを試してみた
swooleを試してみた
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12
 
分散ストリーム処理フレームワーク Apache S4
分散ストリーム処理フレームワーク Apache S4分散ストリーム処理フレームワーク Apache S4
分散ストリーム処理フレームワーク Apache S4
 
Perl勉強会#2資料
Perl勉強会#2資料Perl勉強会#2資料
Perl勉強会#2資料
 
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミング
 

Mais de azuma satoshi

印刷に耐えられる品質のQRCodeをPerlで生成したよ! - Mishima.pm #1
印刷に耐えられる品質のQRCodeをPerlで生成したよ! - Mishima.pm #1印刷に耐えられる品質のQRCodeをPerlで生成したよ! - Mishima.pm #1
印刷に耐えられる品質のQRCodeをPerlで生成したよ! - Mishima.pm #1
azuma satoshi
 
Perlbeginnes 9 lt_ytnobody
Perlbeginnes 9 lt_ytnobodyPerlbeginnes 9 lt_ytnobody
Perlbeginnes 9 lt_ytnobody
azuma satoshi
 
Perlbeginnes 9 opening
Perlbeginnes 9 openingPerlbeginnes 9 opening
Perlbeginnes 9 opening
azuma satoshi
 
Perlbeginners proposal
Perlbeginners proposalPerlbeginners proposal
Perlbeginners proposal
azuma satoshi
 
Perlbeginnes 4 keynote
Perlbeginnes 4 keynotePerlbeginnes 4 keynote
Perlbeginnes 4 keynote
azuma satoshi
 
Perlbeginners 3 opening talk
Perlbeginners 3 opening talkPerlbeginners 3 opening talk
Perlbeginners 3 opening talk
azuma satoshi
 
Perlbeginnes 2 keynote
Perlbeginnes 2 keynotePerlbeginnes 2 keynote
Perlbeginnes 2 keynote
azuma satoshi
 
Perl Beginners #1 keynote
Perl Beginners #1 keynotePerl Beginners #1 keynote
Perl Beginners #1 keynote
azuma satoshi
 
Alluren of prototype-based OOP
Alluren of prototype-based OOPAlluren of prototype-based OOP
Alluren of prototype-based OOP
azuma satoshi
 

Mais de azuma satoshi (19)

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
 
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
 
Alluren of prototype-based OOP
Alluren of prototype-based OOPAlluren of prototype-based OOP
Alluren of prototype-based OOP
 

Último

Último (11)

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

大ざっぱにオブジェクト指向

  • 3. そもそもオブジェクトとは何か ➢ データを持っている。 ● 年齢とか名前とか性別とか。。。 ➢ メソッドを持っている。 ● メソッドというのは、オブジェクトが持っているデータを活用し た関数の事 ➢ 何らかのクラスに属している ● 上記のメソッドは、このクラスに属することで初めて提供され る。
  • 4. クラスって何なのか ➢ 基本的に金型みたいなものです。 ➢ データを収める受け口がある。 ➢ メソッドの実装がある。 ➢ クラス名がある。 package Animal; #クラス名はAnimal。 sub new { my ( $class, %args ) = @_; return bless { %args }, $class; } sub howl { my ( $self ) = @_; printf '%s was howl as “%s”.', $self->{name}, $self->{voice}; } 1;
  • 5. クラスとオブジェクトの関係って? ➢ クラスにデータを渡して「インスタンス化」してやると、オ ブジェクトが出てくる。(ちょうど金型でクッキーの型抜きをしたかのように。) use Animal; #Animalクラスを使うことを明示。 # Animalクラスをインスタンス化。 my $a = Animal->new( name => 'Hamutaro', voice => 'Heke!', ); #howlメソッドを実行させる $a->howl; # Hamutaro was howl as “Heke!”.
  • 6. OOP、何がうれしいのか ➢ よく使いそうなクラスをまとめておくことで、それらを再 利用することができる ➢ 結果的に手早い実装が出来るようになっていく ➢ クラスに処理がまとめられているので、割とデバッグし やすい
  • 8. Class::Accessor::Fast package Animal; #クラス名はAnimal。 sub new { my ( $class, %args ) = @_; return bless { %args }, $class; } sub howl { my ( $self ) = @_; printf '%s was howl as “%s”.', $self->{name}, $self->{voice}; } 1; package Animal; use parent “Class::Accessor::Fast”; __PACKAGE__->mk_accessors( 'name', 'voice' ); sub howl { これがこうなる my ( $self ) = @_; printf '%s was howl as “%s”.', $self->name, $self->voice; } 1;
  • 9. Module::Setup ➢ クラスの雛形(CPAN形式)を作ってくれる [ytnobody@ytnobody work]$ module-setup Oreore Creating directory Oreore Creating Oreore/Makefile.PL Creating Oreore/MANIFEST.SKIP ### 中略 ### [ytnobody@ytnobody work]$ cd Oreore/ [ytnobody@ytnobody Oreore]$ ls -l 合計 32 -rw-rw-r-- 1 ytnobody ytnobody 104 2月 21 22:27 Changes -rw-rw-r-- 1 ytnobody ytnobody 531 2月 21 22:27 MANIFEST -rw-rw-r-- 1 ytnobody ytnobody 200 2月 21 22:27 MANIFEST.SKIP -rw-rw-r-- 1 ytnobody ytnobody 192 2月 21 22:27 Makefile.PL -rw-rw-r-- 1 ytnobody ytnobody 473 2月 21 22:27 README drwxrwxr-x 2 ytnobody ytnobody 4096 2月 21 22:27 lib drwxrwxr-x 2 ytnobody ytnobody 4096 2月 21 22:27 t drwxrwxr-x 2 ytnobody ytnobody 4096 2月 21 22:27 xt
  • 11. まとめ ➢ OOPは実はそこまで難しくない ➢ OOPはお得 ● 再利用できるとか ● デバッグしやすいとか ➢ CPANに登録されてるモジュールを使うと楽できる ● 大抵は、OOPで利用することで真価を発揮する。