4月17日

オブジェクトの比較

前回は、オブジェクトの同一性を示すためにequals()メソッドのオーバーライドを作成した。今回は、異なるオブジェクトの順序付けに関する実装を行う。

ソートとComparator

オブジェクトをソートするには、オブジェクトを比較する仕組みが必要。そのためのインタフェースが Comparator。

Comparatorは比較のためのメソッド compare()を定義している。

Comparator の Javadoc

int compare(T o1, T o2)
パラメータ:
o1 - 比較対象の最初のオブジェクト
o2 - 比較対象の 2 番目のオブジェクト 
戻り値:
最初の引数が 2 番目の引数より小さい場合は負の整数、両方が等しい場合は 0、最初の引数が 2 番目の引数より大きい場合は正の整数 
例外: 
ClassCastException - 引数の型がこのコンパレータによる比較を妨げる場合

テキストの例題を入力して動かしてみる

テキストでは同一ファイル内にComparatorを作成しているが、実際には別ファイルで作成すること。

独自クラスに対して実装してみる

タイトル、作者、作成日、ファイルサイズ、長さ(時間)の5つの属性を持つ Media クラスを作成して、それを比較するための Comparator を実装する。

Eclipseで簡単にクラス Media を作成する手順。

  1. 新規クラスでMediaを作成する。
  2. 5つのインスタンス変数を定義する。
  3. Eclipseの「ソース」メニューから「setter/getterの生成」を選択する。
  4. 生成する属性にチェックを入れて「OK」する。

Media のタイトルを比較するための MediaTitleComparator を作成する。クラスを作成するときにインタフェース Comparator を追加しておくこと。

MediaTitleComparator を右クリックして新規JUnitテストケースを作成する。テストメソッドは compare() を選択して「完了」する。

テストが生成されたら、テストを実行して失敗することを確認する。

タイトルを比較するテストを追加する。

3月25日

Webアプリ開発

  • 自己紹介
  • ロードマップ

自己紹介

「さわださとし」で検索してみてください。

ロードマップ

  • Webアプリの概要
  • Eclipseによる開発
  • 復習(Eclipseに慣れよう)
  • TDD(FizzBuzz)
  • コレクションフレームワーク
  • JSP
  • Springフレームワーク
  • JavaScriptとjQuery
  • JSONによる通信

Eclipseに慣れる

CHAPTER15のサンプルプログラムをEclipseで作ってみる。

Eclipseでは、プログラムを「プロジェクト」単位で管理するので、最初にプロジェクトを作成する。

メニューから[新規]-[プロジェクト]-[Javaプロジェクト]を選択。プロジェクト名は「c15」にする。パッケージエクスプローラに c15 プロジェクトが現れる。

クラスを作るには、c15 プロジェクトを展開し、src を右クリックする。ポップアップメニューで[新規]-[クラス]を選択するとクラスを作成するダイアログが表示される。クラス名に「Sample」を入力し、メソッド・スタブの「public static void main(String[] args)」をチェックして「完了」をクリックすると、クラスが作成され、エディタが表示される。

Sample/Sample2/Sample3/Sample4をEclipseで入力して実行する。Eclipseの操作に慣れる。

便利なキー操作

  • Ctrl+A: 全選択
  • Ctrl+I: インデント修正
  • Ctrl+SPACE: 補完リストをポップアップ
  • Ctrl+S: 保存

TDD(テスト駆動開発)

FizzBuzzをTDDで作成してJUnitの使い方に慣れる。

まずはFizzBuzzクラスを作成。

パッケージエクスプローラでFizzBuzzクラスを右クリックし、[新規]-[JUnitテストケース]を選択すると、FizzBuzzTestクラスが生成される。

Eclipseのクイックフィックスを使ってFizzBuzzにsay()メソッドを作成する。Eclipseが作った状態だと return null; となっているが、そのままテストを実行して、エラーになるのを確認する。

テストメソッドの中に、実際のテストコードを記述する。

    @Test
    public void testSay() {
        FizzBuzz fb = new FizzBuzz();
        String s = fb.say(1);
        assertThat(s, is("1"));
    }

テストにパスするようにFizzBuzzを修正する。

    public String say(int i) {
        return "1";
    }

テストを実行して、バーが緑色になってテストにパスすることを確認する。

テストコードを追加する。引数が1の場合は成功したので、引数が2のテストケースを作る。

    @Test
    public void testSay1() {
        FizzBuzz fb = new FizzBuzz();
        String s = fb.say(1);
        assertThat(s, is("1"));
    }

    @Test
    public void testSay2() {
        FizzBuzz fb = new FizzBuzz();
        String s = fb.say(2);
        assertThat(s, is("2"));
    }

テストを実行してエラーになるのを確認する。

ここで時間切れ。テストがエラーになる状態でその日の作業を終わらせるのが良い。次に作業を開始するときに、最初にテストを実行すれば、どこから作業を始めればいいのかがすぐに分かる。

テキスト

Amazon.co.jp: 基礎からのJava 改訂版 (基礎からのシリーズ): 宮本 信二: 本

PART01 はじめてのJava 
 CHAPTER01 Javaって何 
 CHAPTER02 はじめてのJava 

 PART02 Java文法の基礎 
 CHAPTER03 変数 
 CHAPTER04 数字の計算 
 CHAPTER05 プログラムに引数を渡す 
 CHAPTER06 いろいろなデータ型 
 CHAPTER07 フロー制御1 条件分岐 
 CHAPTER08 フロー制御2 繰り返し制御 
 CHAPTER09 配列 
 CHAPTER10 メソッドの基本 

 PART03 クラスの基本 
 CHAPTER11 はじめてのクラス 
 CHAPTER12 もう少しクラス 
 CHAPTER13 アクセス修飾子 
 CHAPTER14 標準ライブラリとAPIリファレンス 
 CHAPTER15 文字列を扱う 
 CHAPTER16 はじめての例外 
 CHAPTER17 コンソール入出力 
 CHAPTER18 パッケージとクラスパス 

 PART04 クラスとオブジェクト 
 CHAPTER19 継承 
 CHAPTER20 ポリモーフィズム 
 CHAPTER21 例外とアサーション 
 CHAPTER22 クラスを使いこなす 

 PART05 Javaを便利に使う 
 CHAPTER23 コレクション 
 CHAPTER24 ストリームを使いこなす 
 CHAPTER25 スレッド 

 APPENDIX 
 APPENDIX01 Javaの演算子 
 APPENDIX02 Javaのキーワード 
 APPENDIX03 例外一覧