はじめに

仕事で Java をつかうようになった.

といっても, まだ 8 時間くらいしかプログラミングしてないんだけど・・・.

ここ一か月, 怒涛のようにブログの記事を書いているけれども, そのほとんどが Java に関する記事だ.

たとえば…

それは, 元ネタはほとんど Effective Java だったりする.

2 週間ちかくかかったけれども, ようやく読みきったので感想を書く.

内容の紹介

紹介といっても, あまりに有名な本なので紹介するまでもないかも..

Java をつかうプログラマ必読の書

と, よくネットで見かける.自分も, この誘い文句に惹かれて本を手に取った.

第 2 版 は Java 6 の仕様にそって, Java を使う上での有効なテクニックが 78 項目, 順に紹介されていく.

題名のとおり, Effective な Java 文法の使い方のカタログ. よいとされる Java の書き方が, なぜそうするべきなのか説明される.

  • 第 2 章 オブジェクトの生成と消滅 (項目 1 〜 項目 7)
  • 第 3 章 すべてのオブジェクトに共通のメソッド (項目 8 〜 項目 12)
  • 第 4 章 クラスとインタフェース (項目 13 〜項目 22)
  • 第 5 章 ジェネリックス (項目 23 〜 29)
  • 第 6 章 enum とアノテーション (項目 30 〜 項目 37)
  • 第 7 章 メソッド (項目 38 〜 項目 44)
  • 第 8 章 プログラミング一般 (項目 45 〜 項目 56)
  • 第 9 章 例外 (項目 57 〜 項目 65)
  • 第 10 章 並行性 (項目 66 〜 項目 73)
  • 第 11 章 シリアライズ (項目 74 〜 項目 78)

順番に読む必要はないので, 目次をみて気になったところからつまみ読みできる.

感想

Elegant java

まず, この本に乗っている手法はとてもエレガントだ.

関心して, かつ興奮することが毎日体験できる. 思わず写経して, 記事にしてしまうほど, 感動するのだ!

どんな風に感動したかは, 過去記事に譲る.

Elegant Java というタイトルでも十分通用する.

あたりまえのようにデザインパターンがでてくる

オブジェクト指向言語における, 美しいパターンが各ページにちりばめられている.

Gof のデザインパターンというものが, オブジェクト指向でよく利用されるパターンのカタログならば, Effective な手法と Gof のパターンがかぶってしまうことは当たり前.

出てきたものを, 思いつくままに抜粋.

  • ファクトリーメソッド 項目 1
  • ビルダー 項目 2
  • シングルトン 項目 3
  • デコレータ 項目 16
  • ブリッジ 項目 18
  • ストラテジ 項目 21
  • アダプタ 項目 22
  • オブザーバ 項目 67
  • フライウェイト 項目 71

継承をやたら敵対視

とくに印象的だったのが, 以下の章だ.

  • 第 4 章 クラスとインタフェース (項目 13 〜項目 22)
  • 第 6 章 enum とアノテーション (項目 30 〜 項目 37)

Enum は別記事に譲るとして, ここではインタフェースについてのコメントを抜粋.

  • 継承よりもコンポジションを選ぶ 継承は不必要なメソッドを公開する. つまり, 継承はカプセル化を破る.

  • 継承をつかうならば設計を文書化する, でなければ禁止だ.

  • 抽象クラスよりもインタフェースを選ぶ 実装の観点では,

    • 抽象クラスはメソッドに対する実装を含むことを許されている.
    • インタフェースはメソッドに対する実装を含むことを許されていない.

    機能の観点では,

    • 抽象クラスはある機能の実装を強制する.
    • インタフェースは任意の機能を混ぜ合わせる.

    階層化の観点では,

    • 抽象クラスは物事を階層化することに優れる.
    • インタフェースは階層を持たないものをまとめることに優れる.
  • インタフェースは, 階層を持たない型システムを構築する.

おわりに

とてもよい読後感だ.

いいエンディングの映画をみたように, ここに掲載されている手法の美しさに心を打たれた.

各項目が細かく分類されているのもよい. Java での実装に困ったとき, 折に触れて読み返そうと思った.

BookMarks