| Week | Topic | Chapters | Assignment |
| 1/19 | Overview, Review | 1-3 | |
| 1/26 | Modeling Tools: Containers | 8,9 | Homework #1 |
| 2/2 | Modeling Tools: Trees | 13 | Homework #2 |
| 2/9 | Modeling Tools: Templates | supplements | Homework #3 |
| 2/16 | Structured and Object-Oriented Design | 10 | Homework #4 |
| 2/23 | Object-Oriented Design: Object Models | 10 | Homework #5 |
| 3/2 | Object-Oriented Design: Object Models | OMT Handout | |
| 3/9 | Spring Break | ||
| 3/16 | Spring Break | ||
| 3/23 | Object-Oriented Design: Dynamic Model: Data and Control flow | Project #1 | |
| 3/30 | Object-Oriented Design: Dynamic Model: State Transition Diagrams | Handout | |
| 4/6 | Implementing the Object Model | 11 | Project #2 |
| 4/13 | Implementing the Dynamic Model | Project #3 | |
| 4/20 | Implementing the Dynamic Model | ||
| 4/27 | Putting it all together | 5/4 | Final Class | 5/11 | Finals Week |
While the course will involve much programming in C++, the purpose of this course will not be to teach C++, but the more general facilities and uses of object oriented languages for design, such as: encapsulation, abstraction, inheritance, information sharing/hiding, and the object centered approach to software development. In addition, we will discuss programming in the large (without actually doing it), in hopes of at least seeing the problems this implies.
Another important experience this course will provide is working in groups. The main assignment will be a group assignment, requiring work in groups of no less than three.
One aspect of this course we have striven to emphasize is the importance of modeling a domain such that an understanding of it can be facilitated. There is a saying which can effectively sum up the importance of domain knowledge in software development and maintenance: Writing code isn't the problem, understanding the problem is the problem. The Microelectronics and Computer Technology Corporation (MCC) has been conducting field studies of large scale software projects in industry. Bill Curtis and Neil Iscoe conducted several of these studies, and they recognized the thin spread of application domain knowledge as the most critical problem common to all the projects they studied:
The deep application-specific knowledge required to successfully build most large, complex systems was thinly spread through many software development staffs. Although individual staff members understood different components of the application, the deep integration of various knowledge domains required to integrate the design of a large, complex system was a scarcer attribute. This problem was especially characteristic of projects where the software was embedded in a larger system (e.g. avionics or telephony), or where the software implemented a specific application function (e.g. transaction processing). These systems contrast with applications currently taught in computer science departments, like single processor operating systems and compilers. Although most software developers were knowledgeable in the computational structures and techniques of computer science, many began their careers as novices in the application domains that constituted their company's business. As a result, software development required a substantial time commitment to learning the application domain.From: Curtis, B., Iscoe, N. and Krasner, H. A Field Study of the Software Design Process for Large Systems. Communications of the ACM. 31(11). Pp. 1268-1287. Nov, 1988.
| 30%: | Homeworks |
| 40%: | Projects |
| 30%: | Final Group Project |