Objectives:
This course will introduce the basic techniques of object-oriented programming and design. The emphasis will be upon the development of clean interfaces that permit easy modification and reuse of software components. Other techniques, drawn from outside the object-oriented approach, that significantly contribute to this goal will also be discussed. Students will gain facility in an object-oriented programming language and will learn the constructs that differentiate such languages from others.
This course will explore the idioms and styles of object-oriented programming, with emphasis upon how these contribute to reusable software components. Object-oriented design will also be discussed as an integral part of this process.
Comparisons of similar components from different sources such as the Booch, libg++, or NIHLib libraries will be used to explore alternative choices in interface design and to prompt discussion of how these affect utility.
Alternate and future directions of OOP languages including the Common Lisp Object System and persistent programming languages will also be explored to help highlight the shortcomings of current languages and of the OO approach in general.
Required Texts:
Booch, Object-Oriented Analysis and Design (2nd ed.), 1994, Benjamin/Cummings
CS412/512 Course Pack
Optional Text: Lippman, A C++ Primer (2nd ed.), 1991, Addison-Wesley
Prerequisites:
1) One high level programming language (preferably C++, C, Ada, or Pascal) assumed. As this is a 400/500 level course, students should be sufficiently advanced to teach themselves most of the details of a new language, after being given general guidance in class on the major language constructs.
2) Data structures. Students should be familiar with the standard data structures, algorithms, and abstractions that would be presented in a course such as CS361. Students should be comfortable with defining new data types, the use of pointers, and conventional programming techniques for processing arrays, lists, trees, and hash tables. Students need not be capable of easily recreating the more complex algorithms from CS361 (e.g., balanced trees, complex graph algorithms) but should have an awareness of them and know when such algorithms would be useful.
Assignments:
Students will have short assignments almost every week. Some of these will involve programming in C++. Information of access to C++ compilers will be in the full syllabus in the Course Pack.
Course Outline:
1. Course Overview 2. Classes and ADT's 3. Design I - classification 4. Design II - Relationships 5. Inheritance 6. Multiple Inheritance 7. Polymorphism 8. Testing OO Programs 9. Design III - Macro process 10. Reusable Container classes 11. Metaclasses \& Memory Management 12. Persistence