第12回:クラスの設計(2) プログラミングII 2007年12月11日 本日の講義内容 Java のクラスの設計(その2) 「部品」の「部品」を作る 「部品」のクラスによるメソッドの提供 実用的なサンプル 「住所録」からの検索の実現 復習)クラスの設計(その1) クラス名は Elephant 「名前」と「年齢」の情報を記憶 public class Elephant { public String name; public int age; } コンストラクタの追加 public Elephant ( String s, int i ) { name = s; age = i; } public Elephant() { name = “”; age = 0; } インスタンスの情報を処理 インスタンスの情報を文字列として返す public String toString() { String info = “Name:” + name +”,Age:” + age; return info; } インスタンスの情報の扱いの工夫 「年齢」は更新処理が必要 「年齢」から「生まれた年」に変更 int bornYear; 「年齢」=「現在の年」-「生まれた年」 で計算できる 「現在の年」を知るには? java.lang の Systemクラス currentTimeMillis()メソッド (ミリ秒での情報 – そのままでは不便) java.util パッケージの Calendar クラス 各インスタンスは日時の情報を記憶 現在の日時の取得 時刻を取り扱うためのメソッドと定数 java.util.Calendar の扱い 「現在の日時」のインスタンスの取得 Calendar cal = Calendar.getInstance(); cal から必要な情報を取り出す get() 「必要な情報」を指定する定数 Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH, Calendar.HOUR_OF_DAY, Calendarの利用例 今日が何日なのか? Calendar cal = Calendar.getInstance(); int day = cal.get( Calendar.DAY_OF_MONTH ); クラスの設計の改良 toString()メソッドの中で年齢を計算 int bornYear; : public String toString() { int thisYear = calendar.get( Calendar.YEAR ); int age = thisYear - bornYear; Java のクラスのポイント 他のプログラムから再利用される あらかじめ「親切」に設計しておく 複数のコンストラクタの定義 データを取り扱うためのメソッドの定義 本日取り扱うクラス Person クラス 個人の情報(名前と住所)を取り扱う 「検索処理」の対象となる Person のフィールド public class Person { public String name; public String address; : : Person のコンストラクタ public Person( String s1, String s2 ) { name = s1; address = s2; } *呼び出し側 Person person = new Person( “植田龍男”, “富岡3丁目”); Personの toString()メソッド 「名前」:「住所」の形式で情報を返す public String toString() { String info= name + “:” + addresss; return info; } nameEquals() メソッドの追加 検索した時の一致・不一致を判定 指定された文字列と一致 – true 指定された文字列と不一致 – false public boolean nameEquals( String s ) { return name.equals( s ); } String クラスのメソッド equals() を利用 もう1つのクラス AddressBook やはり「部品のクラス」(実行はできない) 内部に複数の Person のインスタンス public class AddressBook { public Person[] data; : AddressBookのコンストラクタ 外部から与えられた場合 public Person[] data; : public AddressBook ( Person[] data ) { this.data = data; } AddressBookのコンストラクタ(2) 指定が省略 – 仮のテスト用のデータを用意 public static Person[] sample = { new Person( “丸山不二夫”, “富岡2” ), new Person( “金山典世”, “富岡4” ), : } public AddressBook() { data = sample; AddressBook に検索のメソッド public void searchNameEquals( String s ){ for( int i=0; i<data.length; i++ ) { if( data[i].nameEquals( s ) ) { System.out.println( data[i] ); } } } AddressBookの利用例 public class SearchTest1 { public static void main( String[] args ) { AddressBook book = new AddressBook(); book.searchNameEquals( args[0] ); } } さらに便利になるように工夫 Stringの equals() は「完全一致」 より柔軟な比較 – matches() メソッド 「正規表現」と呼ばれるものを利用 .* -- 「ある文字が何文字か」 .*山 -- 「丸山」にも「金山」にも一致 Person, AddressBookにメソッドを追加!
© Copyright 2024 ExpyDoc