hitode909の日記

趣味はマリンスポーツですの日記です

散歩ノウハウ

複数のクラスが同じメソッドを持ってると便利なことがある.うまく使えれば,クラスの異なる様々なインスタンスが来ても,区別せず扱える.

sub sanpo {
  my ($pet) = (@_);
  $pet->visit_park;
  $pet->go_home;
}

とかしておいて,DogとPenguin両方にvisit_parkとgo_homeを実装しておくと,犬でもペンギンでも散歩できて便利.


公園で散歩できてよかったけど,ペンギンは川に連れて行きたいとかなると困る.
こういうことをしだすと,新しいペットが増えるたびに,散歩が複雑になっていく.犬は泳がないけどイングリッシュセッターは川に行くかどうかとか覚えてないといけない.

sub sanpo {
  my ($pet) = (@_);
  if ($pet->isa('Penguin') || $pet->isa('EnglishSetter')) {
    $pet->visit_river;
  }
  $pet->visit_park;
  $pet->go_home;
}


こういうときには,川に行くかどうかを,ペットに聞くことにすればすっきりする.ペットが誰であれ,川に行きたいなら連れていく,という雰囲気で,ペットの詳細を気にせず済むようになった.
オブジェクトの外から,オブジェクトの中身をがんばって調べてるとき,その条件ごとメソッドにしてしまえばうまくいくことが多い.

sub sanpo {
  my ($pet) = (@_);
  if ($pet->need_river) {
    $pet->visit_river;
  }
  if ($pet->need_park) {
    $pet->visit_park;
  }
  $pet->go_home;
}


というような話をバイトの人としてた.ペンギンかわいいし散歩に連れて行きたい.

http://www.flickr.com/photos/50979393@N00/11240231654
photo by Christopher.Michel

うれしいお知らせ

この書籍を読むとオブジェクト指向について学べるそうです.

オブジェクト指向入門 第2版 原則・コンセプト (IT Architect’Archive クラシックモダン・コンピューティング)

オブジェクト指向入門 第2版 原則・コンセプト (IT Architect’Archive クラシックモダン・コンピューティング)

オブジェクト指向入門 第2版 方法論・実践 (IT Architects’Archive CLASSIC MODER)

オブジェクト指向入門 第2版 方法論・実践 (IT Architects’Archive CLASSIC MODER)