変数のスコープの設計判断能力 を育成するプログラミング教育

25
1 変変変変変変変変変変変変変変 変変変変変変変変変変変変変変 変変 変変変変変変変 変変変変 1変 変変 変 [email protected] [email protected]

Upload: prentice

Post on 06-Jan-2016

20 views

Category:

Documents


3 download

DESCRIPTION

変数のスコープの設計判断能力 を育成するプログラミング教育. 政策・メディア研究科 修士課程 1 年 杉浦 学 [email protected] [email protected]. 発表の流れ. 本教育の概要 問題意識 教育手法 授業例 まとめ. 1. 本教育の概要. 教育の概要. 変数のスコープについての設計判断能力を育成するための教育 プログラミングの初学者を対象とする 教育手法 HCP チャートからデータ設計を導出する 受講者間でソースコードレビューを行う. 2. 問題意識. 重要と考える能力. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 変数のスコープの設計判断能力 を育成するプログラミング教育

1

変数のスコープの設計判断能力を育成するプログラミング教育

政策・メディア研究科 修士課程 1 年

杉浦 学[email protected]

[email protected]

Page 2: 変数のスコープの設計判断能力 を育成するプログラミング教育

2

Page 3: 変数のスコープの設計判断能力 を育成するプログラミング教育

3

発表の流れ

1. 本教育の概要2. 問題意識3. 教育手法4. 授業例5. まとめ

Page 4: 変数のスコープの設計判断能力 を育成するプログラミング教育

4

1.本教育の概要

Page 5: 変数のスコープの設計判断能力 を育成するプログラミング教育

5

教育の概要

変数のスコープについての設計判断能力を育成するための教育

プログラミングの初学者を対象とする

教育手法 HCPチャートからデータ設計を導出する 受講者間でソースコードレビューを行う

Page 6: 変数のスコープの設計判断能力 を育成するプログラミング教育

6

2.問題意識

Page 7: 変数のスコープの設計判断能力 を育成するプログラミング教育

7

重要と考える能力

プログラムの設計判断能力 構造化プログラミングでいえば

変数 メソッド化

オブジェクト指向プログラミングでいえば クラス設計

Page 8: 変数のスコープの設計判断能力 を育成するプログラミング教育

8

既存の教育の問題点 ソースの読解能力のみに注目 文法エラーのないプログラムは書けるようになる

どのように変数のスコープを設計するかについては議論されない

図:ブロックについての解説例

Page 9: 変数のスコープの設計判断能力 を育成するプログラミング教育

9

既存の教育の弊害

理由のないグローバル変数化 コンパイルエラーの場当たり的解決 結果,動的エラーの原因になる

int i = 0;    ・・・    ・・・    ・・・    ・・・for (i = 0; i < 10; i++) {    ・・・・・・・}

ソース:イテレーターの変数が局所化されていないソースコードの例

Page 10: 変数のスコープの設計判断能力 を育成するプログラミング教育

10

問題の原因分析

プログラミングの初学者は, プログラムを設計せずに実装してしまう

有効な手法が教育されていない 必要性の認識が低い

データ設計を効率的に行う手法が教育されない 変数の型にこだわってしまう 細かい技術の知識を習得しようとする

Page 11: 変数のスコープの設計判断能力 を育成するプログラミング教育

11

HCPチャート Hierarchical and Compact Description Chart (階層化コンパクトチャート)

NTTで開発された

プログラムの目的を階層化して表現する図法 記述された目的はそのままソースのコメントへ

処理の構造を記述する記号 繰り返し 条件分岐

Page 12: 変数のスコープの設計判断能力 を育成するプログラミング教育

12

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();    }

  ・・・・・(以下略)

Page 13: 変数のスコープの設計判断能力 を育成するプログラミング教育

13

3.教育手法

Page 14: 変数のスコープの設計判断能力 を育成するプログラミング教育

14

HCPチャートの使用法

基本設計はデータを記述しないで行う チャートを元にデータと使用範囲を導出

それを設計の指針にする

Page 15: 変数のスコープの設計判断能力 を育成するプログラミング教育

15

設計作業の手順

1. HCPチャートを作成する2. チャートを見ながら、プログラムに必要かつ重要であると考えられるデータとその目的をピックアップする

3. チャートの各項目とその目的達成に必要なデータを線で結ぶ

4. チャートの階層構造を見ながら、各データが必要な範囲を線で囲む

Page 16: 変数のスコープの設計判断能力 を育成するプログラミング教育

16

1.HCPチャートを作成する

Page 17: 変数のスコープの設計判断能力 を育成するプログラミング教育

17

2.データと目的をピックアップする

アプリケーションに登録されているデータを保存しておくため

入力されたコマンドを保存しておくため

単語

コマンド

つづり

意味

Page 18: 変数のスコープの設計判断能力 を育成するプログラミング教育

18

3.各項目とデータを線で結ぶ

Page 19: 変数のスコープの設計判断能力 を育成するプログラミング教育

19

4.データが必要な範囲を線で囲む

Page 20: 変数のスコープの設計判断能力 を育成するプログラミング教育

20

相互ソースコードレビュー

内容 お互いに同じ課題を実装して,議論を行うプラクティス

効果 設計に正解はないという認識を育てる

様々な可能性を認識する効果 相手に理由が説明できることが重要

可読性の高いソース作成へのきっかけ

Page 21: 変数のスコープの設計判断能力 を育成するプログラミング教育

21

採用手法の効果とねらい

HCPチャート→ 設計判断のひとつの指針となる

設計に正解はない 初学者にとっては指針が必要

Ex). メソッドのインターフェース設計の指針ソースレビュー→ 理由を考えて設計する能力を育成する

グローバル変数にする利点,欠点 設計の理由を考えて実装を行うことができる

Page 22: 変数のスコープの設計判断能力 を育成するプログラミング教育

22

4.授業例

Page 23: 変数のスコープの設計判断能力 を育成するプログラミング教育

23

具体的な授業例 前提知識

仕様書からある程度の HCPチャートが作成できること 変数の束縛範囲がどうなるかという知識があること

用意するもの データ記入演習用の HCPチャート 課題用のプログラムの仕様書

授業展開 HCPチャートにデータを記入する演習

1. 教師が用意した HCPチャートに必要なデータを書き込む2. HCPチャートを交換し、生徒同士が意見を交換する(データ設計の理由を述べる)

自分でデータを設計して実装する演習1. 課題のプログラムを提示し、 HCPチャートを作成させる2. 自作したチャートに必要なデータを記入する3. 実装を行う4. 実装過程で、チャートに記入したデータとの関連を変更した場合、その理由を記入させて

おく。5. 実装した課題のソースを授業の受講者の前でソースコードレビューを行い、 (4)で記入し

ておいた理由を同時に発表させる。

Page 24: 変数のスコープの設計判断能力 を育成するプログラミング教育

24

5.まとめ

Page 25: 変数のスコープの設計判断能力 を育成するプログラミング教育

25

まとめ

設計判断能力を育成する教育 HCPチャートからのデータの導出

初学者にとっては,設計判断の指針が必要 相互ソースレビュー

設計判断の議論が有益