テキスト(PDF) - エクスウェア株式会社

三菱電機情報システム・ユーザ研究会
第2回セミナー「オブジェクト指向とJavaの入門講座」
筆記用具以外はカバンにおしまいください。
スライドの印刷物はセミナー終了後に配布いたします。
エクスウェア株式会社
1
三菱電機情報システム・ユーザ研究会
第2回セミナー「オブジェクト指向とJavaの入門講座」
覚えてほしい用語
システム名
開発コード
作成者
作成日
2010年2月5日
今回の講座では最低以下に示す用語は覚えて帰ってください。
クラス
インスタンス
属性
振る舞い
関連、集約、汎化
継承
エクスウェア株式会社
物であるオブジェクトの雛形であり物の共通概念を表します。
例えば、車は私たち人間が共通で認識している概念で、走る、曲がるなどの共通的な機能を持ち、メーカ、車種で実態が決まります。
このような概念をクラスと呼びます。
クラスより生成された実態がインスタンスで、オブジェクトと同じ意味と捉えて問題はありません。
例えば、車に対して「メーカ:三菱」、「車種:パジェロ」とすることで実態を指し示すことができます。
プログラムでは、クラスは型、インスタンスは変数として取り扱います。
オブジェクト内部で保持するデータのことです。
車の例では、メーカ、車種が属性となります。
オブジェクトの動作のことです。
車の例では、走る、曲がるがこれにあたります。
振る舞いはプログラムではメソッドとして記述されます。(関数のようなもの)
物と物との間の関係の種類です。
関連:物と物との間には意味的なつながりがある。(運転手と車の関係)
集約:全体とそれを構成する部品の関係である。(車とエンジンの関係)
汎化:一般的(抽象的)なものと具体的なものの関係である。(車とトラックの関係)
オブジェクト指向の3大要素の1つで、汎化の状態にあるものを指します。
オブジェクト指向では共通化を促進する上で、なくてはならない概念です。
2
三菱電機情報システム・ユーザ研究会
第2回セミナー「オブジェクト指向とJavaの入門講座」
冷蔵庫を見えるようにしてください
システム名
開発コード
冷蔵庫は2ドアで冷凍室と冷蔵室がある。
冷凍室にアイスクリームが1つ入っている。
冷凍室には製氷皿があり氷ができている。
冷蔵室にはチーズが入っている。
冷蔵庫にはドアポケットがあり、ビールが3本入っている。
メモ欄
エクスウェア株式会社
3
作成者
作成日
2010年2月5日
三菱電機情報システム・ユーザ研究会
第2回セミナー「オブジェクト指向とJavaの入門講座」
冷蔵庫のクラス図を作成してください
分類
関連
集約
汎化
システム名
書き方
A
B
A
B
A
B
開発コード
意味
AとBは意味的なつながりがある。
例)AはBの上司
BはAを構成する一部である。
例)社員Bは会社Aを構成する一部
AはBの一般的(抽象的)なものであ
る。
メモ欄
エクスウェア株式会社
作成者
4
作成日
2010年2月5日
三菱電機情報システム・ユーザ研究会
第2回セミナー「オブジェクト指向とJavaの入門講座」
システム化要件
システム名
三菱電機新型冷蔵庫
開発コード
MX-2010
作成者
滝本 賀年
作成日
2010年2月5日
はじめに
2XXX年、三菱電機は野菜を傷つけることなく野菜の収穫日を測定する新しいセンサーを開発しました。
三菱電機は、この新型センサーを利用した「野菜の賞味期限がわかる」野菜室専用冷蔵庫を発表しました。
本資料は新型冷蔵庫MX-2010に搭載するシステムの仕様を明確にするものです。
冷蔵庫の概要
新型冷蔵庫は野菜室専用のシングルドア冷蔵庫で、庫内には新型センサーが取り付けられており、冷蔵庫に格納されている野菜の収穫日を測定することができます。
冷蔵庫に野菜を入れるとセンサーはそれを検知し、野菜の収穫日から賞味期限を特定します。
消費者は冷蔵庫表面のディスプレイを操作することで、冷蔵庫に入っている野菜の賞味期限を庫内を見ることなく確認することができます。
冷蔵庫の機能概要
センサー
<収穫日読込処理>
冷蔵庫の野菜室は保存されている野菜の収穫日をセンサーで読み取ります。
センサーで読み取られた収穫日をもとに賞味期限を算出します。
収穫日の10日後が賞味期限です。
<賞味期限表示処理>
賞味期限は冷蔵庫表面に取り付けられたディスプレイに表示されます。
ディスプレイにはボタンがついており、これを押すことでディスプレイに品物別の賞味期限が表示されます。
ディスプレイには冷蔵庫の中にあるすべての品物の賞味期限が一覧で表示されます。
表示される情報
野菜の名前
賞味期限
桁数(形式)
20桁
YYYY/MM/DD
野菜情報読み取り機能イメージ図
システム化の範囲
新型冷蔵庫のシステムについては、これまでの冷蔵庫の機能を保持する形で実現します。
したがって、冷蔵庫の保存する機能はそのまま利用します。
本システム開発の範囲は、前記した「収穫日読込処理」、「賞味期限表示処理」とします。
ディスプレイ
賞味期限表示イメージ図
エクスウェア株式会社
5
三菱電機情報システム・ユーザ研究会
第2回セミナー「オブジェクト指向とJavaの入門講座」
ユースケース
システム名
三菱電機新型冷蔵庫
開発コード
ユースケース記述
ユースケース名
基本シナリオ
MX-2010
作成者
滝本 賀年
作成日
2010年2月5日
ユースケース図
野菜を保存する
1 このユースケースは、消費者が冷蔵庫に野菜を入れることで開始される
2 冷蔵庫は野菜が入れられると庫内センサーで野菜の情報(名前、収穫日)を
読み取る
3 冷蔵庫は読み取った野菜の情報を冷蔵庫の野菜リストに保管する
4 冷蔵庫は野菜が取り出されるまで野菜の情報を保管し続ける
5 消費者が冷蔵庫から野菜を取り出すことで野菜の情報は破棄される
野菜を冷やす
新型冷蔵庫
ユースケース名
基本シナリオ
代替シナリオ
関連情報
賞味期限を表示する
1 このユースケースは、消費者が冷蔵庫表面に取り付けられたディスプレイの
「賞味期限ボタン」を押すことで開始される
2 冷蔵庫は野菜リストを調べる
3 冷蔵庫は各野菜の賞味期限をディスプレイに表示する
消費者
1 野菜室に野菜が1つも入っていない場合
1 冷蔵庫はディスプレイに「なし」と表示する
賞味期限を
表示する
1 ディスプレイに表示する情報
1 野菜の名前
2 野菜の賞味期限
注意事項
本ユースケースは、学習する課題を「野菜を保存する」「賞味期限の表示」に限定していることから、
冷蔵庫本来の機能である庫内の物(野菜)を一定温度に保つ機能「野菜を冷やす」は対象外としています。
また、冷蔵庫に物を入れるためのドアの開閉についても省略しています。
エクスウェア株式会社
野菜を保存する
6
三菱電機情報システム・ユーザ研究会
第2回セミナー「オブジェクト指向とJavaの入門講座」
新型冷蔵庫の概念クラス図を作成してください
冷蔵庫
冷蔵室
システム名
開発コード
ドアポケット
作成者
参考
最初にモデリングした冷蔵庫の概念クラス図です。
..
格納室
チーズ
ビール
冷凍室
製氷皿
アイス
氷
メモ欄
エクスウェア株式会社
7
作成日
2010年2月5日
三菱電機情報システム・ユーザ研究会
第2回セミナー「オブジェクト指向とJavaの入門講座」
概念クラス図と詳細クラス図
システム名
三菱電機新型冷蔵庫
開発コード
MX-2010
作成者
冷蔵庫
野菜室
メーカー
製品名
格納室
野菜リスト
作成日
入れる(野菜)
取出す(名前)
ディスプレイ
冷蔵庫
野菜室
MX-2010
冷蔵庫
MX-2010
野菜室
センサー
野菜
エクスウェア株式会社
8
2010年2月5日
三菱電機情報システム・ユーザ研究会
第2回セミナー「オブジェクト指向とJavaの入門講座」
クラス図を完成させる
システム名
三菱電機新型冷蔵庫
冷蔵庫
メーカー
製品名
格納室 *1
開発コード
野菜室
野菜リスト
入れる(野菜)
取り出す(名前)
MX-2010
作成者
作成日
野菜
名前
収穫日
名前を公開する
収穫日を公開する
この部分のクラス図を描いてください。
ディスプレイ
MX-2010冷蔵庫
MX-2010野菜室
センサー *1
センサー
賞味期限を調べる
(野菜)
*1 集約の関係にある場合、プログラム上は属性として保持することになります。
エクスウェア株式会社
9
2010年2月5日
三菱電機情報システム・ユーザ研究会
第2回セミナー「オブジェクト指向とJavaの入門講座」
クラス図
システム名
三菱電機新型冷蔵庫
冷蔵庫
メーカー
製品名
格納室 *1
ディスプレイ
MX-2010冷蔵庫
ディスプレイ *1
表示する
賞味期限ボタンを押
す
野菜室
野菜リスト
入れる(野菜)
取り出す(名前)
MX-2010野菜室
センサー *1
MX-2010
作成者
滝本 賀年
野菜
名前
収穫日
名前を公開する
収穫日を公開する
センサー
賞味期限を調べる
(野菜)
*1 集約の関係にある場合、プログラム上は属性として保持することになります。
エクスウェア株式会社
開発コード
10
作成日
2010年2月5日
三菱電機情報システム・ユーザ研究会
第2回セミナー「オブジェクト指向とJavaの入門講座」
シーケンス図の描き方
システム名
開発コード
<クラス図>
人
作成者
<シーケンス図>
人
メッセージ
鳴く
活性期間
(動いている)
犬
名前
生存期間
(存在する)
+鳴く
エクスウェア株式会社
作成日
11
犬
2010年2月5日
三菱電機情報システム・ユーザ研究会
第2回セミナー「オブジェクト指向とJavaの入門講座」
シーケンス図を完成させてください
システム名
三菱電機新型冷蔵庫
開発コード
MX-2010
作成者
作成日
人間
生成(名前、収穫日)
生成(メーカー、名前)
野菜
冷蔵庫
野菜室
ディスプレイ
センサー
入れる(野菜)
野菜リストに追加
この部分のシーケンス図を描いてください。
賞味期限ボタンを押す
賞味期限を調べる(野菜)
収穫日を公開する
収穫日
賞味期限を計算する
賞味期限
表示する(賞味期限)
賞味期限を表示する
取り出す(野菜)
野菜リストから削除
エクスウェア株式会社
12
2010年2月5日
三菱電機情報システム・ユーザ研究会
第2回セミナー「オブジェクト指向とJavaの入門講座」
シーケンス図
システム名
三菱電機新型冷蔵庫
開発コード
MX-2010
作成者
滝本 賀年
作成日
人間
①
生成(名前、収穫日)
②
生成(メーカー、名前)
③
入れる(野菜)
野菜
冷蔵庫
野菜室
ディスプレイ
センサー
野菜リストに追加
④
⑤
賞味期限ボタンを押す
⑥
賞味期限を調べる(野菜)
収穫日を公開する⑦
収穫日
賞味期限を計算する
賞味期限
表示する(賞味期限)⑨
賞味期限を表示する
⑩
取り出す(野菜)
エクスウェア株式会社
⑪
野菜リストから削除
13
⑧
2010年2月5日
三菱電機情報システム・ユーザ研究会
第2回セミナー「オブジェクト指向とJavaの入門講座」
ソースコード
システム名
開発コード
作成者
作成日
<シーケンス図>
<クラス図>
人
人
犬
鳴く
犬
名前
+鳴く
public class 犬 {
/** 犬の名前を保持します。*/
private String 名前;
/** 犬の名前を取得します。
* @param 名前引数 犬の名前
*/
public 犬(String 名前引数) {
this.名前 = 名前引数;
}
/** 鳴くと指示されたら、鳴き声を返却します。
* @return 犬の鳴き声
*/
public String 鳴く() {
return "ワン";
}
}
public class 人 {
/**
* プログラムが一番最初に呼び出される main メ
ソッド.
* @param args パラメータなし
*/
public static void main(String[] args) {
// 犬クラスの生成(名前を設定)
犬 ポチ = new 犬("ポチ");
// 生成した犬に「鳴く」を指示する。
// 鳴き声が返却されるので、取得する。
String 鳴き声 = ポチ.鳴く();
// 鳴き声変数の値をコンソールに出力する。
System.out.println(鳴き声);
}
}
エクスウェア株式会社
14
2010年2月5日
2010年2月5日
三菱電機 MX2010冷蔵庫のソースコード
import java.util.Calendar;
importとは、使用するプログラムの
import 冷蔵庫グループ.MX2010冷蔵庫;
グループであるライブラリを指定します。
import 冷蔵庫グループ.MX2010野菜室;
これにより、異なるグループで同じ名前の
import 野菜グループ.野菜;
/**
クラスが存在しても、正しいものが利用で
* 新型冷蔵庫を使った一連の操作を行うクラス
きます。
*
* @author エクスウェア株式会社
*/
public class 人間 {
/**
* プログラムを操作するメイン処理
*/
public static void main(String[] args) {
// ■生産者
// かぼちゃを生産
野菜 かぼちゃ = new 野菜("かぼちゃ", "2010/2/5");
// ■消費者
// 新型冷蔵庫を買う(作成する)
MX2010冷蔵庫 冷蔵庫変数 = new MX2010冷蔵庫("三菱電機", "MX-2010", new MX2010野菜室());
// 冷蔵庫の格納室にほうれん草を入れる
冷蔵庫が保持する格納室(野菜室)の
冷蔵庫変数.格納室.入れる(かぼちゃ);
// ディスプレイを見てみます。
メソッドを呼び出しています。
冷蔵庫変数.賞味期限ボタンを押す();
// 冷蔵庫の格納室からかぼちゃを取り出す
冷蔵庫変数.格納室.取り出す("かぼちゃ");
}
}
①
②
③
⑤
⑩
④
package 冷蔵庫グループ;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import 野菜グループ.野菜;
/**
* 冷蔵庫にある野菜室クラス
* 野菜室に必要な基本的な機能を所有する。
* 独自な機能が必要な場合は、本クラスを継承して作成する。
* @author エクスウェア株式会社
*/
public class 野菜室 {
/** 野菜を保持する配列(複数個の野菜を保持する) */
protected List<野菜> 野菜リスト = new ArrayList<野菜>();
/**
* 格納室に野菜を入れる。
Javaは標準で多くのクラスが提供されてい
* 入れられた野菜は、本クラスで保持する。 る。
* @param 野菜引数 野菜
野菜リストはJavaが提供するものを使用して
*/
います。
public void 入れる(野菜 野菜引数) {
this.野菜リスト.add(野菜引数);
}
/**
* 野菜を格納室から取り出す。
* 取り出す際には、野菜の名前を取得し、あれば野菜を返却する。
* @param 野菜の名前
*/
public 野菜 取り出す(String 野菜の名前) {
Iterator<野菜> 野菜Iterator = 野菜リスト.iterator();
while (野菜Iterator.hasNext()) {
野菜 野菜変数 = 野菜Iterator.next();
if (野菜の名前.equals(野菜の名前)) {
野菜Iterator.remove(); // 取り出したので削除する。
return 野菜変数;
}
}
// 野菜が存在しない場合は、null を返却する。
return null;
}
}
③
package 冷蔵庫グループ;
/**
* 冷蔵庫クラス
* 冷蔵庫に必要な基本的な情報を所有する。
* 独自な機能が必要な場合は、本クラスを継承して作成する。
* @author エクスウェア株式会社
冷蔵庫が保持する野菜室を保持しています。
*/
これが、集約の関係を表しています。
public class 冷蔵庫 {
protected String メーカー;
protected String 製品名;
public 野菜室 格納室;
}
packageとは、関連するプログラムを1つの
グループにまとめるものです。
Packageを超えてメソッドの利用を制限し
たり、特定のメソッドをパッケージの外に
公開したりすることで、パッケージの独立
性を高めます。
package 冷蔵庫グループ;
import java.util.Calendar;
import java.util.Iterator;
import 野菜グループ.野菜;
/**
* 冷蔵庫の機能を継承した新型冷蔵庫クラス
* @author エクスウェア株式会社
*/
public class MX2010冷蔵庫 extends 冷蔵庫 {
/** ディスプレイクラスを保持する. */
private ディスプレイ ディスプレイ変数 = new ディスプレイ();
/**
* MX2010冷蔵庫の作成時の処理(コンストラクタ)
* 格納室には、センサーつきの野菜室を取得する。
* @param メーカ引数 メーカ名
* @param 製品名引数 製品名
* @param 格納室引数 格納室(野菜室)
*/
public MX2010冷蔵庫(String メーカ引数, String 製品名引数, 野菜室 格納室引数) {
super.メーカー = メーカ引数;
super.製品名 = 製品名引数;
super.格納室 = 格納室引数;
}
/**
* 野菜室に格納されている野菜の賞味期限を計算する。
* 計算した情報をディスプレイクラスに渡すことで、賞味期限情報を出力する。
*/
public void 賞味期限ボタンを押す() {
// 賞味期限一覧 には野菜リストに入っている野菜全ての賞味期限を保持する
StringBuffer 賞味期限一覧 = new StringBuffer();
MX2010野菜室 MX2010野菜室変数 = (MX2010野菜室) super.格納室;
Iterator<野菜> 野菜Iterator = MX2010野菜室変数.野菜リスト.iterator();
// 格納室(野菜室)から野菜リストを取り出し、全ての野菜の賞味期限をひとつずつ取得する
while (野菜Iterator.hasNext()) {
野菜 野菜変数 = 野菜Iterator.next();
String 賞味期限 = MX2010野菜室変数.センサー変数.賞味期限を調べる(野菜変数);
賞味期限一覧.append(野菜変数.名前を公開する() + ":" + 賞味期限);
}
賞味期限一覧.append("\n");
// 全ての野菜の賞味期限をディスプレイより表示する
ディスプレイ変数.表示する(賞味期限一覧.toString());
}
}
②
⑤
⑥
④
⑨
⑩
package 冷蔵庫グループ;
import 野菜グループ.野菜;
/**
* 賞味期限を特定するセンサークラス
* @author エクスウェア株式会社
*/
public class センサー {
/**
* 野菜の収穫日から賞味期限を算出し、返却する。
* 計算方法:収穫日 + 10
* @param 野菜引数 野菜
* @return 賞味期限
*/
protected String 賞味期限を調べる(野菜 野菜引数) {
String 収穫日 = 野菜引数.収穫日を公開する();
// substring関数により収穫日の日付部分のみを切り出す
String 日付 = 収穫日.substring(8,10);
// String型からint型へいったん変換する
int day = Integer.parseInt(日付);
// 収穫日からプラス10日した、賞味期限を算出
day += 10;
return 収穫日.substring(0,8) + day;
}
}
⑪
野菜室クラスを継承します。
継承することで野菜室クラスが持っている
「入れる」や「取り出す」といった
メソッドを実装しなくても、
実装したのと同様に利用できるようになりま
す。
⑥
package 冷蔵庫グループ;
/**
* 格納室の機能を継承した野菜室クラス
*
* @author エクスウェア株式会社
*/
public class MX2010野菜室 extends 野菜室 {
/** センサーを保持する。 */
protected センサー センサー変数 = new センサー();
}
package 冷蔵庫グループ;
/**
* 冷蔵庫に付属するディスプレイクラス
* @author エクスウェア株式会社
*/
public class ディスプレイ {
/**
* ディスプレイに表示する文字を取得し、文字を出力する
* @param 表示内容 ディスプレイに表示する文字
*/
protected void 表示する(String 表示内容) {
System.out.println("******* ディスプレイ *******");
if (表示内容.equals("")) {
System.out.println("なし");
コンソールにメッセージを表示します。
} else {
System.out.print(表示内容);
}
System.out.println("****************************\n");
}
}
⑦
⑧
package 野菜グループ;
/**
* 野菜クラス
* @author エクスウェア株式会社
*/
public class 野菜 {
/** 野菜の名前を保持する. */
private String 名前;
/** 野菜の収穫日を保持する. */
private String 収穫日;
/**
* 野菜を生成します.(コンストラクタ)
* @param 名前引数 野菜の名前
* @param 収穫日引数 野菜の収穫日
*/
public 野菜(String 名前引数, String 収穫日引数) {
this.名前 = 名前引数;
this.収穫日 = 収穫日引数;
}
/**
* 野菜の名前を返却する。
*/
public String 名前を公開する() {
return this.名前;
}
/**
* 野菜の収穫日を返却する。
*/
public String 収穫日を公開する() {
return this.収穫日;
}
}
⑨
③
①
①
メモ
⑦
15
②
2010年2月5日
三菱電機 MX2010冷蔵庫のソースコード
import java.util.Calendar;
import 冷蔵庫グループ.MX2010冷蔵庫;
import 冷蔵庫グループ.MX2010野菜室;
import 野菜グループ.野菜;
/**
* 新型冷蔵庫を使った一連の操作を行うクラス
*
* @author エクスウェア株式会社
*/
public class 人間 {
/**
* プログラムを操作するメイン処理
*/
public static void main(String[] args) {
// ■生産者
// かぼちゃを生産
野菜 かぼちゃ = new 野菜("かぼちゃ", "2010/2/5");
// ■消費者
// 新型冷蔵庫を買う(作成する)
MX2010冷蔵庫 冷蔵庫変数 = new MX2010冷蔵庫("三菱電機", "MX-2010", new MX2010野菜室());
// 冷蔵庫の格納室にほうれん草を入れる
冷蔵庫変数.格納室.入れる(かぼちゃ);
// ディスプレイを見てみます。
冷蔵庫変数.賞味期限ボタンを押す();
// 冷蔵庫の格納室からかぼちゃを取り出す
冷蔵庫変数.格納室.取り出す("かぼちゃ");
}
}
①
②
③
⑤
⑩
④
package 冷蔵庫グループ;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import 野菜グループ.野菜;
/**
* 冷蔵庫にある野菜室クラス
* 野菜室に必要な基本的な機能を所有する。
* 独自な機能が必要な場合は、本クラスを継承して作成する。
* @author エクスウェア株式会社
*/
public class 野菜室 {
/** 野菜を保持する配列(複数個の野菜を保持する) */
protected List<野菜> 野菜リスト = new ArrayList<野菜>();
/**
* 格納室に野菜を入れる。
* 入れられた野菜は、本クラスで保持する。
* @param 野菜引数 野菜
*/
public void 入れる(野菜 野菜引数) {
this.野菜リスト.add(野菜引数);
}
/**
* 野菜を格納室から取り出す。
* 取り出す際には、野菜の名前を取得し、あれば野菜を返却する。
* @param 野菜の名前
*/
public 野菜 取り出す(String 野菜の名前) {
Iterator<野菜> 野菜Iterator = 野菜リスト.iterator();
while (野菜Iterator.hasNext()) {
野菜 野菜変数 = 野菜Iterator.next();
if (野菜の名前.equals(野菜の名前)) {
野菜Iterator.remove(); // 取り出したので削除する。
return 野菜変数;
}
}
// 野菜が存在しない場合は、null を返却する。
return null;
}
}
③
package 冷蔵庫グループ;
/**
* 冷蔵庫クラス
* 冷蔵庫に必要な基本的な情報を所有する。
* 独自な機能が必要な場合は、本クラスを継承して作成する。
* @author エクスウェア株式会社
*/
public class 冷蔵庫 {
protected String メーカー;
protected String 製品名;
public 野菜室 格納室;
}
package 冷蔵庫グループ;
import java.util.Calendar;
import java.util.Iterator;
import 野菜グループ.野菜;
/**
* 冷蔵庫の機能を継承した新型冷蔵庫クラス
* @author エクスウェア株式会社
*/
public class MX2010冷蔵庫 extends 冷蔵庫 {
/** ディスプレイクラスを保持する. */
private ディスプレイ ディスプレイ変数 = new ディスプレイ();
/**
* MX2010冷蔵庫の作成時の処理(コンストラクタ)
* 格納室には、センサーつきの野菜室を取得する。
* @param メーカ引数 メーカ名
* @param 製品名引数 製品名
* @param 格納室引数 格納室(野菜室)
*/
public MX2010冷蔵庫(String メーカ引数, String 製品名引数, 野菜室 格納室引数) {
super.メーカー = メーカ引数;
super.製品名 = 製品名引数;
super.格納室 = 格納室引数;
}
/**
* 野菜室に格納されている野菜の賞味期限を計算する。
* 計算した情報をディスプレイクラスに渡すことで、賞味期限情報を出力する。
*/
public void 賞味期限ボタンを押す() {
// 賞味期限一覧 には野菜リストに入っている野菜全ての賞味期限を保持する
StringBuffer 賞味期限一覧 = new StringBuffer();
MX2010野菜室 MX2010野菜室変数 = (MX2010野菜室) super.格納室;
Iterator<野菜> 野菜Iterator = MX2010野菜室変数.野菜リスト.iterator();
// 格納室(野菜室)から野菜リストを取り出し、全ての野菜の賞味期限をひとつずつ取得する
while (野菜Iterator.hasNext()) {
野菜 野菜変数 = 野菜Iterator.next();
String 賞味期限 = MX2010野菜室変数.センサー変数.賞味期限を調べる(野菜変数);
賞味期限一覧.append(野菜変数.名前を公開する() + ":" + 賞味期限);
}
賞味期限一覧.append("\n");
// 全ての野菜の賞味期限をディスプレイより表示する
ディスプレイ変数.表示する(賞味期限一覧.toString());
}
}
②
⑤
⑥
④
⑨
⑩
package 冷蔵庫グループ;
import 野菜グループ.野菜;
/**
* 賞味期限を特定するセンサークラス
* @author エクスウェア株式会社
*/
public class センサー {
/**
* 野菜の収穫日から賞味期限を算出し、返却する。
* 計算方法:収穫日 + 10
* @param 野菜引数 野菜
* @return 賞味期限
*/
protected String 賞味期限を調べる(野菜 野菜引数) {
String 収穫日 = 野菜引数.収穫日を公開する();
// substring関数により収穫日の日付部分のみを切り出す
String 日付 = 収穫日.substring(8,10);
// String型からint型へいったん変換する
int day = Integer.parseInt(日付);
// 収穫日からプラス10日した、賞味期限を算出
day += 10;
return 収穫日.substring(0,8) + day;
}
}
⑪
⑥
package 冷蔵庫グループ;
/**
* 格納室の機能を継承した野菜室クラス
*
* @author エクスウェア株式会社
*/
public class MX2010野菜室 extends 野菜室 {
/** センサーを保持する。 */
protected センサー センサー変数 = new センサー();
}
package 冷蔵庫グループ;
/**
* 冷蔵庫に付属するディスプレイクラス
* @author エクスウェア株式会社
*/
public class ディスプレイ {
/**
* ディスプレイに表示する文字を取得し、文字を出力する
* @param 表示内容 ディスプレイに表示する文字
*/
protected void 表示する(String 表示内容) {
System.out.println("******* ディスプレイ *******");
if (表示内容.equals("")) {
System.out.println("なし");
} else {
System.out.print(表示内容);
}
System.out.println("****************************\n");
}
}
⑦
⑧
package 野菜グループ;
/**
* 野菜クラス
* @author エクスウェア株式会社
*/
public class 野菜 {
/** 野菜の名前を保持する. */
private String 名前;
/** 野菜の収穫日を保持する. */
private String 収穫日;
/**
* 野菜を生成します.(コンストラクタ)
* @param 名前引数 野菜の名前
* @param 収穫日引数 野菜の収穫日
*/
public 野菜(String 名前引数, String 収穫日引数) {
this.名前 = 名前引数;
this.収穫日 = 収穫日引数;
}
/**
* 野菜の名前を返却する。
*/
public String 名前を公開する() {
return this.名前;
}
/**
* 野菜の収穫日を返却する。
*/
public String 収穫日を公開する() {
return this.収穫日;
}
}
⑨
③
①
①
メモ
⑦
16
②
三菱電機情報システム・ユーザ研究会
第2回セミナー「オブジェクト指向とJavaの入門講座」
プログラムの実行
システム名
三菱電機新型冷蔵庫
開発コード
MX-2010
作成者
滝本 賀年
作成日
2010年2月5日
ソースコード
リアルタイム構文チェック
属性(変数)と
振る舞い(インスタンス)
モジュールの一覧
システムコンソール
メモ欄
エクスウェア株式会社
17
三菱電機情報システム・ユーザ研究会
第2回セミナー「オブジェクト指向とJavaの入門講座」
テストコードのサンプル
システム名
三菱電機新型冷蔵庫
開発コード
MX-2010
作成者
滝本 賀年
import junit.framework.TestCase;public
class 犬Test extends TestCase {
/**
* ポチという犬の鳴き声テスト
*/
public void test鳴く01() {
犬 犬変数 = new 犬("ポチ");
String 鳴き声変数 = 犬変数.鳴く();
assertEquals("ワン", 鳴き声変数);
}
}
テストケースをメソッドとし
て定義します。
戻り値が期待通りか
評価します。
メソッドの呼び出し結果の期待値を設計し
プログラムで評価する。
エクスウェア株式会社
18
作成日
2010年2月5日
三菱電機情報システム・ユーザ研究会
第2回セミナー「オブジェクト指向とJavaの入門講座」
テストの実行
システム名
三菱電機新型冷蔵庫
実行結果
テストケース
メモ欄
エクスウェア株式会社
19
開発コード
MX-2010
作成者
滝本 賀年
作成日
2010年2月5日
三菱電機情報システム・ユーザ研究会
第2回セミナー「オブジェクト指向とJavaの入門講座」
テストコードを作成する
システム名
三菱電機新型冷蔵庫
開発コード
MX-2010
作成者
public class センサーテスト extends TestCase {
public void test01() {
// テストに使用する野菜オブジェクトを生成
テストコードを書いてください。
野菜 テスト野菜 = new 野菜();
テスト野菜.生成("テスト野菜", "2009/12/10");
// センサーテスト
センサー センサー変数 = new センサー();
String 賞味期限 = センサー変数.賞味期限を調べる(テスト野菜);
// 戻り値の評価
assertEquals("2009/12/20", 賞味期限);
}
}
メモ欄
エクスウェア株式会社
20
作成日
2010年2月5日
三菱電機情報システム・ユーザ研究会
第2回セミナー「オブジェクト指向とJavaの入門講座」
テストコード
システム名
三菱電機新型冷蔵庫
開発コード
MX-2010
作成者
public class センサーテスト extends TestCase {
public void test01() {
// テストに使用する野菜オブジェクトを生成
野菜 テスト野菜 = new 野菜();
テスト野菜.生成("テスト野菜", "2009/12/10");
// センサーテスト
センサー センサー変数 = new センサー();
String 賞味期限 = センサー変数.賞味期限を調べる(テスト野菜);
// 戻り値の評価
assertEquals("2009/12/20", 賞味期限);
}
}
メモ欄
エクスウェア株式会社
21
滝本 賀年
作成日
2010年2月5日
三菱電機情報システム・ユーザ研究会
第2回セミナー「オブジェクト指向とJavaの入門講座」
プログラムの実行
システム名
三菱電機新型冷蔵庫
開発コード
MX-2010
テストケースが1つエラー
テストケースtest02がエラー
エラー原因は添え字の範囲外参照
センサークラスの22行目でエラー
メモ欄
エクスウェア株式会社
22
作成者
滝本 賀年
作成日
2010年2月5日
2010年2月5日
三菱電機 MX2010冷蔵庫のJavaDoc
23