250 likes | 358 Views
変数のスコープの設計判断能力 を育成するプログラミング教育. 政策・メディア研究科 修士課程 1 年 杉浦 学 manabu@sfc.keio.ac.jp gackt@crew.sfc.keio.ac.jp. 発表の流れ. 本教育の概要 問題意識 教育手法 授業例 まとめ. 1. 本教育の概要. 教育の概要. 変数のスコープについての設計判断能力を育成するための教育 プログラミングの初学者を対象とする 教育手法 HCP チャートからデータ設計を導出する 受講者間でソースコードレビューを行う. 2. 問題意識. 重要と考える能力.
E N D
変数のスコープの設計判断能力を育成するプログラミング教育変数のスコープの設計判断能力を育成するプログラミング教育 政策・メディア研究科 修士課程1年 杉浦 学 manabu@sfc.keio.ac.jp gackt@crew.sfc.keio.ac.jp
発表の流れ • 本教育の概要 • 問題意識 • 教育手法 • 授業例 • まとめ
教育の概要 • 変数のスコープについての設計判断能力を育成するための教育 • プログラミングの初学者を対象とする • 教育手法 • HCPチャートからデータ設計を導出する • 受講者間でソースコードレビューを行う
重要と考える能力 • プログラムの設計判断能力 • 構造化プログラミングでいえば • 変数 • メソッド化 • オブジェクト指向プログラミングでいえば • クラス設計
既存の教育の問題点 • ソースの読解能力のみに注目 • 文法エラーのないプログラムは書けるようになる • どのように変数のスコープを設計するかについては議論されない 図:ブロックについての解説例
既存の教育の弊害 • 理由のないグローバル変数化 • コンパイルエラーの場当たり的解決 • 結果,動的エラーの原因になる inti=0; ・・・ ・・・ ・・・ ・・・ for(i=0;i<10;i++){ ・・・・・・・ } ソース:イテレーターの変数が局所化されていないソースコードの例
問題の原因分析 • プログラミングの初学者は, • プログラムを設計せずに実装してしまう • 有効な手法が教育されていない • 必要性の認識が低い • データ設計を効率的に行う手法が教育されない • 変数の型にこだわってしまう • 細かい技術の知識を習得しようとする
HCPチャート • Hierarchical and Compact Description Chart (階層化コンパクトチャート) • NTTで開発された • プログラムの目的を階層化して表現する図法 • 記述された目的はそのままソースのコメントへ • 処理の構造を記述する記号 • 繰り返し • 条件分岐
HCPチャートとソースの例 /** *じゃんけんアプリケーション */ void main() { //アプリケーションの説明をする System.out.println("じゃんけん♪アプリケーション"); System.out.println("(プレイヤーAの手に0を入力すると終了します)"); //一人目の名前を入力する System.out.println("プレイヤーAの名前を入力してください"); System.out.print(">>"); System.out.flush(); playerNameA = Input.getString(); //二人目のの名前を入力する System.out.println("プレイヤーBの名前を入力してください"); System.out.print(">>"); System.out.flush(); playerNameB = Input.getString(); //じゃんけんをする while (true) { //一人目の手を入力する System.out.println(playerNameA + "さんの手を入力してください"); System.out.println("1.グー, 2.チョキ, 3.パー (0.終了)"); System.out.print(">>"); System.out.flush(); playerHandA = Input.getInt(); //終了コードであるか調べる if (playerHandA == 0) { //終了コードなら break; //アプリケーションを終了する } //相手の手が見えないようにする for (int i = 0; i < 100; i++) { System.out.println(); } ・・・・・(以下略)
HCPチャートの使用法 • 基本設計はデータを記述しないで行う • チャートを元にデータと使用範囲を導出 • それを設計の指針にする
設計作業の手順 • HCPチャートを作成する • チャートを見ながら、プログラムに必要かつ重要であると考えられるデータとその目的をピックアップする • チャートの各項目とその目的達成に必要なデータを線で結ぶ • チャートの階層構造を見ながら、各データが必要な範囲を線で囲む
2.データと目的をピックアップする 単語 • アプリケーションに登録されているデータを保存しておくため • 入力されたコマンドを保存しておくため つづり 意味 コマンド
相互ソースコードレビュー • 内容 • お互いに同じ課題を実装して,議論を行うプラクティス • 効果 • 設計に正解はないという認識を育てる • 様々な可能性を認識する効果 • 相手に理由が説明できることが重要 • 可読性の高いソース作成へのきっかけ
採用手法の効果とねらい HCPチャート→ • 設計判断のひとつの指針となる • 設計に正解はない • 初学者にとっては指針が必要 • Ex). メソッドのインターフェース設計の指針 ソースレビュー→ • 理由を考えて設計する能力を育成する • グローバル変数にする利点,欠点 • 設計の理由を考えて実装を行うことができる
具体的な授業例 • 前提知識 • 仕様書からある程度のHCPチャートが作成できること • 変数の束縛範囲がどうなるかという知識があること • 用意するもの • データ記入演習用のHCPチャート • 課題用のプログラムの仕様書 • 授業展開 • HCPチャートにデータを記入する演習 • 教師が用意したHCPチャートに必要なデータを書き込む • HCPチャートを交換し、生徒同士が意見を交換する(データ設計の理由を述べる) • 自分でデータを設計して実装する演習 • 課題のプログラムを提示し、HCPチャートを作成させる • 自作したチャートに必要なデータを記入する • 実装を行う • 実装過程で、チャートに記入したデータとの関連を変更した場合、その理由を記入させておく。 • 実装した課題のソースを授業の受講者の前でソースコードレビューを行い、(4)で記入しておいた理由を同時に発表させる。
まとめ • 設計判断能力を育成する教育 • HCPチャートからのデータの導出 • 初学者にとっては,設計判断の指針が必要 • 相互ソースレビュー • 設計判断の議論が有益