home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #19 / NN_1992_19.iso / spool / comp / object / 3380 < prev    next >
Encoding:
Text File  |  1992-09-02  |  4.3 KB  |  86 lines

  1. Newsgroups: comp.object
  2. Path: sparky!uunet!gumby!wupost!rice!cs.rice.edu!mcw
  3. From: mcw@cs.rice.edu (Michael Wirth)
  4. Subject: Re: Object-Oriented Methodologies - Class Specifications
  5. Message-ID: <BtyJK8.GFH@rice.edu>
  6. Summary: Generic functions make factoring behavior easier 
  7. Sender: news@rice.edu (News)
  8. Organization: Rice University, Houston
  9. References: <715276480.1.p00058@mail.psi.net> <1992Sep1.220559.10346@m.cs.uiuc.edu> <1992Sep2.140048.11829@bcrka451.bnr.ca>
  10. Date: Wed, 2 Sep 1992 15:40:55 GMT
  11. Lines: 73
  12.  
  13.  
  14. "Ronald C. Schultz" <p00058@mail.psi.net> writes:
  15.  
  16. In Rumbaugh's OMT text he
  17. provides a class specification for a circle on page 290.  I quote:
  18. ...
  19.         Public Methods:
  20.                 draw (Window) - draws a circle in the window
  21.                 intersectLine (Line): Set of Points - finds the
  22. intersection of a line and a circle, returns set 0-2 points
  23.  
  24. This class specification screams of unnecessary object coupling.  Why,
  25. for instance, should a circle need to be aware of the existence of
  26. lines? or of the existence of windows?  To me, this class violates the
  27. very concept of a circle as defined in any geometry text.
  28.  
  29. My question - can someone please explain to me why they feel this class
  30. is legitimate, (or illegitimate for that matter).  Why isn't the draw
  31. operation and intersectLine operation more appropriately assigned to the
  32. drawing application itself, rather than the circle?  Rumbaugh's OMT as
  33. well as some other OO methods seem to directly oppose long-term reuse of
  34. the method's analysis and design products.  Are others encountering the
  35. same issues?
  36. --------------------------------------
  37.  
  38. It's very interesting to note how our use of language (both programming and
  39. human) influences our thinking.  In particular, use of a message passing style
  40. of OOP, where methods are "owned" by their target class, leads to the curious
  41. asymmetry noted above.  In a language, CLOS, which uses generic functions and
  42. multi-methods (i.e., which specialize on more than one argument), this
  43. asymmetry can be avoided, i.e., we would define a generic function, INTERSECT,
  44. which would specialize on both its arguments.  One specific method which it
  45. would be useful to define then would specialize on lines and circles:
  46.         INTERSECT((x, LINE) (y, CIRCLE))
  47. Who "owns" this method?  Probably some higher level entity, like the "geometry
  48. package".
  49.  
  50. I find this discussion to be "deja vu all over again" and to contain several
  51. ironies:
  52. 1) In a very interesting panel discussion at the '89 OOPSLA, Deutsch, Kiczales
  53. and Stroustrup were each asked to talk about one of the other's languages.
  54. Stroustrup discussed CLOS and used the example of INTERSECTING OBJECTS to show
  55. why he thought CLOS's generic functions were useful.
  56.  
  57. 2) One of the KEY IDEAS in Rumbaugh, et al's book is that relationships between
  58. objects, i.e., associations, are often important entities in their own right,
  59. and need to be treated separately.  I find it interesting that the cited
  60. example from the same book doesn't recognize or take advantage of that.
  61.  
  62. Subsequent comments to the original message contained some interesting issues:
  63. 1) Things only get interesting when you have lots of classes, i.e., lots of
  64. possible types of relationships.  Agreed.  Just like the real world, isn't it?
  65. It's in modeling these relationships where our applications gain their real
  66. power.
  67.  
  68. 2) What about the explosion of pair-wise methods?  Generic functions don't make
  69. the combinatorics any easier than message passing -- you still have the same
  70. number of cases to deal with.  But they make it a lot cleaner and easier to
  71. implement a solution.  In the case of lots of different types of intersecting
  72. objects, you write INTERSECT methods for the important cases (i.e., common,
  73. performance limiting, etc.) and a default method which handles all the others.
  74. Note that this default method may have to ask the two objects of interest for
  75. help, "Give me a bit map of your perimeter".  Note the division of labor and
  76. knowledge here.  CIRCLE doesn't have to know anything about BEZIER-CURVE to
  77. be able to participate in an intersection test with one.
  78.  
  79. Mike Wirth
  80. mcw@cs.rice.edu
  81.  
  82. PS: I suspect readers can get their fill of the message passing vs. generic
  83. function debate in the "O.M(...) vs M(...), and is the Real World O-O?" thread
  84. in this newsgroup.  I say "suspect" because I've stopped reading that thread --
  85. couldn't handle the volume :-)
  86.