Effective Java を読んだ.エレガントな手法に感動した.

    はじめに

    仕事で 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