実世界の問題を計算機によって解決する場合、その問題を計算機の内部で扱うことができるように適切な表現を与える、即ち問題のモデル化を行う必要がある。その表現はまた、データのサイズ、アルゴリズム、表現の簡潔さ、再利用性などを規定する重要な要因でもある。このような問題のモデル化を行うにあたっては、典型的なモデル化の例を学び、そのために必要となるプログラミング言語の諸概念、基本的なプログラミング技法を習得する必要があります。具体的にはオブジェクト指向プログラミング言語のクラス階層とメソッドの設計と抽象化技法が学習項目となる。
(1回の授業あたり,講義1時限,演習2時限を行う)
与えられた問題記述から、データモデリングを行い、オブジェクト指向プログラミング言語によるクラス階層とメソッドの設計手法を習得する。また、フレームワークやデザインパターンのような抽象化手法を理解し、実際のクラス設計を再利用可能なものにする。これによって情報システムに関する基本的な性質を、ソフトウェア構築の側面から体得することを目標とする。
モデル化、抽象化、再利用性、オブジェクト指向、クラス階層、メソッド
✔ 専門力 | 教養力 | ✔ コミュニケーション力 | ✔ 展開力(探究力又は設定力) | ✔ 展開力(実践力又は解決力) |
授業は各週の3回を(1)講義の回、(2)個人演習の回、(3)全体演習の回として以下を行う。
(1)講義: そのラウンドの内容を説明 (講義室)
(2)個人演習: 受講者が内容を理解するための基本的な問題を解く (主に演習室)
(3)全体演習: 受講者どうしで助け合いながら理解を確認するための問題を解く (演習室または講義室)
授業計画 | 課題 | |
---|---|---|
第1回 | 原始的なデータ形式、クラス、クラスの参照、オブジェクトの包含 | クラス図の描き方、メソッドの定義方法、テストクラス/テスト式の書き方、開発環境の使い方 |
第2回 | ユニオン、自己参照、相互参照、クラス階層 | ユニオンを使ったクラス図、クラス定義、データ例 |
第3回 | 基本型による計算、メソッド呼出 | メソッドの呼び出し式 |
第4回 | クラスのメソッド、包含オブジェクトのメソッド | メソッド定義 |
第5回 | ユニオンのメソッド、型とクラスとメソッド呼出 | ユニオンのメソッド定義、型とクラスの違い |
第6回 | ユニオンのメソッド(その2)、相互参照とメソッド | 相互参照のあるクラスのメソッドの定義 |
第7回 | メソッドの設計、類似したクラス、クラス階層のメソッド | メソッドの設計方法 |
第8回 | 状態カプセル化、自己保存、外延的等価性 | 等価性メソッドの定義 |
第9回 | 循環データ、循環データのメソッド | 循環のあるデータのクラスとメソッドの設計 |
第10回 | 状態と変化、代入による状態変化 | フィールド代入の使用 |
第11回 | 状態付クラスの設計、命令的メソッド、等価性その2 | 状態のあるクラスとそのメソッドの設計 |
第12回 | 類似するクラスの型、類似するクラス階層の型、汎用クラス設計 | 総称クラスの設計 |
第13回 | フレームワーク、インタフェース設計、拡張可能フレームワーク | フレームワーク概念とその設計 |
第14回 | 走査のパターン、抽象走査メソッド設計 | 走査の考え方、設計方法 |
第15回 | 副作用付走査、Visitor式拡張可能フレームワーク | 走査のライブラリ化の方法 |
``How to Design Classes --- Data: Structure and Organization'', by Matthias Felleisen, Matthew Flatt, Robert Bruce Findler, Kathryn E. Gray, Shriram Krishnamurthi, and Viera K. Proulx, 2012. (Draft)
講義資料はオンラインで配布する。
個人演習、全体演習および期末試験において、実際の問題に対してクラス階層とメソッドの設計が行えることを評価する。同時に、それに必要となる概念の理解度も評価する。
最低限のプログラミングが行えること。プログラミング第一を履修していることが望ましい。
p2-2018[at]prg.is.titech.ac. (この後ろに「日本」のドメイン名を追加せよ)
指定しない