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