2007年11月13日

オブジェクト指向におけるFizzBuzz問題

   このエントリーをはてなブックマークに追加 Clip to Evernote
元ネタ:オブジェクト指向におけるFizzBuzz問題

参考サイト:オブジェクト指向におけるFizzBuzz問題に参戦

あまりにも、当たり前すぎて面白みはないけど、
僕が最もオーソドックスな解だと思うコードを書いてみた。
不思議ことに、このようなコードが提示されていないようなので、僕がアップすることに。
いわゆるテンプレートメソッドパターンですね。

abstract class Animal {
private int times = 1;
public void SetCount(int n) {
times = n;
}
protected abstract string GetSoundText();
public void Sound() {
for (int i = 0; i < times; i++) {
Console.Write(GetSoundText());
}
Console.WriteLine();
}
}
class Dog : Animal {
protected override string GetSoundText() {
return "わん";
}
}
class Cat : Animal {
protected override string GetSoundText() {
return "にゃー";
}
}



この記事へのコメント
前回やらかしてしまったので、今回は自粛したんですが、意外なことに誰も書かないとは思いませんでした(^^;;;
Posted by ひろえむ at 2007年11月13日 21:15
ほんと「意外なことに」ですよね。
面白みにかけるので、皆さん奇をてらったコードを書きたかったのかなー。
Posted by Gushwell at 2007年11月13日 21:38
書きましたよw>このパターン

http://hidori.spaces.live.com/Blog/cns!F11BB9FD8E1BC5F9!388.entry
Posted by 渋木宏明(ひどり) at 2007年11月14日 12:33
すみません、見逃してました。m(_ _)m
違いは、abstractとするのがプロパティかメソッドかの違いだけですから、本質的にはおんなじですね。

Posted by Gushwell at 2007年11月14日 13:15
はじめまして。リンクをたどってきました。
私も同じの考えてました。
泣き、じゃなくって鳴きたくない動物への対処として、
Soundをvirtualにしておいて何もしないようにするか、
SetCountをvirtualにしておいてoverride先で常に0をtimesに設定するか、
GetSoundTextでString.Emptyを返すか、
とか、どうするのがいいかなって考えてました。
Posted by Streetw☆ at 2007年11月14日 13:23
>本質的にはおんなじですね。

でしょ ;-)

>どうするのがいいかなって

「鳴く」「鳴かない」は、本家エビス様のように ISound インタフェースを導入して、ISound インターフェースを継承するかどうかで「鳴く能力を持つ」「鳴く能力を持たない」を表現するべきでしょうね。

この設問は「多態」=すべての Animal は「鳴く」のが前提で、鳴き声だけがことなることをコードで表現できるかどうかを問うている、と見たのでそこまでやってません>じぶん
Posted by 渋木宏明(ひどり) at 2007年11月14日 15:10
ご意見ありがとうございます。
もう仕様、っというか枠組みができてるときに、仮に対処しないといけない場合はどうするのがいいのかなって考えてました。
私のとこでは良くそんなことがありますのでw
でも全部無理矢理な対処なことには違いないので、どれがいいかなんて意味のない話でしたね(^^;
Posted by Streetw☆ at 2007年11月14日 16:56
渋木さん
フォローありがとうです。(^ ^/

まさにYAGNI(今必要のあることだけをやろうよ!)ですね。
Posted by Gushwell at 2007年11月14日 17:30
 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/51248129