Article View: comp.lang.clos
Article #669Elements of CLOS Style
From: Jeff Morrill
Date: Wed, 26 Jun 1991 13:37
Date: Wed, 26 Jun 1991 13:37
59 lines
2509 bytes
2509 bytes
barmar@think.com says:
Unfortunately, there still isn't enough
experience in the industry in proper design and documentation of OO
components, so you end up with code like the above.
I think it is possible to come up with some "Elements
of CLOS Style", in the spirit of Strunk and White, that
contribute to reusable code. It is my experience that
CLOS has more than enough tools to write simple
and general code that obeys data encapsulation.
What we need now are heuristics that provide guidance
in the selection of the right tools at the right times.
Here are a few of my personal rules which I recommend:
1. If it can be done without extending the MOP, don't
extend the MOP.
2. Separate classes that provide BEHAVIOR (methods) from
classes that provide STRUCTURE (slots). Otherwise one
tends to implement behavior that makes too many assumptions
about the structure of the objects involved.
3. Avoid the use of SLOT-VALUE and WITH-SLOTS. It is an
indication of a missing accessor method.
4. Avoid the use of TYPECASE. If you find your code
riddled with
(typecase object
(vehicle (vehicle-speed object))
(frog (frog-speed object))
(...))
Then you probably would have been better off with a
generic function called SPEED.
5. Avoid the use of TYPEP. Replace (typep object 'frog) with
(frog-p object) where:
(defmethod frog-p ((object t)) nil)
(defmethod frog-p ((object frog)) t)
Using a method rather than a function ensures that other
applications can extend the definition.
6. Avoid including the name of a class in the name
of a method. For example, rather than naming it FROG-COLOR,
just name it COLOR, since someone else will surely want to
reuse the generic function for things other than frogs.
7. Use &ALLOW-OTHER-KEYS in the argument list of a generic
function if you expect to encounter argument list conflicts
some day.
8. Avoid writing a method that cannot fit in one screenful.
jeff morrill
jmorrill@bbn.com
Technical Details
Message-ID:
<19910626133701.1.JMORRILL@adams.bbn.com>Path:
arc1-ca.pugleaf.net!utzoo!utgpu!news-server.csri.toronto.edu!rpi!zaphod.mps.ohio-state.edu!cis.ohio-state.edu!bbn.com!jmorrillShow Full Headers
Complete Article Headers
Newsgroups: comp.lang.clos Path: arc1-ca.pugleaf.net!utzoo!utgpu!news-server.csri.toronto.edu!rpi!zaphod.mps.ohio-state.edu!cis.ohio-state.edu!bbn.com!jmorrill From: jmorrill@bbn.com (Jeff Morrill) Subject: Elements of CLOS Style Message-ID: <19910626133701.1.JMORRILL@adams.bbn.com> Sender: daemon@cis.ohio-state.edu Organization: The Ohio State University Department of Computer and Information Science Date: Wed, 26 Jun 1991 13:37:00 GMT Lines: 59