文書のレビュー 大岩研究会Ⅱ サブゼミ

Keio University SFC
CreW Project
情報教育論 第6回
HCPチャートを用いたプログラムの設計
~入門編~
2004・11・15
政策・メディア研究科
杉浦
学
修士課程2年
Keio University SFC
CreW Project
授業の前に
• 配布物
– 授業スライド×1部
– HCPチャートの記入用紙×3枚
• 注意
– PCは使用しないので、しまってください
– 筆記用具がない人は申し出てください
– 質問をされたら、何でもいいから答えてみてください
• 確認
–
–
–
–
HCP Viewerのインストールはうまくいきましたか?
言霊のバージョンアップはうまくいきましたか?
オブジェクト・プログラミングを履修済みの方はいますか?
これまでの授業の出席状況はいかがですか?
2
Keio University SFC
CreW Project
授業の流れ
プログラムの基本構造
プログラムを作る手順
HCPチャートによる設計
3
Keio University SFC
CreW Project
学習目標
• HCPチャートを用いて50行程度のプログラ
ムを設計することができる
– プログラムの基本構造を説明できる
– プログラムを作る手順の概略を説明できる
– HCPチャートでプログラムの設計を表現できる
4
Keio University SFC
CreW Project
プログラムの基本構造
プログラムの基本構造
プログラムを作る手順
HCPチャートによる設計
Keio University SFC
CreW Project
前回の課題より
• ローレル指数を求めるプログラム(課題3)
1:
2:
3:
4:
5:
6:
7:
8:
変数を定義する。名前を「身長」とする。
変数を定義する。名前を「体重」とする。
変数を定義する。名前を「ローレル指数」とする。
身長に168を書き込む。
体重に55を書き込む。
体重の値×10000000÷身長の値÷身長の値÷身長の値を、ローレル指数に書き込む。
「あなたのローレル指数は」を出力する。
ローレル指数の値を出力する。
6
Keio University SFC
CreW Project
[質問]変更箇所はどこでしょうか?
• 実は前回の授業で紹介したソースコードに
変更を加えました。
• さて、変更箇所はどこでしょうか?
• 解答
– コメントを削除した
– 空行を削除した
7
Keio University SFC
CreW Project
両者の比較
• 前回のプログラムと同じ事柄
– プログラムの機能
• 前回のプログラムと異なる事柄
– ソースコードの長さ(長くなった)
– ソースコードの可読性(見通しが悪くなった)
8
Keio University SFC
CreW Project
[議論]コメントと空行について
• コメントについて
– コメントは書かない方が良いのか?書く方が良いのか?
– コメントを書くとしたらどこに何を書くべきか?
• 空行について
– 空行は入れた方が良いのか?入れない方が良いのか?
– 空行を入れるとしたらどこに入れるべきか?
• コメントの記述と空行の挿入の指針を考えよう!
9
Keio University SFC
CreW Project
コメントと空行に関する指針
• コメントには目的を記述する
– 手段を記述したソースコードを説明する
– 人間がプログラムを素早く理解できる
– プログラムの改造が容易になる
• 行を目的でまとめ、目的の切れ目を空行で
表現する
– まとめた目的をブロックコメントで記述する
– これを目的のブロックと呼ぶ
10
Keio University SFC
CreW Project
すばやく理解できない
• コメントには目的を記述する。それにより、
人間がプログラムを素早く理解できる。ま
た、プログラムの改造が容易になる。空行
については、それぞれの行を目的でまとめ、
目的の切れ目を空行で表現するのがよい。
また、まとめた理由をコメントによって記
述する。これを目的のブロックと呼ぶ。
11
Keio University SFC
CreW Project
指針を適用したソースコード
• ローレル指数を求めるプログラム(課題3)
1 :※
2 : ※ ローレル指数を計算する
3 :※
4 :
5 : ※変数定義
6 : 変数を定義する。名前を「身長」とする。
7 : 変数を定義する。名前を「体重」とする。
8 : 変数を定義する。名前を「ローレル指数」とする。
9 :
10: ※体型の情報を入力する
11: 身長に168を書き込む。
12: 体重に55を書き込む。
13:
14: ※ローレル指数を計算する
15: 体重の値×10000000÷身長の値÷身長の値÷身長の値を、ローレル指数に書き込む。
16:
17: ※計算したローレル指数を表示する
18: 「あなたのローレル指数は」を出力する。
19: ローレル指数の値を出力する。
12
Keio University SFC
CreW Project
入力-処理-出力
• 目的の各ブロックを見てみると「入力-処理-出
力」になっている
• 入力された情報を処理して、結果を出力するのが
プログラム(コンピュータ)の基本構造
– Webブラウザー
• URLを入力する - サーバーと通信する - Webページを出力する
– 電卓
• 数値を入力する - 演算する - 演算結果を出力する
– ファイル解凍ソフトウェア
• 圧縮ファイルを入力する - 解凍する - 解凍したファイルを出力する
13
Keio University SFC
CreW Project
入力-処理-出力の例
• ローレル指数を求めるプログラム(課題3)
1 :※
2 : ※ローレル指数を計算する
3 :※
4 :
5 : ※変数定義
6 : 変数を定義する。名前を「身長」とする。
7 : 変数を定義する。名前を「体重」とする。
8 : 変数を定義する。名前を「ローレル指数」とする。
9 :
10: ※体型の情報を入力する
入
11: 身長に168を書き込む。
12: 体重に55を書き込む。
力
13:
14: ※ローレル指数を計算する
15: 体重の値×10000000÷身長の値÷身長の値÷身長の値を、ローレル指数に書き込む。
16:
17: ※計算したローレル指数を表示する
出
18: 「あなたのローレル指数は」を出力する。
力
19: ローレル指数の値を出力する。
処
理
14
Keio University SFC
CreW Project
プログラムを作る手順
プログラムの基本構造
プログラムを作る手順
HCPチャートによる設計
Keio University SFC
CreW Project
新しいプログラムを作るために
• これまでは、既に存在するプログラムにつ
いて議論してきた
• これまでにないプログラムを新しく考えて
作る場合はどうしたらよいか?
16
Keio University SFC
CreW Project
[質問]プログラムを作る手順
• プログラムを作る手順を説明してください
– 自主的に作る場合
– 課題をやる場合
17
Keio University SFC
CreW Project
最初の一歩は様々
• 問題が具体的な場合
– ローレル指数を計算するプログラムを作れ
• ~を入力すると~を出力する
• ローレル指数の計算式は~である
• 問題が具体的でない場合
– 食生活が充実せず、太ってきたので健康の管理をしたい
• 現実ではどちらが多いか?
18
Keio University SFC
CreW Project
手順を整理してみる
• 前提:具体的な問題が与えられていない場合が多い
– これを何とかしたい
– もっと便利にしたい
– もっと効率を上げたい
• そのような時は、
– 最初に「どんなプログラムを作るべきか」を考える
– 次に「どうやってそのプログラムを作るか」を考える
• ポイント
– 「どんなプログラムを作るべきか」を決めないと「どうやって作るか」を議論しても
不毛である
– 「どうやって作るか」が決まらないと実際に作ることはできない
– 「どんなプログラムを作るべきか」が定まっていないと、期待どおりのプログラム
ができたかは検証できない
19
Keio University SFC
CreW Project
プログラムを作る手順
どんなプログラムを作るか考える
どうやってそのプログラムを作るか考える
プログラムを作る
作ったプログラムを検証する
20
Keio University SFC
CreW Project
プログラムを作る手順
分析
設計
実装
テスト
21
Keio University SFC
CreW Project
手順と成果物
分析
仕様書
設計
設計書
実装
ソースコード
テスト
22
Keio University SFC
CreW Project
HCPチャートによる設計
プログラムの基本構造
プログラムを作る手順
HCPチャートによる設計
Keio University SFC
CreW Project
[質問]プログラムの得意な人は?
• プログラムを作るのが得意な人は、「分析設計-実装-テスト」という手順を踏んでい
るのか?
• 解答
– きっと踏んでいる、でも素早く頭の中だけでやって
いることが多い
– だから、いきなりソースコードを書いているように見
える
24
Keio University SFC
CreW Project
設計が重要な理由
• プログラミングが苦手な人の場合
– 思いつくままにソースコードを記述して自爆する
– 設計していれば質問もしやすい
• 大規模で複雑なプログラムを作る場合
– 頭の中で考えただけでは分担作業ができない
– プログラムが得意でも、頭の中だけで考えられる量
には限界がある
25
Keio University SFC
CreW Project
HCPチャート
• HCPチャートとは
– 構造化プログラムを設計するための図法
– 日本電信電話株式会社(NTT)電気通信研究所で
開発
• HCPチャートの特徴
– 処理を目的から手段へ分解した階層構造で表現
– 実装されるプログラム構造と対応している
26
Keio University SFC
CreW Project
HCPチャートによる設計例
• ローレル指数を求めるプログラムの設計
目的から手段へ
目的から手段へ
27
Keio University SFC
CreW Project
プログラムの構造との対応 その1
1 :※
2 : ※ ローレル指数を計算する
3 :※
(途中省略)
9 :
10: ※体型の情報を入力する
11: 身長に168を書き込む。
12: 体重に55を書き込む。
13:
14: ※ローレル指数を計算する
15: 体重の値×10000000÷身長の値÷身長の値÷身長の値を、ローレル指数に書き込む。
16:
17: ※計算したローレル指数を表示する
18: 「あなたのローレル指数は」を出力する。
19: ローレル指数の値を出力する。
28
Keio University SFC
CreW Project
プログラムの構造との対応 その2
1 : public class RohrerCalculator {
2:
3 : /**
4:
* ローレル指数を計算する
5:
*/
6 : public static void main(String[] args) {
7:
(途中省略)
13:
//体型の情報を入力する
14:
height = 168;
15:
weight = 55;
16:
17:
//ローレル指数を計算する
18:
rohrer = weight * 10000000 / height / height / height;
19:
20:
//計算したローレル指数を表示する
21:
System.out.println("ローレル指数は" + rohrer + "です。");
22: }
23:}
29
Keio University SFC
CreW Project
[演習1]家を描くプログラム
• 課題
– 家を描くタートルのプログラムをHCPチャートを使っ
て設計せよ
• ポイント
– 徐々に目的から手段へ詳細化すること
– 3段目まで記述できるだろうか
30
Keio University SFC
CreW Project
[設計例]家を描くプログラム
31
Keio University SFC
CreW Project
近くの人と見比べてみよう
• よくある勘違い
– 手段だけを書いてしまう
• プログラムの文法が先にある人に多い
– 段階的に詳細化が行われていない
• 理解しにくくなる
– 正解があると思ってしまう
• 実装できれば良い
• 理解しやすければ良い
32
Keio University SFC
CreW Project
レビュー(日本語・目的)
33
Keio University SFC
CreW Project
[設計例]家を描くプログラム
• 繰り返し処理を明示する
の繰り返しで実現する
34
Keio University SFC
CreW Project
[設計例]肥満度を測定するプログラム
• 選択処理を明示する
35
Keio University SFC
CreW Project
[演習2]オウム返しプログラム
• 課題
– オウム返しプログラムを設計せよ
• ユーザが文字を入力すると、入力された文字をそのまま
表示(オウム返し)する
• Qという文字を入力するまで繰り返して動作する
• ポイント
– 繰り返し処理と選択処理を使う
– 繰り返し処理から脱出する必要がある
飛越し(脱出)
36
Keio University SFC
CreW Project
[設計例1]オウム返しプログラム
37
Keio University SFC
CreW Project
[設計例2]オウム返しプログラム
38
Keio University SFC
CreW Project
次回までの課題 その1
• 相性判断プログラムをHCPチャートを使って設計
せよ
– ユーザは以下の項目に関して入力する
• 男女それぞれの名前
• 男女それぞれについて相手のことを好きか嫌いか
– プログラムは以下の出力を行う
• 男女の相性
– 補足
• 気持ちの入力では、好き・嫌いの二通りだけでなく、複数の段階を
設けること
• それにより、相性の判断も四通り以上になるようにすること
• ユーザは男女二名で、各自が自分に関する情報を入力すると想定
する
39
Keio University SFC
CreW Project
次回までの課題 その2
•
肉屋のレシートを出力するプログラムをHCP
チャートを使って設計せよ
買う肉の種類の名前、その肉のグラム単価、買う量(g)を1
つ入力すると、税込価格の値段が表示される
2. 税込価格に対して、支払うお金の金額を入力する
3. 支払い金額が税込価格より小さければ、お金が足りないと
いうエラーを出力して、再度支払い価格の入力を求める
4. 支払い金額が税込価格より大きければ、お釣りの金額を
計算する
5. レシートを出力する
1.
•
買う肉の種類の名前、その肉のグラム単価、買う量(g)、定価、税
込価格、支払い金額を表示し、おつりがある場合はおつりの金額
も表示する
40
Keio University SFC
CreW Project
次回までの課題 その3
• パワーポイントを使って、今あなたが熱いと思う
こと、熱中していることを他の履修者に伝えるた
めのスライドを作成せよ
– スライドを見たあなた以外の履修者が熱中していることと、
その理由を簡単に説明できるようにすること
– プレゼンテーションをしなくとも、話の大筋が分かるようなス
ライドにすること
– スライドを見せられる時間は1枚あたり5秒程度だと想定す
ること
– 表紙を入れて5枚程度にまとめること
– マニアックな内容だとよい
– PowerPointが使えない人はいますか?
41
Keio University SFC
CreW Project
課題の提出について
• 次回(11/29)までの課題について
–
–
–
–
Subject:report06
[email protected] まで
11/28 24:00締め切り
注意
• ログイン名.zipに圧縮して添付すること
• 課題その1~その3で作ったHCPチャートとスライドは、次回の授業
時にそれぞれ2部印刷して持参すること
• 次回授業時は必ずPCを持参すること
• 今日明日中に授業の感想を提出すること
– Subject:report06-impression
– [email protected] まで
42
Keio University SFC
CreW Project
今日の授業は終わりです
• よい三田祭休みを…
43