情報1

情報1
2006.9.4
第1回:状態遷移 その1
1
準備
• Moodleのアドレスが変わりました
– http://moodle.crew.sfc.keio.ac.jp
– 情報1の2学期のページにログインしてみよう
• Squeakを最新版に更新しましょう
– 現在の最新バージョンは1.1.3です
– 情報1の2学期のページにダウンロードのリンクが
あります
– ついでにZドライブを整理しましょう
2
ITクラフトマンシップ
• ITクラフトマンシップ(経済産業省)
– 日本語プログラミングとSqueakによるソフトウェア
開発プロジェクト体験講座
• 小学生から高校生まで
• ことだま on Squeak を活用し,抽象的なアルゴリズム
と実践的なプログラミングを学習する
– 経済産業省のプレスリリース
3
2学期の授業内容
• 状態遷移の設計・実装
– 状態遷移図を使ったプログラムの設計方法
– 状態変数を使ったプログラムの実装方法
• 複数の要素を扱うアルゴリズムの設計・実装
– 並び替え(ソート)
– 検索(サーチ)
• ミニプロジェクト
– 複数メンバーによる協調作業
– スケジューリングとProject Management
4
2学期の授業スケジュール
第1回
9/4
状態遷移 その1
第2回
9/11
状態遷移 その2
第3回
9/25
アルゴリズム その1
第4回
10/2
アルゴリズム その2
第5回
10/16
アルゴリズム その3
第6回
10/30
ミニプロジェクト
第7回
11/6
ミニプロジェクト
第8回
11/13
ミニプロジェクト
第9回
11/20
ミニプロジェクト
第10回
11/27
ミニプロジェクト
※ タイピングテストの再試験は9/11を予定しています
5
今回と次回の授業の目標
• 状態とは何かについて考えてみよう
• 状態遷移図を使ってプログラムを設計してみ
よう
• 状態変数を用いて,設計したプログラムを実
装してみよう
6
ストップウォッチを作ってみよう
• 皆さんに見せるストップウォッチと同じ動きをするも
のを作ってください
• 見た目はこだわらずに,動作することを第一に考え
てください
• 制限時間は30分
7
動作チェックと採点(20点満点)
• 1. 停止しているストップウォッチのスタート・ストップ
ボタンを押すと計測が始まりますか?
ここまでで5点獲得
• 2. 計測中にスタート・ストップボタンを押すと計測が
止まりますか?(停止と計測の再開が何度でもでき
ますか?)
ここまでで5点獲得
• 3. 停止している時にリセットボタンを押すと時間がリ
セットされますか?
ここまでで5点獲得
• 4. 計測中にリセットボタンを押しても計測中のままで
すか?
ここまでで5点獲得
8
何が難しいのか
• ポイント
– 「スタート・ストップボタン」は名前の通り,1つで2つの役割
を持っている
– 「リセットボタン」は常にリセット機能が動作してはならない
1. ボタンの役割はストップウォッチ
の状態で決まる
2. ボタンを押すとストップウォッチ
の状態が変わる
9
状態遷移図
• プログラムの状態と遷移(移り変わり)を表現
するための設計図法
角の丸い長方形 → 1つの状態を表現する
黒丸 → 遷移先の状態が初期状態
矢印 → 状態が変わる(遷移)を表現する
do → その状態の時に繰り返す処理
イベント → 遷移が起こるきっかけ
アクション → 遷移が起こる時に1回だけ行う処理
10
例:スーパーマリオの状態遷移図
11
例:スクリプトの状態遷移図
• スクリプトを作り,全スクリプトツールを使って
検証してみましょう
12
個人課題
• ストップウォッチの状態遷移図を書いてみま
しょう
– 1人で取り組むこと
– 配布した設計シートに記入すること
– 授業後に回収します
13
相互レビューと完成版の作成
• ペアになって作業すること
– 相棒と自分の状態遷移図と見比べてみよう
•
•
•
•
状態(とdoの内容)は?
遷移は?
イベントは?
アクションは?
– 2人の状態遷移図の良いトコどりをして,ペアで1
枚,完成版の状態遷移図を完成させましょう
– 配布した設計シートに記入すること
– 授業後に提出してもらいます
14
プログラムを作るときの手順
どんなプログラムを作るか考える(分析)
どうやってそのプログラムを作るか考える(設計)
プログラムを作る(実装)
作ったプログラムを検証する(テスト)
15
ある大学生が書いた状態遷移図
• レビューしてみましょう
16
レビュー結果
• 初期状態はどの状態?
• 停止中や数値増加中にリセットボタンを押し
たらどうなるの?
• 数値一定の時にスタート・ストップボタンを押
したらどうなるの?
• 「数値の増加が止まる」は書く必要がない(書
いてなければ増えない)
17
修正後の状態遷移図
18
更にレビューしてみましょう
• 停止中と数値一定は1つの状態にできる
– 「数値一定」状態の動作
• リセットボタンを押すと
– 停止中へ遷移する
– 数値を0にする
まったく同じ
• スタート・ストップボタンを押すと
– 数値増加中へ遷移する
– 「停止中」状態の動作
• リセットボタンを押すと
– 遷移しない
– 数値を0にしても問題なし
• スタート・ストップボタンを押すと
– 数値増加中へ遷移する
19
洗練した状態遷移図
• 単純な方が間違いが発見しやすい
• 単純な方が実装が簡単
20
次回の予定
• いよいよ,設計したストップウォッチを実装し
てみよう
• タイピングテストの再試験を予定している人
は最後の練習をしておいてください
21
今日の授業はおしまい
お疲れ様でした
22
実装の方略
• 変数を使ってストップウォッチの状態を記憶し
ておく
• ボタンクリックによって行われる状態遷移とア
クションは各ボタンのスクリプトに定義する
• 各状態のdoを1つのスクリプトにまとめる(常
に繰り返し実行しておく)
23
実装その1:状態の記憶
• 状態を記憶しておくために変数を利用
– ビューアーの上部の「V」をクリックし,状態という
名前で変数を作成する
• 各状態を状態変数の値で表現する
– 状態=1 → 停止中
– 状態=2 → 計測中
24
実装その2:do
• 各状態のdoはストップウォッチの1つのスクリ
プトにまとめて,繰り返し実行する(チクタクさ
せる)
• 状態が計測中(状態=2)の時だけ,計測を行
う(数値を増加させる)
25
実装その3:アクションと遷移
• 各アクションと状態遷移はボタンのスクリプトに組み
込む
• スクリプトをマウスダウン実行にするのを忘れず
に!
– リセットボタンが押された
• 停止中の場合 → 数値を0へリセットする
• 計測中の場合 → なにもしない
– スタート・ストップボタンが押された
• 停止中の場合 → 計測中へ状態を遷移させる(状態=2)
• 計測中の場合 → 停止中へ状態を遷移させる(状態=1)
26
参考:各ボタンのスクリプト
• リセットボタン
• スタート・ストップボタン
27
課題
• 基本課題
– ダッシュゲームを作りなさい
• ボタンを押す(笛を吹く)と部員の走る向きが反転し,画像も切り替わる
– ヒント
• 部員を作るには3つのオブジェクトが必要です
• 見た目を変えるためには「見た目を似せる」タイルを使いましょう
• 応用課題
– ストップウォッチを改造し,リセットボタンをリセット・スプリットボタンに
変更しなさい
※ 状態遷移図で設計してから実装すること
28