変数のスコープの設計判断能力 を育成するプログラミング教育 政策・メディア研究科 修士課程1年 杉浦 学 [email protected] [email protected] 1 2 発表の流れ 1. 2. 3. 4. 5. 本教育の概要 問題意識 教育手法 授業例 まとめ 3 1.本教育の概要 4 教育の概要 変数のスコープについての設計判断能力 を育成するための教育 プログラミングの初学者を対象とする 教育手法 HCPチャートからデータ設計を導出する 受講者間でソースコードレビューを行う 5 2.問題意識 6 重要と考える能力 プログラムの設計判断能力 構造化プログラミングでいえば 変数 メソッド化 オブジェクト指向プログラミングでいえば クラス設計 7 既存の教育の問題点 ソースの読解能力のみに注目 文法エラーのないプログラムは書けるようになる 図:ブロックについての解説例 どのように変数のスコープを設計するかについて は議論されない 8 既存の教育の弊害 理由のないグローバル変数化 コンパイルエラーの場当たり的解決 結果,動的エラーの原因になる int i = 0; ・・・ ・・・ ・・・ ・・・ for (i = 0; i < 10; i++) { ・・・・・・・ } ソース:イテレーターの変数が局所化されていないソースコードの例 9 問題の原因分析 プログラミングの初学者は, プログラムを設計せずに実装してしまう 有効な手法が教育されていない 必要性の認識が低い データ設計を効率的に行う手法が教育され ない 変数の型にこだわってしまう 細かい技術の知識を習得しようとする 10 HCPチャート Hierarchical and Compact Description Chart (階層化コンパクトチャート) NTTで開発された プログラムの目的を階層化して表現する図法 記述された目的はそのままソースのコメントへ 処理の構造を記述する記号 繰り返し 条件分岐 11 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(); } ・・・・・(以下略) 12 3.教育手法 13 HCPチャートの使用法 基本設計はデータを記述しないで行う チャートを元にデータと使用範囲を導出 それを設計の指針にする 14 設計作業の手順 1. 2. 3. 4. HCPチャートを作成する チャートを見ながら、プログラムに必要 かつ重要であると考えられるデータとそ の目的をピックアップする チャートの各項目とその目的達成に必 要なデータを線で結ぶ チャートの階層構造を見ながら、各デー タが必要な範囲を線で囲む 15 1.HCPチャートを作成する 16 2.データと目的をピックアップする 単語 つづり 意味 アプリケーションに登録されているデータ を保存しておくため コマンド 入力されたコマンドを保存しておくため 17 3.各項目とデータを線で結ぶ 18 4.データが必要な範囲を線で囲む 19 相互ソースコードレビュー 内容 お互いに同じ課題を実装して,議論を行うプラクティ ス 効果 設計に正解はないという認識を育てる 様々な可能性を認識する効果 相手に理由が説明できることが重要 可読性の高いソース作成へのきっかけ 20 採用手法の効果とねらい HCPチャート→ 設計判断のひとつの指針となる 設計に正解はない 初学者にとっては指針が必要 Ex). メソッドのインターフェース設計の指針 ソースレビュー→ 理由を考えて設計する能力を育成する グローバル変数にする利点,欠点 設計の理由を考えて実装を行うことができる 21 4.授業例 22 具体的な授業例 前提知識 用意するもの 仕様書からある程度のHCPチャートが作成できること 変数の束縛範囲がどうなるかという知識があること データ記入演習用のHCPチャート 課題用のプログラムの仕様書 授業展開 HCPチャートにデータを記入する演習 1. 2. 教師が用意したHCPチャートに必要なデータを書き込む HCPチャートを交換し、生徒同士が意見を交換する(データ設計の理由を述べる) 自分でデータを設計して実装する演習 1. 2. 3. 4. 5. 課題のプログラムを提示し、HCPチャートを作成させる 自作したチャートに必要なデータを記入する 実装を行う 実装過程で、チャートに記入したデータとの関連を変更した場合、その理由を記入させておく。 実装した課題のソースを授業の受講者の前でソースコードレビューを行い、(4)で記入しておいた 理由を同時に発表させる。 23 5.まとめ 24 まとめ 設計判断能力を育成する教育 HCPチャートからのデータの導出 初学者にとっては,設計判断の指針が必要 相互ソースレビュー 設計判断の議論が有益 25
© Copyright 2024 ExpyDoc