...

Stateパターン

by user

on
Category: Documents
17

views

Report

Comments

Transcript

Stateパターン
専門演習B(木5)
Java の復習
•  以下のキーワードで分からないものがある場
合は「プログラミング基礎」の資料で要復習! –  変数、型 –  条件分岐、繰り返し –  関数(メソッド) –  クラス、オブジェクト –  配列(array)
題材:心理学実験っぽいアプリ
1. 
2. 
3. 
4. 
5. 
src.zip をダウンロード 解凍 Eclipse で Javaプロジェクトを作成 src フォルダに src.zip の中身をコピー 実行
状態遷移図
状態(ノード)
遷移(エッジ)
状態遷移図の作り方
•  可能な状態をすべて書きだす •  各状態で可能な行動をすべて書きだす (矢印の元) •  各行動の結果の遷移先をつなぐ (矢印の先) サンプルアプリの状態遷移図
ボタン
時間経過
ボタン
時間経過
時間経過
ボタン
状態遷移図からの実装 (復習:Scratchの場合)
1. クリック
2. クリックイベント通知
4. 状態変更を通知
コントローラ (ステージのスクリプト)
3. 状態遷移を決定 (変数statusを変更)
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ミリ秒 = 1秒
Fly UP