専門演習 B (木5)
Java の復習
•
以下のキーワードで分からないものがある場 合は「プログラミング基礎」の資料で要復習!
–
変数、型
–
条件分岐、繰り返し
–関数(メソッド)
–
クラス、オブジェクト
–配列(
array)
題材:心理学実験っぽいアプリ
1. src.zip
をダウンロード
2.解凍
3. Eclipse
で
Javaプロジェクトを作成
4. src
フォルダに
src.zipの中身をコピー
5.実行
状態遷移図
状態(ノード)
遷移(エッジ)
状態遷移図の作り方
•
可能な状態をすべて書きだす
•
各状態で可能な行動をすべて書きだす
(矢印の元)
•
各行動の結果の遷移先をつなぐ
(矢印の先)
サンプルアプリの状態遷移図
ボタン
ボタン
ボタン 時間経過
時間経過
時間経過
状態遷移図からの実装
(復習:
Scratchの場合)
1.
クリック
コントローラ
(ステージのスクリプト)
2.
クリックイベント通知
3.
状態遷移を決定
(変数
statusを変更)
4.
状態変更を通知
5.
状態(変数
status)
に合わせて表示を変更
状態遷移図からの実装
(
Javaの場合)
•
現在の状態を表す変数
state(
MainFrame.javaを参照)
•
各状態に対応するクラスがコントロール
– Ini@alState
– CountDownState – ShowNumberState – InputAnswerState – ResultState
実装(つづき)
•
ボタンが押されたとき
or時間経過したとき
gotoNextStateが実行される (
MainFrame)
1. gotoNextState
1.
現在の
Stateが、次の
Stateを返す
2. setState
を実行する
2. setState
1.
現在の状態に合わせて、各部品を更新する
2.必要に応じてタイマーをセットする
interface
•
必要な関数の一覧を決めておく機能
•
例:今回、状態を表すクラスにほしい機能
–
次の状態を教えてくれる機能
–
各部品の状態を教えてくれる機能
–など
•
~
Stateクラスは
interface Stateを実装
1. implements State
と宣言
2.すべてのメソッドを実装
interface (他の例)
• Ac@onListener
– ac@onPerformed
というメソッド1つの
interface• buOon.addAc@onListener
–
ボタンを押したときに
ac@onPerformedを実行し てくれるように登録する
•
今回は「無名クラス」を作っている
無名(匿名)クラス
•
1つしかオブジェクトを作らない簡単なクラス
を作るときに、その場でちょちょっと作る機能
Timer
• Timer / TimerTask
は
BuOon / Ac@onListenerと似たような関係
–
指定した時間が経ったら~する
–ボタンが押されたら~する
• TimerTask
は
interfaceではない
– abstract class TimerTask –
継承してクラスを作る
継承
•
親クラスを継承した子クラスは、
親クラスの機能を全部受け継ぐ
•
子クラスに独自の機能を追加できる
•
例:
MainFrame extends JFrameデザインパターン
•
「こういうプログラムはこう書くときれいに書け る」という定石のようなもの
•
今回の状態遷移のパターンは
「
Stateデザインパターン」などと呼ばれる
課題(どちらか1つ)
•
短期記憶アプリの機能追加
– [
必須
]正解か不正解かの判定をして表示する
– [必須
]実験結果をファイルに保存する
– [
オプション
]桁数を変更できるようにする
•
他の実験
–
反応時間の測定(表示されたのが○○だったら キーを押すけど違ったら押さない
etc.)
–
結果のファイル保存機能は必須
提出方法
•
すべての
~.javaをまとめた
zipファイルを
課題提出システムから提出
(授業の
HPからリンクあり)
ヒント:どんな component があるか
• A Visual Guide to Swing Components
– hOp://download.oracle.com/javase/tutorial/ui/
features/compWin.html
– How to use …
にリンクされている
ヒント:ファイルに保存
•
プログラミング基礎 「入出力ストリーム」
hOp://www2.kobe-‐u.ac.jp/~tnishida/course/
2011/Programming/index.htm
•
どこに保存プログラムを入れるかは悩み所
–
保存ボタンがある
Stateを作る?
orいつの間に か保存する?
–
どこかの
getNextStateの中に入れてしまう?
– interface State
を拡張して、
MainFrameで保存?
ヒント:桁数の変更
•
スライダーとかスピナーを追加する
ヒント:キーを押すのに反応する
• addKeyListener(KeyListener)
• KeyListener
は
interfaceヒント:時間の測定
• System.currentTimeMillis
メソッドを使う
• 1000