CATALOG DESCRIPTION: After a short motivational discussion of software-design issues (i.e., modularization) and the impact of the O-O paradigm in the software lifecycle, the first part of this course will give a brief overview the programming paradigms and representative languages, specifically focusing on the O-O one. The second part of the course will focus on Smalltalk, as a representative of pure Object-Oriented languages featuring: (1) every operation is a message; (2) dynamic typing/binding and all-reference semantics; (3) everything is an object (classes too). In the third part of the course, we will contrast this with the O-O capabilities of the C++, which will be studied in detail – in the lieu of the fact that C++ is a “hybrid” O-O language (e.g., its “default behavior” is to be statically typed). During the last week of the course, a comparative analysis of the O-O languages will be discussed, with a special focus on placing Java along the spectrum.

Object-Oriented Programming with C++ and Smalltalk
By Caleb Drake (Prentice Hall)
COURSE OBJECTIVES: The main goals of these course can be categorized as follows:

(1) It will expose the students to the ideas that motivated the O-O programming paradigm;
(2) It will help the students in understanding the basic features of O-O languages, as well as develop a better intuition regarding the “design-to-code” transition.
(3) It will expose the students to two ends-of-spectrum languages and help them develop the intellectual flexibility to better structure their design-choices in correlation with the features of a particular language/environment.
(4) It will help the students in recognizing the importance of “behind the scene” executional behavior of the environment in which the code is written. After finishing the course, the students should be comfortable with the O-O paradigm (and Smalltalk as a pure-language example) and be able to fully exploit the O-O features of C++. Just as importantly, in addition to developing a flexibility to adjust to new O-O languages, the students will be able to recognize and utilize the fact that although the syntax of Java is similar to the one of C++, the executional behavior of the programs is quite different.

PREREQUISITES: EECS 311 (or consent of the instructor)
ASSIGNMENTS: The course will have 1-2 homeworks, three (well, “2.5” – since the first one will be more introductory-natured) projects, a midterm and a final exam.