This course aims for a deeper understanding of Object-Oriented programming and design than what is obtained in basic courses and even day-to-day work. To achieve this, the course is divided to three parts. The first is a pack of practical ready-to-use design patterns; the second discusses programming language design and implementation, for each mechanism of the O-O method; and the third covers future directions in the programming world. This combination has been chosen to provide students with long-lasting useful knowledge, regardless of their specific field of work in computers and of whether they are programmers, designers or academic researchers.
Since this is an elective course for fourth-year students, you are required to think more. The course will have no test but instead include two personalized mini-projects, based on real-world problems.
Who: David Talby (Homepage, Email)
When: Friday Mornings, 8:00-10:30
Where: Floor 2 of Main Building in Hadassah College, Jerusalem
Reception Hour: Friday 13:15-14:00
Part I: Design Patterns
We'll go through most of the classic Gang-of-Four patterns.
Part II: Language Design
The mechanisms covered will be the type system, genericity, design by contract, inheritance and multiple inheritance, variants (static and dynamic), imprinted performance, non-determinism, real-time facilities and exception handling.
Part III: Future Directions
This short part will present two topics: Extreme programming and component based programming (EJB, COM and dot-Net).
For Part I:
"Design Patterns - Elements of Reusable O-O Software", by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides
For Part II:
Object-Oriented Software Construction, 2nd edition, by Bertrand Meyer
The C++ Programming Language, 3rd edition, by Bjarne Stroustroup
"Effective C++" and "More Effective C++", both books by Scott Meyers
The Java J2SE Documentation, and specifically the API documentation
For Part III:
The course's grade will be the average of these two mini-projects:
Designing a small application, using patterns and UML (Deadline: January 7th)
Investigating a language design problem, with the help of academic articles
Each mini-project should be done in pairs, and involve thinking of a large problem and writing a report. The grade of is composed of the report itself and answering oral questions about it. In each mini-project you will have a selection of problems to work on; at most two groups should work on the same problem or project.
Enjoy the course!