Applying UML and Patterns, 3d edition, by Craig Larman, Prentice-Hall 2005.
Software Abstractions by Daniel Jackson, to be published by MIT Press in March 2006 (ISBN 0-262-10114-9). In class I will hand out advance copies of selected chapters, with permission from the publisher.
Credits: some Alloy examples and problems are adapted from CIS 771 at Kansas State, with permission from Matt Dwyer, John Hatcliff, and Rod Howell.
Theory of object-oriented design, classes, interfaces, inheritance heirarchy, correctness; Abstract data types, encapsulation, formal specification with preconditions, postconditions, and invariants, proofs of correctness; Object-oriented software, objects and classes, genericity, inheritance, polymorphism, overloading; Single and multiple inheritance, programming by contract, subclassing as subcontract, specification and verification; Programming language examples include C#, C++, Java, Smalltalk, and Eiffel.
This course covers fundamental concepts and techniques in the design of object-oriented programs, emphasizing class design, rigorous specification, pitfalls of subclassing and inheritance, dynamic dispatch, typing, and behavioral subclassing. Common design and development patterns are explored along with relevant theory. The primary focus is high level design and modeling, using the Alloy tool to automatically generate example instances of our models for purposes of validation.
We survey UML, a widely used collection of semi-formal modeling techniques standardized by the OMT group (Rumbaugh et al), and its application in detailed design at the level of OO source code. We will touch on the ``unified process''--you can learn much more from the Larman book, but our focus is on effective agile modeling through the use of precise models and an analytical tool. We will touch on advanced language features such as parametric polymorphism. We also study fundamental ideas in specification and verification of sequential code and their extension to OO programs.
Concurrency, and software engineering process, are treated to a limited extent; other courses offer further study in those topics. Java language features will be emphasised in lecture, because O-O ideas are clearly manifested in the language and it is more amenable to analytical tools than other common languages. Java programming experience will be helpful but is not required; relevant aspects of the Java language will be reviewed in class.
Upon completion of this course, you will be familiar with standard modeling techniques and methodology using UML and the closely related modeling notation of Alloy. You will be experienced in using a model checker to validate consistency of your models and to generate examples. You will be experienced in using Java or C++ language features to implement O-O designs, and in using simulation mappings to specify and validate implementations and behavioral subclasses. You will be familiar with advanced typing concepts likely to appear in the next generation of languages. (Programming language examples include C++, Java, Smalltalk, Eiffel, OCAML, Oberon, and others.) You will be able to present designs using different views in standard UML notations and using more precise notations that are amenable to automated validation.
Lectures will focus on key ideas and difficult topics. Students are expected to do the assigned reading, so the lectures can proceed at a rapid pace. The course covers material for 3 credit hours, but it would be best for lectures to finish no later than 8:45, with a 15 minute break.
All submitted work must be done individually unless it is group work arranged in advance with the instructor.
Students are responsible for reading and understanding the course policies in these web pages and for announcements made in class and in the course email list.
The course grade is a weighted combination as follows: homeworks (20%), classroom presentations (15%), midterm exam (20%), final exam (20%), final project (25%). Homeworks will include design exercises using the Alloy tool, and also the early phases of your final project. The final project will involve design, specification, and implementation (using C++ or Java).
The classroom presentations will be discussed later. They will probably include your evaluation and suggested improvements for a design specification submitted as homework by someone else in class. For this reason, your home work submissions may be made accessible to all students in the course.
You are expected to spend a significant amount of time on homework and reading outside class. This effort will be reflected in your grade, not just by your homework scores but in exam and classroom presentation scores.
Students are responsible for reading and understanding the course policies in these web pages and for announcements made in class and in the course email list.