2012/10/29     YAPC::Asia 2012萬野 有生 (@mandy_44)
軽く自己紹介させてください!
@mandy_4486世代Perl, Java, PHP, MySQL etc.(THE) One of Them Inc.Technical Managerお酒大好き、コミュ障                     最近Perlあまり書いて...
よろしくお願いします!
ちなみに・・・
裏番組が豪華です\(^o^)/
みなさん物好きですねお越しいただきありがとうございます
さて・・・
ちょいモテ
(つд⊂)ゴシゴシ
ちょいモテ(;・∀・)?
ちょい-もて 【ちょいモテ】《形》YAPC初参加のときに何か語呂のいい題名にしようとしていたら思いついた。その後、なぜか別の勉強会でシリーズ化させてしまう。今回が第3弾だが、実際にモテたなどの報告はいまだにない。難しそうに見えるものを簡単に解説...
Perlでちょいモテ電子工作http://www.slideshare.net/YukiManno/yapc2011perl                                        Perlでちょいモテアルゴリズム    ...
それでは、本題です
デザインパターン?
デザインパターン(ソフトウェア)ソフトウェア開発におけるデザインパターン(型紙(かたがみ)または設計パターン、英: designpattern)とは、過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいよう...
デザインパターンのいいところ1. エンジニア相互の共通言語になる2. ある程度のクオリティが確保できる    3. 作るとき楽できる
監督「今日の試合はプランAでいく」選手「はいっ!!」監督「相手が対応してきたのでプランBに変更だ」選手「はいっ!!!」      みたいなイメージ
Design PatternといえばJava言語でデザインパターン入門       結城浩 著
名著です
Moose + Design Patternといえば        モダンPerl入門         牧大輔 著
スーパー名著です(お世辞ではありません)
両方読めばバッチリです
しかし両著ともなかなか難しい・・・
本トークの視点1. そのパターンを使うとどんないいことがあるか   2. 実際にどうやってパターンを使うか    3. なんかかっこよさげなパターンこのような視点から選んだデザインパターンを紹介します。個人的な解釈、意見が含まれますので疑問点、...
NOTICEデザインパターンは一般的にオブジェクト指向と関連性が高いため、本トークではPerlにおけるオブジェクト指向を実装したモジュールであるMooseを使用することを前提に話をします。
1. Bridge
Bridgeパターンとは   ( ゚д゚)ポカーン
Bridgeパターンとは• 委譲系のパターンの代表例• ある機能を直接オブジェクトに実装せず、その  機能を持つ他のオブジェクトに処理を委譲する    バリカンのアタッチメントには0.5mm,3mm,6mm,9mmなどがあります
Barikan               └ Barikan::Attachment::A               └ Barikan::Attachment::B      $barikan1                      ...
Roleの定義                        実体の実装package Barikan::Attachment;   package Barikan::Attachment::A;use Moose::Role;        ...
Operatorを格納するクラスの実装package Barikan;use Moose;has‘attachment’ => (    is => rw,    does => Barikan::Attachment,    required...
実際の使い方use strict;use Barikan;use Barikan::Attachment::A;use Barikan::Attachment::B;my $a = Barikan->new( attachment => Bar...
Bridgeの使い所• 似て非なる対象を扱いたいとき• 同じインタフェースで内部的に違う処理をしたいときBridgeの良い所• 呼び出し側は中の処理を意識しなくて良い• 別のロジックを新たに実装するのが容易
2. Singleton
Bridgeパターンとは   ( ゚д゚)ポカーン
SIngletonパターンとは• 一つだけインスタンスを作ってそれをいろんな  場所から使う• どこから参照するインスタンスも全く同じ実体 ミッキーマウスは一人しかいません!
MickeyMouse(Singleton)      DisneySea      DisneyLand  DisneySea            DisneyLand   $mickey               $mickey(Mic...
Singletonの実装package MickeyMouse;use strict;our $INSTANCE;sub get_instance {    my $class = shift;    return $INSTANCE ||= ...
実際の使い方use strict;use MickeyMouse;# この2つは全く同じ実体$singleton1 = MickeyMouse->get_instance();$singleton2 = MickeyMouse->get_ins...
Singletonの使い所• 全体で1つのインスタンスがあればいい時• 複数のクラスから1個のインスタンス呼び出すときSingletonの良い所• メモリ使用量を減らせる• インスタンス生成のオーバヘッドを削減できる
3. Factory
Factoryパターンとは   ( ゚д゚)ポカーン
Factoryパターンとは• オブジェクトの作成やそれに伴う処理をユーザ  にやらせない• オブジェクトの生成を抽象化できる   カレーには家庭の味があります
Curry         Curry      getBonCurry()     getJavaCurry()   getKokumaroCurry()それぞれが違うレシピのカレーを返す
Curryクラスの実装package Curry;use strict;use Moose;has roux => ( #ルー      is => rw,      isa => Curry::Roux,      required => 1...
CurryFactoryクラスの実装
Upcoming SlideShare
Loading in …5
×

Perlでちょいモテデザインパターン

3,199 views

Published on

YAPC::Asia 2012で行ったトークです

Published in: Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,199
On SlideShare
0
From Embeds
0
Number of Embeds
639
Actions
Shares
0
Downloads
14
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Perlでちょいモテデザインパターン

  1. 1. 2012/10/29 YAPC::Asia 2012萬野 有生 (@mandy_44)
  2. 2. 軽く自己紹介させてください!
  3. 3. @mandy_4486世代Perl, Java, PHP, MySQL etc.(THE) One of Them Inc.Technical Managerお酒大好き、コミュ障 最近Perlあまり書いてない・・・
  4. 4. よろしくお願いします!
  5. 5. ちなみに・・・
  6. 6. 裏番組が豪華です\(^o^)/
  7. 7. みなさん物好きですねお越しいただきありがとうございます
  8. 8. さて・・・
  9. 9. ちょいモテ
  10. 10. (つд⊂)ゴシゴシ
  11. 11. ちょいモテ(;・∀・)?
  12. 12. ちょい-もて 【ちょいモテ】《形》YAPC初参加のときに何か語呂のいい題名にしようとしていたら思いついた。その後、なぜか別の勉強会でシリーズ化させてしまう。今回が第3弾だが、実際にモテたなどの報告はいまだにない。難しそうに見えるものを簡単に解説するのが目標。
  13. 13. Perlでちょいモテ電子工作http://www.slideshare.net/YukiManno/yapc2011perl Perlでちょいモテアルゴリズム http://www.slideshare.net/YukiManno/20120127-nhn
  14. 14. それでは、本題です
  15. 15. デザインパターン?
  16. 16. デザインパターン(ソフトウェア)ソフトウェア開発におけるデザインパターン(型紙(かたがみ)または設計パターン、英: designpattern)とは、過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したものである。 Wikipediaより
  17. 17. デザインパターンのいいところ1. エンジニア相互の共通言語になる2. ある程度のクオリティが確保できる 3. 作るとき楽できる
  18. 18. 監督「今日の試合はプランAでいく」選手「はいっ!!」監督「相手が対応してきたのでプランBに変更だ」選手「はいっ!!!」 みたいなイメージ
  19. 19. Design PatternといえばJava言語でデザインパターン入門 結城浩 著
  20. 20. 名著です
  21. 21. Moose + Design Patternといえば モダンPerl入門 牧大輔 著
  22. 22. スーパー名著です(お世辞ではありません)
  23. 23. 両方読めばバッチリです
  24. 24. しかし両著ともなかなか難しい・・・
  25. 25. 本トークの視点1. そのパターンを使うとどんないいことがあるか 2. 実際にどうやってパターンを使うか 3. なんかかっこよさげなパターンこのような視点から選んだデザインパターンを紹介します。個人的な解釈、意見が含まれますので疑問点、おかしい点等 ございましたら質疑でご指摘いただければ幸いです。
  26. 26. NOTICEデザインパターンは一般的にオブジェクト指向と関連性が高いため、本トークではPerlにおけるオブジェクト指向を実装したモジュールであるMooseを使用することを前提に話をします。
  27. 27. 1. Bridge
  28. 28. Bridgeパターンとは ( ゚д゚)ポカーン
  29. 29. Bridgeパターンとは• 委譲系のパターンの代表例• ある機能を直接オブジェクトに実装せず、その 機能を持つ他のオブジェクトに処理を委譲する バリカンのアタッチメントには0.5mm,3mm,6mm,9mmなどがあります
  30. 30. Barikan └ Barikan::Attachment::A └ Barikan::Attachment::B $barikan1 $barikan2 Barikan インタフェース Barikanattachment attachment A 処理系 B
  31. 31. Roleの定義 実体の実装package Barikan::Attachment; package Barikan::Attachment::A;use Moose::Role; use Moose;requires qw(cut); with ’Barikan::Attachment’;no Moose::Role; __PACKAGE__->meta-1; >make_immutable; no Moose; sub cut { # Aのcut } 1;
  32. 32. Operatorを格納するクラスの実装package Barikan;use Moose;has‘attachment’ => ( is => rw, does => Barikan::Attachment, required => 1, handles => [ qw(cut) ]);__PACKAGE__->meta->make_immutable;no Moose;1;
  33. 33. 実際の使い方use strict;use Barikan;use Barikan::Attachment::A;use Barikan::Attachment::B;my $a = Barikan->new( attachment => Barikan::Attachment::A->new() );my $b = Barikan->new( attachment => Batikan::Attachment::B->new() );$a->cut(‘hoge’); # 実際の処理はBarikan::Attachment::A$b->cut(‘hoge’); # 実際の処理はBarikan::Attachment::B 例えばJSONとYAMLとXMLのパーサを 同じインタフェースで書くとか
  34. 34. Bridgeの使い所• 似て非なる対象を扱いたいとき• 同じインタフェースで内部的に違う処理をしたいときBridgeの良い所• 呼び出し側は中の処理を意識しなくて良い• 別のロジックを新たに実装するのが容易
  35. 35. 2. Singleton
  36. 36. Bridgeパターンとは ( ゚д゚)ポカーン
  37. 37. SIngletonパターンとは• 一つだけインスタンスを作ってそれをいろんな 場所から使う• どこから参照するインスタンスも全く同じ実体 ミッキーマウスは一人しかいません!
  38. 38. MickeyMouse(Singleton) DisneySea DisneyLand DisneySea DisneyLand $mickey $mickey(MickeyMouse) (MickeyMouse) どちらも同じインスタンスを参照している
  39. 39. Singletonの実装package MickeyMouse;use strict;our $INSTANCE;sub get_instance { my $class = shift; return $INSTANCE ||= $class->_new();}sub _new { # 本来のコンストラクタ}1; すごく簡単に実装できる!!
  40. 40. 実際の使い方use strict;use MickeyMouse;# この2つは全く同じ実体$singleton1 = MickeyMouse->get_instance();$singleton2 = MickeyMouse->get_instance(); 使うのも簡単 ただし変数管理には注意! MooseX::Singletonあるよ!!
  41. 41. Singletonの使い所• 全体で1つのインスタンスがあればいい時• 複数のクラスから1個のインスタンス呼び出すときSingletonの良い所• メモリ使用量を減らせる• インスタンス生成のオーバヘッドを削減できる
  42. 42. 3. Factory
  43. 43. Factoryパターンとは ( ゚д゚)ポカーン
  44. 44. Factoryパターンとは• オブジェクトの作成やそれに伴う処理をユーザ にやらせない• オブジェクトの生成を抽象化できる カレーには家庭の味があります
  45. 45. Curry Curry getBonCurry() getJavaCurry() getKokumaroCurry()それぞれが違うレシピのカレーを返す
  46. 46. Curryクラスの実装package Curry;use strict;use Moose;has roux => ( #ルー is => rw, isa => Curry::Roux, required => 1);has ingredients => ( #具 is => rw, isa => ArrayRef, required => 1);__PACKAGE__->meta->make_immutable;1;
  47. 47. CurryFactoryクラスの実装

×