CS497CS Home Page
CS497 Home Assignments Lectures Links Resources CS497 Staff

Detailed description of the course

Object-Oriented Programming and Design

CS497 REJ (Call number: 01757)

Wednesday, Friday 3- 4:50 in 1310 DCL

Ralph Johnson

I have taught a course on object-oriented programming and design using Smalltalk every year since 1985. The purpose of the
course is to go beyond textbook knowledge of object-oriented programming and to become a competent designer. To that
end, we study design methods such as Responsibility Driven Design, design patterns such as Composite and Strategy,
reusable design techniques such as abstract classes and frameworks, and particular designs such as Model/View/Controller
and HotDraw. The course will make you a competent Smalltalk programmer, but the main purpose of the course is to become
an object-oriented designer, and the skills that you will learn will be as applicable to C++ as to Smalltalk.

As usual, the center of the course is a large group project. I will give you a list of possible projects, but it is possible to
persuade me to accept a project that you propose. Although many people are reluctant to choose group projects, this format
has worked well in the past. As Christopher Alexander says in A Pattern Language:

    The fundamental learning situation is one in which a person learns by helping someone who really knows what he
    is doing.

    An experiment by Alexander and Goldberg has shown that a class in which one person teaches a small group of
    others is most likely to be successful in those cases where the "students" are actually helping the "teacher" to do
    something or solve some problem which he is working on anyway -- not when a subject of abstract or general
    interest is being taught.

This is the heart of graduate education. The projects are important, and you should expect to work hard at them.

Many people have taken this course; I encourage you to talk with other grad students about it to get an idea of what the course
is like.