Software Engineering Lecture 4/17
Menu MenuPerl 言語を勉強しながら、大きなソフトウェアプロジェクトを設計し、運営し、参加していく方法を学習する。特に UML (Unified Modeling Language) オブジェクト指向設計とデザインパターンを重視した演習を行う。
参考書
The Practice of Programming カーニハン パイク 実践UML クレーグ・ラーマン プレンティスホール 初めてのPerl 第2版 R.L.Schwartz, T.Christiansen オライリージャパン
評価方法
出席状況、演習の結果を総合して判定する。
授業計画
(1) ソフトウェア工学 (2) 集合、論理、関数 (3) 型とその整合性 (4) UML 概念モデル, Perlのオブジェクト (5) 関係の実装, Perl/Tk (6) 状態モデル (7) 協調図 (8) マルチユーザガードゲームの設計 (9) 設計クラス図 (10) ソフトウェア・パターン (11) 分散プログラム (12) デバッグ・テスト・その他電子メールおよび ura.ie.classes.software のニュースグループを使用する
ソフトウェア工学の基礎となるもの
プログラムとは何か? プログラムを書くということはどういうことか?
- 何を作りたいのか
- どうやって作るのか
- 何を作ったのかが
自分で作ったものを自分で使うだけではない。
- 他人に作ってもらう
- 今あるものを作り直す
- 自分で作ったものを人が使う
- 自分で作ったものを人が直す
その基準は?
一つの答: プログラムの意味を考える。
仕様、実装、実行
- 仕様 どういうプログラムが欲しいのか?
- 実装 どうプログラムを書くのか?
- 実行 そのプログラムはどう動くのか
それぞれに対応するプログラムの意味を考える。
- プログラムが満たしてほしい性質 ... 論理的意味、代数的意味
- プログラムを動かす仕組み ... 操作的意味
- プログラムの動いた履歴 ... 実行結果
プログラムを作る時の方法
仕様、実装、実行の相互の関連を通してプログラムが作られていく。
プログラムの意味を扱う道具
これらを取り扱うための数学的な道具がいろいろある。そして、それらに対応したプログラミング言語とプログラミング手法が考えられた。
- 集合 Specification Z
- 写像、関数 関数型プログラミング
- 論理 論理型プログラミング
もし入力が有限で、出力が一つだけなら、とても簡単になる。入力が無限だったりすると難しい。特にReal-timeプログラミング、並列プログラミングの意味は難しい。
- 仕様は論理式で表すのが容易である
- 実装は関数で表すのが容易である
- 実行結果は集合で表すのが容易である
しかし、この三つの道具は、実際には同等な力を持った道具であり、望むならば、論理だけ、関数だけ、集合だけ、ですべてを表現することもできる。しかし、適材適所を考えて使おう。
プログラムの分割
これらのプログラムの意味を表す方法は、平らな方法であり、階層化さていたり、分割されていたりはしない。しかし、実際には、プログラムを分割しなくては、大きなプログラムは作れないし、複数の人にプログラミングの仕事を分けることもできない。また、分割する時は、全体のプログラムの意味が乱されないように分割しなくてはならない。
また、この分割は、プログラムの内容だけでなく、プログラムを作成していくプロジェクトの構成(人員、期間、組織)などにも依存する。
これからの授業では、この分割の仕方を考えていくことになる。