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

Slides:



Advertisements
Similar presentations
1 プリミティブ Web サービスの 入出力データに関する一考察 2005 年 3 月 21 日 松江工業高等専門学校 情報工学科 奈良先端科学技術大学院大学 情報科学研究科 越田高志 電子情報通信学会 2005年総合 大会.
Advertisements

1 情報基礎 A 第 9 週 プログラミング入門 VBA の基本文法 1 準備・変数・データの入出力 徳山 豪・全 眞嬉 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
シーケンス図の生成のための実行履歴圧縮手法
プログラミング入門 (教科書1~3章) 2005/04/14(Thu.).
オブジェクト指向プログラミング(4) 静的分析(2)
パイプラインパフォーマンス管理 SAP Best Practices.
6/19 前回復習 for文による繰り返し計算 演習1:1から10まで足して画面に結果を表示する 提出者: 1人
アルゴリズムとプログラミング (Algorithms and Programming)
情報伝播によるオブジェクト指向プログラム理解支援の提案
繰り返し プログラミング 第4回 繰り返し プログラミング第4回.
プログラミング論 II 電卓,逆ポーランド記法電卓
社会人学習講座 「Javaプログラミング概論」
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
AspectScope によるアスペクトとクラスのつながりの視覚化
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
C#とC++とオブジェクト指向 上甲 健史.
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
UML入門 UML PRESS vol.1 より 時松誠治 2003年5月19日.
入出力データ型に透過な Webサービス動的実行システム 松江工業高等専門学校 情報工学科 越田高志 情報処理学会第68回全国大会
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
【プログラミング応用】 必修2単位 通年 30週 授業形態:演習.
情報教育論 第6回 HCPチャートを用いたプログラムの設計 ~入門編~ 2004・11・15
~手続き指向からオブジェクト指向へ[Ⅱ]~
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
動的依存グラフの3-gramを用いた 実行トレースの比較手法
第10回関数 Ⅱ (ローカル変数とスコープ).
アルゴリズムとプログラミング (Algorithms and Programming)
第1回 プログラムの基本 他人が読めるプログラムを書く.
社会シミュレーションのための モデル作成環境
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
コードクローンの動作を比較するためのコードクローン周辺コードの解析
ルーブリック・チャート(評価) の活用と課題
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
日本の高校における英語の授業は 英語がベストか?
1-3 UMLの図(ダイアグラム) コンポーネント図 システムの物理的な構成を表現 ソフトウェアコンポーネントの依存性を表現
オブジェクト プログラミング 第2回 プログラムの基本.
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
情報基礎Ⅱ (第1回) 月曜4限 担当:北川 晃.
「クラナビ」 カード操作規約 enTranceプロジェクト.
設計情報の再利用を目的とした UML図の自動推薦ツール
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
ソフトウェア制作論 平成30年11月28日.
第5回 プログラミングⅡ 第5回
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
プログラム分散化のための アスペクト指向言語
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
オブジェクト指向 プログラミング 第四回 知能情報学部 新田直也.
コンパイラ 2012年10月11日
skill-net(MILESTONE CAI,笈川他,1982)[Fortranの課題選択など]
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
プログラミング 平成28年10月25日 森田 彦.
プログラミング序論演習.
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラム理解のための 付加注釈 DocumentTag の提案
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
Josh : バイトコードレベルでのJava用 Aspect Weaver
プログラミング 2 静的変数.
Presentation transcript:

変数のスコープの設計判断能力 を育成するプログラミング教育 政策・メディア研究科 修士課程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チャートからのデータの導出 相互ソースレビュー 初学者にとっては,設計判断の指針が必要 設計判断の議論が有益