Course Description
Home ] [ Course Description ] Schedule ] Topics ] Download Slides ] Assignments ] Resources ] Environments ]


This course is an introduction to Object-Oriented Programming (OOP) concepts, and programming practices. The course introduces the concepts, discusses them, and then elaborates on them, using specific examples in various OOP languages. The main language used is C++, but examples from other OOP languages may be used on occasion.

Many books and courses on C++ programming treat C++ as merely an extension of the C language. While there are many areas where C++ does provide better facilities than C, and these have (sometimes considerable) value, I believe that this is not the best way to learn how to use the object-oriented approach effectively. On the contrary, it tends to allow programmers to continue to write C programs that take advantage of the fact that C++ is 'a better C'. C++ is much more than that.

On the other hand, other books and courses take a 'purist' view of object-oriented programming, and insist on using a pure object-oriented language (usually Smalltalk) to provide an introduction to object-oriented programming that essentially forces the programmers to change their mindset to adapt to what such a language requires. While this may be more effective at teaching object-oriented principles, it often distracts people with the unique and often peculiar details of the syntax of such a language. In my experience, students prefer to take a more pragmatic approach, and often consider languages like Smalltalk as interesting but not particularly practical, because they will rarely use Smalltalk to produce solutions for their customers.

This course attempts to take a middle road. I believe that the concepts of object-oriented programming are important enough to discuss without bogging students down in language-specific details of syntax and implementation. So, I am taking the approach of introducing object-oriented concepts in a way that is not directly related to the language we will primarily be using -- C++. In fact, I deliberately avoid the use of C++ during the Object-Oriented Concepts part of the course! But eventually, I do want you to do realistic and practical programming, and so, after the introductory sections, we will then plunge into C++ to learn its concepts, syntax, etc.

Finally, we will return to examining Object-Oriented programming in a more abstract way, by looking at approaches to designing object-oriented programs, and how these approaches may differ in fundamental ways from more conventional approaches.

At the end of the course, I hope that you will be using C++ in a way that goes beyond using it merely as 'a better C'.


The assignments for this course will be in the form of programming problems. These problems are, for the most part, non-trivial.  This is not merely to give you a hard time; the real reason is to give you a glimpse at the kind of programming problems you are likely to meet in the real world, when you find a job. (We don't have the time to do real real-world problems, but at least it should point you in the right direction.) I also believe that some of the issues concerning object-oriented programming are best examined by more in-depth assignments.

It will be assumed that you will do whatever reading is necessary to do the assignments. This will entail reading from the textbook, and from other resources, such as the World-Wide Web, libraries, and other resources..

Note: It is always better to submit something for an assignment than nothing at all. You will always get some credit for submitting something. Submitting nothing, on the other hand, will result in a zero grade for that assignment.

Instructor Availability

I will be available before and after class.

I also have posted office hours.  Usually, they are M, T, W, 2:00-5:00pm.  Please call ahead before dropping into my office during office hours.  That way, I can make sure that there are no conflicts with other students' consultations, department meetings, or other commitments.

This page was last changed on 16 Jan 2006