Thursday, March 16, 2006

good oo heuristics

: " Heuristics Summary

The following heuristics are taken from Object-Oriented Design Heuristics by
Arthur J. Riel. This book is available from Addison-Wesley May 1996 (ISBN
#0-201-63385-X). The chapter and number designations are derived from the

Chapter 2
Classes and Objects: The Building Blocks of the Object-Oriented Paradigm
Heuristic #2.1
All data should be hidden within its class.

Heuristic #2.2
Users of a class must be dependent on its public interface, but a class should
not be dependent on its users.

Heuristic #2.3
Minimize the number of messages in the protocol of a class.

Heuristic #2.4
Implement a minimal public interface which all classes understand (e.g.
operations such as copy (deep versus shallow), equality testing, pretty
printing, parsing from a ASCII description, etc.).

Heuristic #2.5
Do not put implementation details such as common-code private functions into
the public interface of a class.

Heuristic #2.6
Do not clutter the public interface of a class with things that users of that
class are not able to use or are not interested in using..

Heuristic #2.7
Classes should only exhibit nil or export coupling with other classes, i.e. a
class should only use operations in the public interface of another class or
have nothing to do with that class.

Heuristic #2.8
A class should capture one and only one key abstraction.

Heuristic #2.9
Keep related data and behavior in one place.

Heuristic #2.10
Spin off non-related information into another class (i.e. non-communicating

Heuristic #2.11
Be sure the abstraction that you model are classes and not "

1 comment:

Andy Gavin said...

I couldn't agree more with the sentiment, and these heuristics are excellent. Many can be abstracted to mean have good public interfaces, and keeping-the-faith with cohesive code, reducing coupling as much as possible. I have to say though, there is much more that can be written now about good OO design--- these do well to define it from an object-centric view. Not only are these heuristics relivant but odd interactions of objects should be turned into known patterns if possible.