Skip to main content

Teaching OO

Posted by daniel on July 10, 2003 at 9:13 AM PDT

At my first OOPSLA in Minneapolis I sat a couple of rows behind Jim Coplien at the Educators' Symposium. In one activity we had to gather in groups of four and decide on which eight (I think) features were most important in some setting. After a few minutes each group merged with another group, then two of these larger groups merged, and so on. The idea was that as the size of each group doubled, you were supposed to negotiate and choose the five items that were still most important to the newly formed group. By the end of the exercise there would be consensus in the room. The moderator expected that after a few rounds the list of the combined group would begin to reflect some combination of the views of the constituent parts.

The moderator hadn't allowed for Cope. Watching him in that room was like watching Lebron James play against high school students. Forgive the US centric reference, but I was one of the people that fell for the Cope head fake and watched him go around me.

Cope did something pretty amazing after a career at Bell labs. He went and got a PhD so that he was credentialed to teach. I can't imagine he was any more qualified to teach after receiving his PhD than he was before receiving the degree. He had more than twenty years at Bell labs and a history of some of the finest, most thoughtful writing you would ever want to read. There are some schools that would have passed on him merely because he didn't have an advanced degree in CS.

In any case, armed with his PhD, Coplien is now teaching Computer Science, discrete Mathematics, and English composition at North Central College. In a blog he has written for, Coplien considers the options in teaching object oriented design. Teaching OO: Putting the Object back into OOD is a thoughtful exploration of different ways to teach OO. Two of his key points are the following:

This perspective precipitates two interesting insights. The first is that for a class-based OO educator, this level of compression points out a missing concept: the elusive concept that ties related classes together. That missing concept is a role and has long been featured in what were considered to be offbeat design methods like Reenskaug's OORAM. A role characterizes part of the interface of an object, such that the responsibilities characterize some sphere of knowledge or influence. A given object can take on several roles at once. Consider a Circle object as an example: we can ask it to yield its circumference, location, or area; we can ask it to move, rotate or warp: these owe to a role we might call Shape. We may also want Circle to respond to requests to draw itself on some output medium, or to change its color: these owe to a role called Drawable. An image file object might also respond to all the responsibilities of Drawable, though that may be all that images have in common with Shapes.

The second insight is that progress in programming languages has caught up with this reality: roles appear as a first-class programming construct in the guise of Java interfaces.

In today's featured Weblogs Craig Castelaz's Development Tug-o-War considers the effects of tools such as Rave enabling non-traditional programmers to consider themselves to be Java developers. The blog also features one of Craig's line drawings. He's become our site cartoonist. In Psych Now, Good Times Later blogger Chris Campbell returns to his small home town where life is simpler and people take time to talk to each other. Well, maybe not simpler. He was discussing the use of JMF, JAI, and Java2d with an employee of the Mitsubishi Electric Research Labs.

In Also Today, in addition to James Coplein's thoughtful piece, we link to the homepage of the JavaDesktop community home page. They feature articles and news items not found elsewhere on

Steve Mallett, the Java Today news editor has gathered the following Java Today News Headlines: "Apache Httpd WebServer 2.0.47 released", "Web services spec invites controversy, "nist-sip-1.2 project split into three sub projects", "", and "JLine 0.6.0 Released".

Once this page is no longer featured as the front page of Java Today it will be archived at You can access other past issues by changing the address appropriately.