解説を見る

Download Report

Transcript 解説を見る

1章 プログラム設計の役割
プログラム設計とは何か
ユーザの要求
ユーザの要求
要求仕様分析設計
(どんなシステムを作るべきか )
開発するシステム
開発するシステム
開発するソフトウェア群
開発するソフトウェア群
システム分析設計
(どんな構成・機能のシステムにすべきか )
ソフトウェア分析設計
(どんな構成・機能のソフトを開発すべきか )
いろいろなプログラム群
いろいろなプログラム群
GUI
GUI関連プログラム群
関連プログラム群
データべース関連プログラム群
データべース関連プログラム群
プログラム設計
(どんなデータ構造,アルゴリズムで
機能を実現すべきか)
+プログラミング
ネットワーク関連プログラム群
ネットワーク関連プログラム群
それぞれの技術の専門家が必要
共通する知識・技術
●
システム分析(どのようなソフトウェアが必要か)
【 性能・信頼性分析 】
【 データ分析 】 どんなデータが必要か?
【 システム要求分析 】
どんな処理(機能)が必要か?
データ構造図
データフロー図
データ辞書
ER図
プロセス仕様書
データ名1
外部エンティティ名
入力データ名1
プロセス名2
データ名3
関連名1
1
データ名2
プロセス名1
ストア名
実体名1
基本データ名1
基本データ名2
0..*
実体名2
基本データ名1
基本データ名2
基本データ名3
●システム設計(個々のソフトウェアがもつべき機能やデータを決める)
データ構造図
プロセス仕様書
IPOによる処理内容の記述例
レベル1.5
最短経路を求める
入力(I)
I1. ノード表
I2.各リンクの
両端ノード
I3. リンク間距離
I4. 出発ノードと
到着ノード
バージョン
1.0
記入者
処理(P)
大木
記入日
XX
並び換えデータ
出力(O)
1.ノード毎に結ばれている他のノード
とそのノードまでの距離を記録する形
式でデータを整理する
2.出発ノードから走者(あるいはトー
クン) を逐次進め進んできた経路を記
録する
並び換え要素 *
並び換えキー
1. 最短経路
3.最も短い距離を走ってきた走者の
記録が最短経路である
繰り返し
レコードポインタ
選択
連絡先
2. 最短距離
自宅電話番号
携帯電話番号
●ソフトウェア分析設計(各ソフトウェアはどのような構造や詳細な
機能をもつかを決める)
【 性能・信頼性設計 】
【 入出力設計 】
【 データベース設計 】
【 プログラム設計 】 プログラムはどのようなモジュール構造
をもつか,各モジュールはどのような機能をもつか
モジュール構造図
モジュール仕様図
#1.0出庫依頼の受付
チェック後の出庫依頼書
入荷通知
#1.1
出庫可能
かチェック
出庫依頼書
#1.1.1
出庫依頼
書を入力
#1.2 出 庫 不 可
の出庫依頼を記
録
#1.3 不足
品目の出庫を
指示
#1.2.1
在庫不足品リス
トへ書込む
在庫不足品
#1.3.1
在庫ファイル
を読む
#1.3.2
在庫不足品リ
ストを読む
空
#1.5積 荷 票を 受
/*
Size
= 0 */
取る
#1.4 出 庫
を指示
出庫指示
在庫不足品
#1.1.2
在庫ファイ
ルを読む
push(X)/size’++; top’=X
出力処理
入力処理
push(X)/size’++1; top’=X
空でない
/* Size > 0
*/
top
pop[size =1]/pop’=top;
size’=0
積荷票
pop[size =1]/pop’=top; size’-#1.4.1
出庫指示書
を出力
#1.5.1
積荷票
を入力
不足品出庫指示
#1.3.3
在庫ファイルへ
書込む
#1.3.4
不足品出庫指示
書を出力
#1.5.2
在庫ファイル
へ書込む
●簡単なモジュール論理設計の事例
(プログラム設計で機能概要とデータ構造は決定済み)
《プログラム仕様》
n個の棒の長さを昇順に並び換える。
棒の長さ
1
2
3
4
5
6
7
8
9
10
《データ構造仕
様》
要素番号
並び換えデータa
配列a
並び換え要素 *
1
2
3
4
5
6
7
8
9
10
《モジュール論理設計で行うこと》
このプログラム仕様を満たすアルゴリズムを決定すること。
【第1ステップ】 並び換える手順(アルゴリズム)を考える
棒の長さ
1
2
3
4
5
6
7
8
9
10
要素番号
さてどうゆうふうに
やろうか
並び換え
棒の長さ
1
2
3
4
5
6
7
8
9
10
要素番号
● アルゴリズムについて,いろいろなアイデアを出す
棒の長さ
1
2
パッと見て一番短い
ものから順に左端に
おいて行けばいいん
じゃないの!
3
4
5
6
7
8
9
一番短いものから
順に左端に置いて
ゆくのはいいといし
て,一番短いものは
どうゆうふうに見つ
けるの?
10
要素番号
一番短いものが見
つかったとき,左端
にあるデータはどこ
へ置んだ?
並べ終わったことを
どうやって見つけるの?
● 一つ一つの手順に分解してみる(日本語で考える)
①まず全体を見て一番短い棒を見つける。
②一番短い棒の位置をおぼえておく。
①②一番短いのはこれだ!(位置=2)
棒の長さ
1
2
3
4
5
6
7
8
9
10
要素番号
③入れ換える
③そして,左端の棒と一番短い棒を入れ換えればいいの
だ!
④左端は一番短い棒が置かれた。
棒の長さ
①②一番短いのはこれだ!(位置=6)
一番短いので
もはや考えない
くていい
1
2
3
4
5
6
7
8
9
10
要素番号
③入れ換える
次に左端を除いた全体で一番短い棒を見つけよう。
⑤その棒の位置をおぼえておこう。
⑥左端から2番目の棒と見つかった短い棒を入れ換えれば、
次に短い棒が2番目にくる。
これって短い棒を置く位置を変えれば繰り返しだ!
● 終わるときの条件(終端条件)に注意して手順を整理する
○ 棒の数をnとする。
①一番短い棒の長さを覚えておく位置をiとする。
最初は iは 1。
②i+1から終わりまでの中で一番短い棒を見つけ
その位置を j とする。
③iの位置の棒とjの位置の棒を置き換える。
④iの位置を一つ右に移動する。
【終端条件】
もしi がn以下なら
⑤上記の②~④を繰り返す
結局iは1からn-1まで
の繰り返し
【第2ステップ】 NSチャートでアルゴリズムを記述する
(1) NSチャートの表記規則
① 連接
③ 選択
② 分岐
処理1
分岐条件
Y
処理2
真なら
実行する
処理1
N
偽なら
実行する
処理2
選択条件
値1
値2
処理1
処理2
値3
処理3
値n
処理n
⑤ 繰返し
④ 繰返し
繰返し条件
処理
繰返し条件を最初
にチェックし,
条件を満たしてい
れば,この処理を
実行する
処理
繰返し条件
この処理は無条件に
一度実行され,
その後,繰返し条件
がチェックされる
(2)データ構造で決定した名前を用いて手順をNSチャートで書く
①手順の構造(制御構造)を重点に書く
②内容はわかりやすく,誤解の生じない日本語で書く
棒の長さデータが格納された数をnとする。
最小のデータを格納する位置をiとする。
位置iが1からn-1まで繰り返す
配列aの i+1からnまでの要素の中で
最小データの位置を見つけ,その位置を jとする。
配列aのi番目とj番目を交換する。
大まかなプログラム設計おわり
【第3ステップ】 データ構造を変えるとアルゴリズムが
簡単になるか再検討してみる。
例えば, 配列 => 構造体の配列
この例では,特に変える必要ない。
【第4ステップ】 NSチャートをさらに詳細に記述する。
棒の長さデータが格納された数をnとする。
最小のデータを格納する位置をiとする。
このような部分
iが1からn-1まで繰り返す
をさらに詳細化
配列aの i+1からnまでの要素の中で
最小データの位置を見つけ,その位置を jとする。
配列aのi番目とj番目を交換する。
●プログラム設計することの目的と利点
(1) まず手順の概要を考え,表現することにより,
大きな手順の間違いを犯さないですむ。
なぜなら多くの技術者によって,手順の正しさを
チェックできる。
手順の概要(大枠)
多少詳細化した内容
段階的詳細化
かなり詳細化した内容
(2) NSチャートで書き表した手順は,プログラミング
言語に依存しない。
CからC++やJavaに急にプログラミング言語が変更になっても,
手順に大きな変更は生じない。
棒の長さデータが格納された数をnとする。
最小のデータを格納する位置をiとする。
iが1からn-1まで繰り返す
配列aの i+1からnまでの要素の中で
最小データの位置を見つけ,その位置を jとする。
配列aのi番目とj番目を交換する。
for(i=1; i<=n-1, i++)
FOR I=1,N-1
DO I=1,N-1
PERFORM VARING I
FROM 1 BY 1 TO N-1
FOR I=1 STEP 1 UNTIL N-1