A CRC Description of HotDraw
CRC Cards are a way of describing objects.  One writes on index cards the responsibilities
and collaborators one expects for each class used in a program.  These are the first CRC
Cards ever made.  I wrote them early one morning years ago after I had been sleeplessly
considering how to give students a feel for object design.  The cards document HotDraw,
a drawing editor written in Smalltalk by myself and Kent Beck.  
We start with the usual model, view and controller. 
 
 
 
 
Drawings hold Figures.  Here is the abstract class and a few refinements.
I chose these particular kinds of Figures to illustrate additional
responsibilities assumed in refinement.
 
 
 
 
 
Note that BoxFigure is defined by attributes.  I knew that these were weaker than
responsibilities, but, wanted to show the versitility of paper in handling the
occasional diagram. 
The DrawingController collaborates with Tools to make changes.  I didn't make a card for
abstract Tool since it didn't carry any responsibility I felt needed recording.  The class
naming conventions implies its existence. 
 
 
 
  
The SelectionTool can touch and drag both Figures and Handles.  Tools and Handles both
manipulate Figures.  That makes Handles a wonderful little unit of extension that looks
like a Figure to a Tool and like a Tool to a Figure. 
 
 
 
Finally, Locator is a Point substitute that knows how to propagate changes between related
figures.  For example, when a Line connects to the corner of a BoxFigure and the BoxFigure
moves, an update message propagates through a Locator to the Line.  
 
 
Actually HotDraw didn't
have Locators.  Instead it had special cases that dealt with the change propagation.
When I was drawing the cards the idea of a Locator just came to me.  I've since used
them effectivly in reimplementations of HotDraw. 
So these are the original CRC Cards.  I could tell as I was writing them that I was
on to something good.
I've recently reflected on this early experience in a
position statement for the OOPSLA '94
Workshop on Teams & Objects. There's also related information accessable from
our home page.
Copyright 1994, Ward Cunningham 
All Rights Reserved.