変数のスコープの設計判断能力

変数のスコープの設計判断能力
を育成するプログラミング教育
政策・メディア研究科 修士課程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