CS 3500: Object-Oriented Design (Clinger)
Fall 2012

[ Administrivia | Outline ]

Administrivia

Instructor: William D Clinger
Home page: http://www.ccs.neu.edu/course/cs3500wc/
Directory: /course/cs3500wc

Required Textbooks:
Barbara Liskov and John Guttag. Program Development in Java: Abstraction, Specification, and Object-Oriented Design. Addison-Wesley, 2001.
Peter Sestoft. Java Precisely, Second Edition. MIT Press, 2005.

Catalog description: CS 3500 Object-Oriented Design 4 QH
Presents a comparative approach to object-oriented programming and design. Discusses the concepts of object, class, metaclass, message, method, inheritance, and genericity. Reviews forms of polymorphism in object-oriented languages. Contrasts the use of inheritance and composition as dual techniques for software reuse such as forwarding vs delegation and subclassing vs subtyping. Fosters a deeper understanding of the principles of object-oriented design patterns, and the use of graphical design notations such as UML (unified modelling language). Basic concepts in object-oriented design are illustrated with case studies in application frameworks and by writing programs in one or more object-oriented languages.
Prereq. CS 2510 (CS U213 and 214).

The content of this course has evolved somewhat since the official catalog description (above) was written. Our approach will be principled, not comparative. We will not discuss metaclasses. Inheritance and composition are often alternative techniques, but they are not duals; I am not even sure what that sentence of the catalog description was meant to say.

Here is a better description of the course, taken from the draft report of a committee that was asked to revise CS 3500:

Presents the theory and practice of object-oriented programming, emphasizing abstractions and ideas that scale to large systems. Introduces representation independence and related concepts such as information hiding, encapsulation, modularity, and interchangeability of parts. Analyzes strengths and weaknesses of alternative representations by considering asymptotic efficiency for the best, worst, average, and amortized case. Illustrates general paradigms such as divide-and-conquer algorithms, precomputation, caching, memoization, and dynamic programming. Covers static types and explains how subtyping and several forms of polymorphism (parametric, ad hoc, and inclusion) support design patterns that contribute to reuse and extensibility.

Approximately half of the final grade will be determined by assignments, and the other half by the midterms and final exams. There may also be one or more quizzes, which may count as either assignments or exams at the whim of the instructor. Some design and/or programming assignments may require students to work in teams, but most assignments and all quizzes and exams will be individual in nature.

Security is an important aspect of software development. In this course, students are expected to protect the software they develop from plagiarists and thieves. The quality of this protection will be graded. The instructor and grader will do their best not to reward plagiarism, theft, and other forms of academic dishonesty.

Every student is responsible for being familiar with the university's Academic Integrity Policy.


Outline


Last updated 4 December 2012.

Valid XHTML 1.0!