| Week | Topic | Chapters | Assignment | |
| 8/31 | Overview, Review | Homework #1 | ||
| 9/7 | Modeling Tools | Containers | C++ 3.7 | Homework #2 |
| 9/14 | Namespaces, Templates, Iterators | C++ 3.8, 8.1, 8.2, 13 | ||
| 9/21 | C++ Standard Library | C++ 16-18 | Homework #3 | |
| 9/28 | C++ 19-22 | Homework #4 | ||
| 10/5 | Object-Oriented Modeling | Introduction | UML 1-3 | Homework #5 |
| 10/12 | Objects and Classes | UML 4,5 | Project #1 | |
| 10/19 | Fall Break | |||
| 10/26 | Objects and Classes | UML 13 | ||
| 11/2 | Committments and Static Behavior | UML 5,6,14 | Project #2 | |
| 11/9 | Dynamic Behavior | UML 7 | ||
| 11/16 | Relationships | UML 15,16 | Project #3 | |
| 11/23 | No Class (thursday classes held on
11/24) Thanksgiving Break |
|||
| 11/30 | Relationships | UML 17 | Project #4 | |
| 12/7 | Last Class | UML 11 | ||
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 |