5月1日

プロジェクトをバックアップからインポートする

  1. Eclipseのメニューで[ファイル]-[インポート]を選択
  2. 一般→既存プロジェクトをワークスペースへを選択
  3. ルートディレクトリの選択でバックアップ先プロジェクトを選択
  4. 「プロジェクトをワークスペースにコピー」にチェック
  5. 「完了」をクリック

バックアップしてない人は、「\\kgakusei1\share\澤田\SE32014\c23]からインポートする。

Comparatorでオブジェクトを比較する

タイトル、作者、作成日、ファイルサイズ、長さ(時間)を比較するためのComparatorを作成してソートできるようにする。

前回の授業内容を思い出すために、テストを実行する。

タイトルを比較するためのMediaTitleComparatorを実装する。

作者名で比較するための MediaAuthorComparatorを作成する。

  1. [新規]-[クラス]で新しくクラスを作成する
  2. クラス名はMediaAuthorComparator
  3. java.util.Comparatorインタフェースを追加する
  4. インタフェースの型引数をMediaにする
  5. 「完了」でクラスを作成する

JUnitテストケースを作成する。

  1. パッケージエクスプローラでMediaAuthorComparatorを右クリックする
  2. [新規]-[その他]を選択する
  3. フィルターに ju と入力すると JUnitテストケース が現れる
  4. JUnitテストケースを選択し「次へ」をクリック
  5. さらに「次へ」をクリック
  6. 使用可能なメソッドで compare() にチェックを入れて「完了」をクリック
  7. これでテストクラスが作成される
import static org.junit.Assert.*;

import java.util.Comparator;

import org.junit.Test;


public class MediaAuthorComparatorTest {

	@Test
	public void testCompare() {
		Media m1 = new Media();
		m1.setAuthor("すずき");
		Media m2 = new Media();
		m2.setAuthor("やまだ");
		Comparator c = new MediaAuthorComparator();
		int a = c.compare(m1, m2);
		assertTrue(a < 0);
	}

}

ファイルサイズで比較するためのMediaSizeComparatorを作成する。

MediaSizeComparatorTestを作成する。

import static org.junit.Assert.*;

import java.util.Comparator;

import org.junit.Test;


public class MediaSizeComparatorTest {

	@Test
	public void testCompare() {
		Media m1 = new Media();
		m1.setSize(1000);
		Media m2 = new Media();
		m2.setSize(2000);
		Comparator c = new MediaSizeComparator();
		int a = c.compare(m1, m2);
		assertTrue(a < 0);
	}

	@Test
	public void testCompare1() {
		Media m1 = new Media();
		m1.setSize(1000);
		Media m2 = new Media();
		m2.setSize(1000);
		Comparator c = new MediaSizeComparator();
		int a = c.compare(m1, m2);
		assertTrue(a == 0);
	}

}

作成日で比較するためのMediaDateComparatorを作成する。

長さで比較するためのMediaLengthComparatorを作成する。

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() を選択して「完了」する。

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

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

4月10日

コレクションフレームワーク

オブジェクト同一性についての復習

オブジェクトの同一性は、ObjectクラスのhashCode()メソッドとequals()メソッドにより検査される。

hashCode()は、同一ではないインスタンスに対しては、できるだけ異なる値を返したほうがいいが、仕様では同一でもかまわないので常に1を返すようにする。

プログラムを実行するときにequals()メソッドがホットスポット(呼び出される回数が多い)となる場合は、異なる値を返すことを検討する。

equals()の実装は、JUnitテストケースを利用する。Manクラスのオブジェクの場合は、名前と年齢が一致していれば同一とみなす。

Mapインタフェース

MapはListとともに、Javaでよく利用される。

Mapは、キーと値のペアを格納する。キーは重複しない。値は重複する可能性がある。(異なるキーに対して同一の値を格納する場合など)

Listと配列の相互変換

配列をListに変換するには、ArraysユーティリティのasList()メソッドを使用する。

Listを配列に変換するには、ListインタフェースのtoArray()メソッドを使用する。

北九州大学大学院のソフトウェア公開授業
公開授業2014年前期のお知らせ

4月3日

コレクションフレームワークの続き

SE2で作ったリソースをSE3にコピーする

いずれやらないといけないので、さっさとコピーしておきましょう。

workspaceをコピーする。

Setで独自クラスManを使ってみる

add()とcontains()が期待通りに動作していない。

オブジェクトの同一性の判断をどうやっているかという問題。

Manクラスのテストケースを作成して同一性を保障できるようにする。

パッケージエクスプローラでMan.javaを右クリックし、ポップアップメニューで[新規]-[JUnitテストケース]を選択する。

新規JUnitテストケースのダイアログで「次へ」をクリックし、テストメソッドの中からhashCode()とequals()をチェックして「完了」をクリックする。

テストを作成する。

public class ManTest {

	@Test
	public void testHashCode() {
		Man m1 = new Man("孫", 10);
		Man m2 = new Man("孫", 10);
		assertThat(m1.hashCode(), is(m2.hashCode()));
	}

	@Test
	public void testEquals() {
		fail("まだ実装されていません");
	}

}

ManクラスにhashCode()メソッドのオーバーライドを作成する。

Eclipseのメニューバーで[ソース]-[メソッドのオーバーライド実装]を選択する。
「オーバーライドまたは実装するメソッドを選択」でhashCode()をチェックしてOKする。

4月1日

コレクションフレームワーク

List・Set・Mapの3つのインタフェースがある。

テキストの例題を入力して実行する。(p.422〜p.441)

  • 23-01 ListSample
  • 23-02 ListSample2
  • 23-03 ListSample3
  • 23-04 ListSample4
  • 23-05 ListSample5
  • 23-06 ListSample6
  • 23-07 SetSample
  • 23-08 SetSample2
  • 23-09 SetSample3

SetSampleでManを使ってみる。

import java.util.HashSet;
import java.util.Set;

public class SetSample4 {
    public static void main(String[] args) {
        Set set = new HashSet();
        set.add(new Man("孫", 10));
        set.add(new Man("北尾", 15));
        set.add(new Man("三木谷", 20));
        if (!set.add(new Man("孫", 10))) {
            System.out.println("孫は追加できない");
        }
        if (set.contains(new Man("孫", 10))) {
            System.out.println("孫はある");
        }
        for (Man m : set) {
            System.out.println(m.introduce());
        }
    }
}

3月27日

Webアプリ開発

ロードマップ

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

FizzBuzzの続き

最初にテストを実行する。前回、エラーで終わっているので、エラーになることを再確認する。

say()メソッドの実装を変更してテストにパスするようにする。

3の倍数でFizzを返すようにする。

5の倍数でBuzzを返すようにする。

15の倍数でFizzBuzzを返すようにする。

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;

import org.junit.Test;

public class FizzBuzzTest {

	@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"));
	}

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

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

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

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

プログラマのレベルアップについて

プログラマのレベルアップ

Webアプリの概要

Webアプリの概要

JavaによるWebアプリ開発

JavaによるWebアプリ開発

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 例外一覧