クラスを用いたオブジェクト指向プログラムの設計方法をプログラミング演習を行いながら学ぶ。
現実のソフトウェアを作成する際に重要となる、データ構造とそれらの処理手順の設計手順を習得することを目的とする。具体的には、
1. 作成するソフトウェアに対する要求から必要となるデータの性質を整理する
2. データを表現・処理するプログラムの構造を検討する
3. データの表現・処理を行うプログラムを完成させる
ことができるようになることである。本講義ではオブジェクト指向言語Javaを用いて
・構造のあるデータの表現方法
・バリエーションがあるデータの表現方法と処理方法
・再帰的な構造があるデータの表現方法と処理方法
・継承を用いた処理の再利用方法
・フレームワークによる再利用方法とその設計方法
などを扱う。
月曜日と金曜日の計合30の授業日を3授業日からなる9のラウンドに分け、各ラウンドの3授業日は
*講義: そのラウンドの内容を説明 (講義室)
*自習: 受講者が内容を理解するための基本的な問題を解く (主に演習室)
*グループ演習: 小人数のグループに分かれ、理解を確認するための問題を解く (演習室または講義室)
を順に行う。
* ラウンド1
** データの原始的な形式
** クラス
** クラスの参照
* ラウンド2
** クラスの和
** 和、自己参照、相互参照
** クラス階層の設計
* ラウンド3
** 式その1: 原始型の計算
** 式その2: メソッド呼出
** クラスのためのメソッド
** メソッドとオブジェクトの封じ込め
** メソッドとクラスの和その1
* ラウンド4
** 型、クラス、メソッド呼出の計算
** メソッドとクラスの和その2
** メソッド、クラス、相互参照
** メソッドの設計
* ラウンド5
** クラスの類似
** メソッドのあるクラス階層の設計
** 状態のカプセル化とself-preservation
* ラウンド6
** 外延的等価性その1
** 循環データ
** 循環データに対するメソッド
** 「世界」の状態とその変化
* ラウンド7
** 代入と「世界」の変化
** 状態のあるクラスと命令的メソッドの設計
** 等価性
* ラウンド8
** 型とクラスの類似性
** 型とクラス階層の類似性
** 汎用クラスと枠組の設計
** インタフェース設計
** 拡張可能な枠組: 構築子の抽象化
* ラウンド9
** 走査のパターン
** 抽象的走査メソッドの設計
** 作用を伴う走査
** Visitorのある拡張可能な枠組
Matthias Felleisen, Matthew Flatt, Robert Bruce Findler, Kathryn E. Gray, Shriram Krishnamurthi, and Viera K. Proulx. _How to Design Classes: Data: Structure and Organization_, Draft version, June 2012.
最低限のプログラミングが行えること。計算機科学第一を履修していることが望ましい。
以下の3つを総合して評価する
・自習問題解答状況
・演習の参加・発言状況
・期末試験
昨年度までの講義とは内容・形式が全く違います。また、本講義は履修者が演習時に積極的に発言することを前提としていますので、積極性を持って授業に参加して下さい。
cs2-2015@prg.is.titech.ac. (この後ろに「日本」のドメイン名を追加して下さい)