授業科目
Course Title

ソフトウェアデザイン論
Software Engineering

担当者
Instructor

教授   木下 佳樹
前 金1
講師   中原 早生
前 金1

単位
Credit

2

関連するディプロマポリシー
Related Diploma Policy

時代の課題と社会の要請に応えた専門的知識と技能/Expert knowledge and skills to address the issues of the age and the demands of society

到達目標
Target to be Reached

プログラムの階層的構造と、型システムについて、基本的知識を得る。

授業内容
Course Content

現代の大規模ソフトウェア開発ではソースコードが数百万行以上になることが普通で、その複雑さを克服することが大きな課題である。本講義ではそのための技法と理論の例として、型システムとプログラムの階層的構造について講義する。

まず、型システムについての一般的な理論を講義する。charやintなどの基本型と配列やstruct、unionなどの導来型は、様々なプログラミングに用意されている。それらは詳細が異なるものの、本質的な考えには共通点が多い。本講義では、型を直接プログラミング言語の語彙で表現する代わりに、数学的なモデルを示して、様々な言語の背後に横たわる共通の概念を明らかにする。

次にプログラムの階層的構造についてプログラミングの実践的な立場から講義する。プログラムによって取り扱おうとするデータや操作は、プログラミング言語が提供するデータや操作とはかけ離れている場合がほとんどである。例えば自宅の最寄り駅から勤務先の最寄り駅まで最安値で移動する方法を求めるプログラムを書こうとしても、首都圏の鉄道路線を直接表現出来る機能を持つプログラミング言語は多分存在しない。そこで例えば、まずグラフを表現するパッケージAを作り、次にGを使って路線図を表現するパッケージRを作り、最後に首都圏の路線図をRを用いて実装する、ということを考える。このような手法によると、大規模なプログラミングを分割出来るだけでなく、Rは関西圏の路線図実装荷物帰るし、Gはトラック運送網にもつかえる、など、パッケージの再利用あるいは汎用かも促進することができる。これをプログラムの階層的構造という。本講義では、階層的構造に必要なブロック、クラスなどの言語機能のほか、抽象データ型、仕様と実現などの重要な考え方を講義する。また、クラスと密接に関係する制御機能コルーチンについても講義する。

本科目では以上の内容を、文献[3]の内容に基づいて講義するが、プログラム例は、現代的プログラミング言語Pythonに置き換えたものを用意する。

本講義では、教科書を用いず、毎回講義ノートを電子的に配布するので、講義中にそれを参照するために受講者は第一回から毎回、ノートブックコンピュータを携行する必要がある。

授業計画
Course Planning

1. 導入; 関数プログラミング. オブジェクト指向プログラミング. プログラ
ミング言語Python
2. 型システム I: データ型の理論とPythonの型
3. 型システム II: レコード型と直積集合、ユニオン型と直和
集合、配列と関数)
4. 型システム III: (参照型(配列と参照)、部分型、静的型検査と動的型検
査)
5. 型システム IV: 多相型と多重型、依存型と一般化された直積及び直和
6. 型システム V: 帰納的に定義された型。
7. 階層的プログラム構造 I - 抽象データ型。仕様と実現。(行列の乗算)、
8. 階層的プログラム構造 II: ブロックとそのインスタンス、クラス
(ヒストグラム、区分求積)
9. 階層的プログラム構造 III: オブジェクトとコルーチン[resume, call,
detach] (テキスト変換、順列生成器)
10. 階層的プログラム構造 IV: リスト構造 (二分探索木, 構文解析器)
12. 階層的プログラム構造 V: プログラムの連結 (双方向リスト)
13. 階層的プログラム構造 VI - 概念の階層 (離散事象シミュレーション、
リーのアルゴリズム)
14. 階層的プログラム構造 VII - 概念の階層 (ジョブショップモデル)

授業運営
Course Management

受講者は、プログラミングIIおよびプログラミングII演習を履修済か、あるいは同程度のプログラミング能力を持つことを前提とする。

本科目では教科書は用いない。講義ノートを講義支援システム(dotCampusあるいは同等のシステム)を通じて配布する。

講義ノート閲覧などのために受講者はノートブックコンピュータを講義に携行する必要がある。(情報科学科学生に貸与されているもので十分である。情報科学科以外の受講者で、必要な者には貸与する。)本科目で用いるプログラム例はプログラミング言語Pythonでかかれている。これを調べるためには、Python処理系(無償配布)を受講者の手元でインストールすることが必要である。その手順などは講義で示す。

適宜、課題を与えて解答を提出させる。課題配布と解答提出にも講義支援システム(dotCampus等)を用いる。

評価方法
Evaluation Method

単位取得のためには、課題に対して解答を提出することが必要である。受講者が多数にわたる場合には定期試験を行う。提出物、演習での発表状況、期末試験を行う場合にはその結果などを総合して評価する。

オフィスアワー
Office Hour (s)

火曜日13:30-15:00 2-226 (木下)
なお、これ以外の時刻でもメイルなどで面談の約束を受け付けるので、積極的な質問や相談を歓迎する。

参考書
Book (s) for Reference

Ole-Johan Dahl and C.A.R. Hoare,Hierarchical Program Structures,https://dl.acm.org/citation.cfm?id=1243380,(O.-J.Dahl, E.W. Dijkstra and C.A.R. Hoare, Structured Programming),1972
The Python Tutorial,Guido van Rossum,https://docs.python.org/3/tutorial/,((邦訳: Python チュートリアル https://docs.python.org/ja/3/tutorial/ – 出版 社: オライリージャパン;第3版 (2016/3/24), Guido van Rossum (著),‎ 鴨 澤 眞夫 (翻訳), ISBN-13: 978-4873117539)
The Python Language Reference[https://docs.python.org/3/reference/index.html]

Copyright© 2017 Kanagawa University. All Rights Reserved.