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クラシックモダン・コンピューティング)

オブジェクト指向入門 第2版 方法論・実践 (IT Architects' Archiveクラシックモダン・コンピューティング)