SSブログ

『Effective Java 第2版』は、やはり初心者向けではない [プログラミング言語Java教育]

Effective Java 第2版 (The Java Series)

Effective Java 第2版 (The Java Series)

  • 作者: Joshua Bloch
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2008/11/27
  • メディア: 単行本(ソフトカバー)

Java研修では、『プログラミング言語Java第4版』と『Effective Java第2版』を学習してもらうのですが、基本的には、事前に予習してもらって質問を提出してもらい、それに答える形式で進めます。しかし、第18期は、受講生の希望により『Effective Java第2版』をきちんと読み進めていく形式で進めています。私自身も久しぶりに読み返していることになります。

読み返してみて、やはり初心者向けではないことを感じます。たとえば、次の段落は、項目12 「Comparableの実装を検討する」のp.63からの抜粋です。
この契約の数学的性質を取り去ってはいけません。equals の契約(項目8)と同様に、compareTo契約は、見かけほど複雑ではありません。1 つのクラス内では、どのような適切な順序関係であっても、compareTo 契約を満足します。equals と異なり、クラスをまたがっては、compareTo は機能する必要はありません。つまり、比較されようとしている2 つのオブジェクトが別々のクラスを参照しているのであれば、ClassCastException をスローすることが許されています。たいていは、ClassCastException をスローすることが、まさにcompareTo が行うべきことです。そして、クラスが適切にパラメータ化されていれば、ClassCastException がスローされます。契約は、クラス間の比較を排除してはいませんが、リリース1.6 では、Java プラットフォームライブラリーのどのクラスも、クラス間の比較をサポートしていません。
この「クラスが適切にパラメータ化されていれば、ClassCastException がスローされます。」の1文を読んですぐに理解できる受講生はいません。この1文を理解するのに必要な知識はすでに学んでいるのですが、その知識を応用して、すぐに理解するのは非常に難しいようです。

Comparableインタフェースがジェネリック型であるということ、ジェネリック型に対して「パラメータ化」するのとはどういう意味であるかということ、そして、実際にコンパイラがどのようなブリッジメソッドを生成するのかということを理解して初めてこの1文を理解できます。

教育の中では、この3点を誘導質問しながら、解説するのですが、そうやって解説されて初めて、受講生は理解できるようです。彼らは、『プログラミング言語Java第4版』をまるまる1冊学習済みなのでが、そのような状況です。したがって、いわゆる初心者本でJavaを学習しただけの人には、理解するのは困難だと思います。

追記(2014年1月4日):解説を書きました。
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

Facebook コメント

トラックバック 0