読者です 読者をやめる 読者になる 読者になる

プログラマの完全常識

Book

出て速攻、中身も見ずに買ったんだけど、買った当初は著者が著者なだけに、斜め読みして放っておいた。
で、最近ぱらぱらと読んでたんだけど、なんと言うか、この人よく本なんて書けるよね。
例えば、多態性の説明で、こんなプログラムを書いている。

class Pa
{
  void judge(Gu obj)
  {
    System.out.println("あなたの負けです!");
  }

  void judge(Choki obj)
  {
    System.out.println("あなたの勝ちです!");
  }

  void judge(Pa obj)
  {
    System.out.println("あいこです!");
  }
}
プログラマの完全常識

オーバーロードも静的な多態ですよ、とか言うんなら分かるけど、オーバーライドの説明をしようとしてオーバーロードを例に出すのは全然だめだろう。

Paクラスを使う人は、「こりゃ多態だねぇ」と感じるでしょう。

プログラマの完全常識

とのことなので、使う側を書いてみた。

// 0:Pa, 1:Gu, 2:Choki
switch (input) {
case 0: {
  Pa own = new Pa();
  switch (think) {
  case 0: {
    Pa enemy = new Pa();
    own.judge(enemy);
    break;
  }
  case 1: {
    Gu enemy = new Gu();
    own.judge(enemy);
    break;
  }
  case 2: {
    Choki enemy = new Choki();
    own.judge(enemy);
    break;
  }}
  break;
}
case 1: {
  Gu own = new Gu();
  switch (think) {
  case 0: {
    Pa enemy = new Pa();
    own.judge(enemy);
    break;
  }
  case 1: {
    Gu enemy = new Gu();
    own.judge(enemy);
    break;
  }
  case 2: {
    Choki enemy = new Choki();
    own.judge(enemy);
    break;
  }}
  break;
}
case 2: {
  Choki own = new Choki();
  switch (think) {
  case 0: {
    Pa enemy = new Pa();
    own.judge(enemy);
    break;
  }
  case 1: {
    Gu enemy = new Gu();
    own.judge(enemy);
    break;
  }
  case 2: {
    Choki enemy = new Choki();
    own.judge(enemy);
    break;
  }}
  break;
}}

・・・・・・こりゃ多態だねぇw

プログラマの完全常識 開発者が知っておくべきプロの知恵

プログラマの完全常識 開発者が知っておくべきプロの知恵