Software Engineering Lecture 4/18

Perl 言語を勉強しながら、大きなソフトウェアプロジェクトを設
計し、運営し、参加していく方法を学習する。特に UML (Unified Modeling
Language) オブジェクト指向設計を重視した演習を行う。

参考書

- 実践UML クレーグ・ラーマン プレンティスホール
入門Perl オライリージャパン
デザインパターン SOFTBANK
- 評価方法
- 出席状況、演習の結果を総合して判定する。

## 授業計画

(1) ソフトウェア工学
(2) 集合、論理、関数
(3) 型とその整合性
(4) UML 概念モデル, Perlのオブジェクト
(5) 関係の実装, Perl/Tk
(6) 状態モデル
(7) 協調図
(8) マルチユーザガードゲームの設計
(9) 設計クラス図
(10) ソフトウェア・パターン
(11) 分散プログラム
(12) デバッグ・テスト・その他

電子メールおよび ura.ie.classes.software のニュースグループを使用する

## ソフトウェア工学の基礎となるもの

プログラムとは何か? プログラムを書くということはどういうことか?

何を作りたいのか

- どうやって作るのか
- 何を作ったのかが
- 自分で作ったものを自分で使うだけではない。

他人に作ってもらう

- 今あるものを作り直す
- 自分で作ったものを人が使う
- 自分で作ったものを人が直す
- その基準は?

一つの答: プログラムの意味を考える。

## 仕様、実装、実行

仕様 どういうプログラムが欲しいのか?

- 実装 どうプログラムを書くのか?
- 実行 そのプログラムはどう動くのか
- それぞれに対応するプログラムの意味を考える。

プログラムが満たしてほしい性質 ... 論理的意味、代数的意味

- プログラムを動かす仕組み ... 操作的意味
- プログラムの動いた履歴 ... 実行結果

## プログラムを作る時の方法

仕様、実装、実行の相互の関連を通してプログラムが作られていく。

## プログラムの意味を扱う道具

これらを取り扱うための数学的な道具がいろいろある。

そして、それらに対応したプログラミング言語とプログラミング手法が
考えられた。

集合 Specification Z

- 写像、関数 関数型プログラミング
- 論理 論理型プログラミング
- もし入力が有限で、出力が一つだけなら、とても簡単になる。
入力が無限だったりすると難しい。特にReal-timeプログラミング、並列
プログラミングの意味は難しい。

仕様は論理式で表すのが容易である

- 実装は関数で表すのが容易である
- 実行結果は集合で表すのが容易である
- しかし、この三つの道具は、実際には同等な力を持った道具であり、
望むならば、論理だけ、関数だけ、集合だけ、ですべてを表現することも
できる。しかし、適材適所を考えて使おう。

## プログラムの分割

これらのプログラムの意味を表す方法は、平らな方法であり、階層化
さていたり、分割されていたりはしない。

しかし、実際には、プログラムを分割しなくては、大きなプログラムは
作れないし、複数の人にプログラミングの仕事を分けることもできない。
また、
分割する時は、全体のプログラムの意味が乱されないように分割
しなくてはならない。

また、この分割は、プログラムの内容だけでなく、
プログラムを作成していくプロジェクトの構成(人員、期間、組織)などにも依存する。

これからの授業では、この分割の仕方を考えていくことになる。