home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #19 / NN_1992_19.iso / spool / comp / object / 3329 < prev    next >
Encoding:
Internet Message Format  |  1992-08-26  |  35.2 KB

  1. Path: sparky!uunet!zaphod.mps.ohio-state.edu!uakari.primate.wisc.edu!sdd.hp.com!hpscdc!hplextra!otter.hpl.hp.com!hpltoad!cdollin!kers
  2. From: kers@hplb.hpl.hp.com (Chris Dollin)
  3. Newsgroups: comp.object
  4. Subject: Re: O.M(...) vs M(...), and is the Real World O-O?
  5. Message-ID: <KERS.92Aug26181137@cdollin.hpl.hp.com>
  6. Date: 26 Aug 92 17:11:37 GMT
  7. References: <1992Aug5.162329.22871@ucunix.san.uc.edu> <KERS.92Aug21150658@cdollin.hpl.hp.com> <t5anrkq.objsys@netcom.com>
  8. Sender: news@hplb.hpl.hp.com (Usenet News Administrator)
  9. Organization: Hewlett-Packard Laboratories, Bristol, UK.
  10. Lines: 763
  11. In-Reply-To: Bob Hathaway's message of Tue, 25 Aug 92 22:06:58 GMT
  12. Nntp-Posting-Host: cdollin.hpl.hp.com
  13.  
  14.  
  15. The usual quoting conventions apply. Over 700 lines this time, but
  16. there's lots of context -- just as well, since we've had a gap of
  17. several days.
  18.  
  19. In article ... Bob Hathaway <objsys@netcom.com> writes:
  20.  
  21. |In article <KERS.92Aug21150658@cdollin.hpl.hp.com>, kers@hplb.hpl.hp.com (Chris Dollin) writes:
  22. |>Sorry, I don't think I am subject to that confusion here. (In fact I
  23. |>think the usual way encapsulation is described in OO languages -- with
  24. |>all this emphasis on ``keeping the operations in *the* class'' -- is
  25. |>another mistake. Hiding names and doing method dispatch are two separate
  26. |>things; routinely conflating them is in itself a confusion. In CLOS, the
  27. |>equivalent of encapsulation is provided by using the separate namespace
  28. |>control mechanism, viz packages. At least that's how I understand it --
  29. |>a CLOS person might wish to correct me here.)
  30. |
  31. |I don't.  Firstly, encapsulation does not infer hiding.  There are public,
  32. |private and protected functions available.  Secondly, I've previously
  33. |discussed that packaging isn't even as powerful as something like C++'s
  34. |friend mechanism.
  35.  
  36. [I have no referent for the ``I don't''.][That's ``imply'', not
  37. ``infer''.]
  38.  
  39. First, I claim that encapsulation and name hiding are both mechanisms
  40. for accomplishing the same goals -- namely preventing unauthorised
  41. access to certain functionality. OO encapsulation does so by hiding
  42. certain names according to the class structure. I think name hiding
  43. should be *separate* from class (or type) structure.
  44.  
  45. Second, the public/private/protected distinction is not common to even
  46. all the languages notmally thought of as OOP -- it is lacking in
  47. Smalltalk and Simula, to name but two. It's not clear to me what your
  48. linguistic base is -- do you argue that the tripartite distinction is
  49. *essential* for OO?
  50.  
  51. Third, if the name-control features of ``friend'' were thought to be
  52. sufficiently important outside their originating C++ context, I'm sure
  53. corresponding concepts could be generated for name-hiding and module
  54. structures. I seem to have missed your discussion on the inadequacy of
  55. ``packaging'' to do what ``friend'' does; perhaps you could summarise.
  56.  
  57. Fourth, I argue simply that tying name-hiding to class structure is
  58. simply unnecessary and confining -- that it is simpler and more powerful
  59. to disconnect them. If this means that modules must have friends (and
  60. I'm not sure I believe they do) then so be it.
  61.  
  62. |Yes, but "multi-methods" now also apply to the O.M ... notation and
  63. |O.M ... does not infer using the static types of arguments (see below).
  64. |We use this definition and so does Coplien, so I'll present it as a given.
  65.  
  66. If *your* language has both multi-methods and the O.M(...) notation, how
  67. do you justify the discrepancy between the notational asymmetry and the
  68. semantic symmetry?
  69.  
  70. |The only real difference, as defined in C++, is the receiver can only
  71. |undergo standard conversions (including derived to base casting) and not
  72. |user-defined conversions.
  73.  
  74. Ie, it's not multi-methods, although you can make it do some of the same
  75. things if you try hard enough.
  76.  
  77. |>|And I don't like hearing that multi-methods are a superset of OO dispatch.
  78. |>
  79. |>Not liking it is your problem, because they *are* a superset.
  80. |>Conventional OO dispatch is simply the case where a particular argument
  81. |>position is selected and the (types of) all other arguments ignored [for
  82. |>the purpose of method selection]. This is usually combined with a
  83. |>special syntax for method invocation (message sending, whatever).
  84. |>Sometimes this is the *only* syntax (and semantics) for invoking
  85. |>actions. [Yukk.]
  86. |
  87. |This is wrong.  For the fifth time, all dynamic types of all arguments are
  88. |used in our systems here with the O.M ... notation and they always have
  89. |and IMHO they always should be in any system where this applies.
  90.  
  91. Up until this message (at least in this series) you had not said that
  92. you were discussing a language invented by you-plural. You had claimed,
  93. or appeared to claim, that the use of the types of all arguments (for
  94. dispatch) was a property of other OO languages, particularly those that,
  95. in fact, do not possess it.
  96.  
  97. Subject to a discussion of you actual rules for dispatch, this looks
  98. like multi-methods, *except* that your remarks above suggest that the
  99. rules are asymmetric, ie, biassed toward the O of the O.M. In this case,
  100. I suggest that you stop referring to them as ``multi-methods'', as this
  101. name is already taken for the symmetric case.
  102.  
  103. |Coplien uses the same terminology, that using the dynamic types of all
  104. |arguments, with M ... or O.M ...  notation, is called multi-methods.
  105.  
  106. Using the index in Coplien, I find:
  107.  
  108. p176: ``In more general terms, what is desired here is the selection of
  109. a member function base on the type of *two* objects participating in an
  110. operation. This facility, not directly available in C++, is called
  111. *multi-methods*. Multi-methods will be brought up briefly again in
  112. Section 9.7.''
  113.  
  114. p327 is listed in the index, but does not seem to actually have any
  115. material on multi-methods.
  116.  
  117. pp349-350, in the aforementioned Section 9.7, titled ``Multi-Methods
  118. under the Symbolic Idiom'': Referring to selection based on (the
  119. types of) *two* arguments, Coplien says: ``Using the types of multiple
  120. operands to choose a member funtion or operator at run time is called a
  121. *multi-method* in object-oriented programming languages embedded in
  122. Lisp.''
  123.  
  124. He then goes on to describe how to implement two-argument multi-method
  125. selection in C++.
  126.  
  127. |Please don't get this wrong again, its getting ridiculous.
  128.  
  129. Look, Bob, what I *said* was that conventional method dispatch, as
  130. evinced in Smalltalk or C++, is a special case of multi-method dispatch.
  131. You can't show me wrong by saying ``but my system has multi-methods, so
  132. you're wrong''. What's more, Coplien is showing how to *implement*
  133. multi-method dispatch, *given* mono-methods and a notation which
  134. encourages the asymmetric notation. (In fact, the eventual
  135. implementation -- of a generic ``+'' on a tower of Numbers -- uses an
  136. overloaded *global* ``operator +'', not a member operator, so he
  137. *avoids* the asymmetic notation not only at the call site but at the
  138. point of definition!)
  139.  
  140. |You can say: "We in CLOS don't like others using the O.M ... notation
  141. |to use the term "multi-methods" for their multiple-polymorphism even
  142. |though this is becoming a standard practice." But I think a single term
  143. |is preferred to two.
  144.  
  145. ``We in CLOS''? Have I not made it clear that, although I know a little
  146. about CLOS, I do not regard myself as a member of the community? I would
  147. not presume to speak for them. I speak for myself, using the syntax and
  148. semantics of CLOS as a basis for counter-examples to some of your
  149. remarks.
  150.  
  151. Now, *if* the method dispatch is *semantically* symmetric in all its
  152. arguments, then I have no quarrel with using the term ``multi-method''
  153. for it. But, in this case, I cannot see the point in the syntactically
  154. asymmetic notation, since you haven't got a semantically distinguished
  155. argument, and -- as you observed several messages ago -- we'd like the
  156. semantics to be to suggested by the syntax, or -- as I'd put it -- we'd
  157. like to design the syntax to reflect the semantics.
  158.  
  159. But, *if* the dispatch is not semantically symmetric, then it's
  160. different from what ``multi-methods'' mean in CLOS. I think it's a
  161. matter of respect to the CLOS community not to hi-jack their terms from
  162. them. In any case, the term already *has* a clear -- CLOS-based --
  163. meaning (which is shared by Apple's Dylan and Steve Knight's
  164. ``objectclass'' extension to Pop11), so by using the same term you're in
  165. danger of inducing confusion.
  166.  
  167. A single term is preferred to two when *either* the denotations of the
  168. two terms are the same (which is for you to prove, since only you can
  169. tell us what *your* languages semantics is), *or* when the two uses are
  170. in such widely disparate fields that no confusion will arise -- which,
  171. by example, is clearly not the case here.
  172.  
  173. |>This is not an issue of *dispatch*, but an issue of *hiding*. CLOS
  174. |>provides two independant mechanisms to do two different jobs. Naturally
  175. |>using only one of them will not give you the power of both.
  176. |
  177. |But you haven't shown that M ... is a superset of O.M ... in terms of
  178. |dispatch.  And most OO languages provide both notations anyway.
  179.  
  180. Assuming that the O.M notation is used for mono-methods (which, from the
  181. point of view of the *language*, is true in both C++ and Smalltalk),
  182. it's surely clear.
  183.  
  184. Where we have a class C1 with a mono-method M1 on self c1 and arguments
  185. a1i, we can write a multi-method description
  186.  
  187.     define :method M1( a1i, c1: C1 ); ... enddefine
  188.  
  189. (A CLOS expert can supply CLOS syntax; this is ObjectClass syntax, I
  190. hope, hence the Popish move of the self argument to the final position.)
  191.  
  192. Repeat as necessary for the other mono-method definitions. Hence, you
  193. can write mono-methods just as you could in a conventional language.
  194. What's more, you can, if you choose, discriminate on *other* arguments
  195. to the method. It is in this sense that I mean that multi-methods are a
  196. superset of mono-methods; mono-method dispatch is just the case when you
  197. only discriminate on a particular argument position.
  198.  
  199. |>|Please keep in mind we used to allow both forms and rejected the idea because
  200. |>|of poor protection.
  201. |>
  202. |>[Which ``both forms'' were these?
  203. |
  204. |Allowing methods to be declared inside or outside of a class.
  205. |
  206. |>Which ``we'' was this? Which
  207. |
  208. |At this company.  We have a first and second generation OO language.
  209.  
  210. To the uninitiated (eg, me), ``we'' sounded as though it was supposed to
  211. mean the OO community as a whole. Perhaps you should share your data
  212. with us. For example, were you using a proper module mechanism when you
  213. discovered you had ``poor protection''? If not, it's hardly a surprising
  214. result.
  215.  
  216. Of course, if you don't really believe in symmetric (multi-method)
  217. selection, then perhaps there are things you think of as ``poor
  218. protection'' that I think of as ``reasonable access'. Which is why I ask
  219. for data. The approach, the problems, the solutions considered --
  220. *these* are at least as valuable as your conclusions. Without them, how
  221. can we know if your solutions apply to us? [``us'' is ``anyone out here
  222. listening'', not -- for example -- just Hewlett-Packared.]
  223.  
  224. |>``idea''?] The protection offered by OO languages is twofold -- name
  225. |>hiding, and automated method selection. CLOS has both. [What it
  226. |>*doesn't* have is static typing. This is another independant issue, and
  227. |
  228. |  [I thought CLOS specializers provide for static typing with parameters.]
  229.  
  230. No, as I understand it, it's all dynamic -- at least in principle, ie, a
  231. ``smart'' compiler might be able to exploit the information at
  232. compile-time, but it's not abliged to.
  233.  
  234. |>I think it has no bearing on the original topic -- O.M(...) vs M(...) --
  235. |>so I propose we don't follow it up here.]
  236. |
  237. |With class encapsulation the correct use of an object can be guaranteed
  238. |and the integrity of objects insured but without it (CLOS programs)
  239. |this isn't true because a function can be declared anywhere and have
  240. |complete access to all of a class' representation, at least if this
  241. |new package construct (which I haven't ever seen used or defined for
  242. |CLOS) is forgotten in even one place.
  243.  
  244. What ``new'' package construct? Packages have been in Common Lisp from
  245. the beginning. To hide a class, stuff it in a package, and export only
  246. the functions that you wish others to use. That's the ``one place'' you
  247. mustn't forget to put it. After that, you cannot access *anything*
  248. [!below] about the class without using the package. Even if you use the
  249. package, you *still* haven't got access to the hidden -- non-exported --
  250. functions. Are you sure you know how Common Lisp packages work?
  251.  
  252. [!below: well, actually, it's possible to violate this hiding, for
  253. example by using the ``::'' operator -- or its run-time equivalent -- to
  254. get at *any* symbol inside the package. The question is, how much
  255. protection do you want? It's possible to inspect code -- automatically
  256. -- for such dubious uses, and reject them. I am more interested in
  257. preventing *mistakes* due to using features that should be hidden than I
  258. am in preventing malicious attack. After all, in C++ nothing prevents me
  259. from rooting around in the source and doing some slippery casting to get
  260. at private data, if I really want to. If it were needed, Common Lisp
  261. could grow a way of disconnecting the symbols in a package from their
  262. values, once that package was ``completed'', making the attack I
  263. suggested impossible.]
  264.  
  265. |>Just to check, Bob, do you still think that Smalltalk, C++, and Simula
  266. |>*have* multimethods? [I don't dispute that you can code up some sort of
  267. |>equivalent. But you could do *that* in C, or assembler, or Scheme.] If
  268. |>so, could you explain why?
  269. |
  270. |I've already pointed out they don't; to repeat myself: Smalltalk doesn't
  271. |because its statically typeless and C++ doesn't because it is statically
  272. |typed.
  273.  
  274. That's odd, because a few messages back, you claimed that they *did*
  275. have multi-methods. At least, that's how *I* read what you said; if you
  276. were actually discussing your company's own language, there was no way I
  277. could tell, and you certainly didn't disabuse me of the notion.
  278.  
  279. You reasoning is a little difficult for me to follow, because it seems
  280. that if both static typing and static non-typing rule out multi-methods,
  281. then *no* language can have them. Fortunately, (the
  282. non-statically-typed) CLOS *does* have them, at the cost of disposing of
  283. the first half of your argument above.
  284.  
  285. My position here is that static vs non-static (dynamic) typing is an
  286. independant issue -- that is, both statically and dynamically typed
  287. langauges can have (or not have, of course) multi-method dispatch.
  288.  
  289. |I've designed and implemented more powerful facilities than
  290. |these myself, please take my word for it when it comes to static and
  291. |dynamic typing of any kind!
  292.  
  293. I'd rather you explained your reasoning here, rather than taking your
  294. word for it.
  295.  
  296. |This is wrong since we have had true multi-methods (or multiple-polymorphism)
  297. |with the O.M ... for some time (in the languages used and developed at this
  298. |company).
  299.  
  300. As above, *if* you have multi-methods you can *still* use the O.M(...)
  301. notation, but the grammar no longer reflects the semantics -- which, by
  302. your own standards, is a Bad Thing, no?
  303.  
  304. |>|OO still supports operators (including overloading), just look at C++. This
  305. |>|is an AWM, however.
  306. |>
  307. |>Yes, C++ supports compile-time overloading (and run-time OO dispatch) --
  308. |>losing out on the unification. Sad.
  309. |
  310. |I won't comment on your terminology but I think you'll be interested in my
  311. |C++ superset when it comes out (should be sometime next year).  It beats
  312. |CLOS and Self (but runs infinitely faster) and obviously beats C++ (but
  313. |is infinitely more powerful).  Put that in your cereal bowl with strawberries!
  314.  
  315. The fact that you said that you won't comment on my terminology suggest
  316. that you have something you want to say. Spill it.
  317.  
  318. If your product is a C++ superset, it's presumably more complex than
  319. C++, which to me sounds like a severe disadvantage. I don't suppose
  320. there's a description you can post, or that we can FTP?
  321.  
  322. As for my cereal bowl, I'll have you know that I don't pollute
  323. strawberries with cereal. What goes on cereal is banana yoghurt. Failing
  324. that, blackberry-and-apple ditto.
  325.  
  326. |>...
  327. |>Suppose I write a set of Pop procedures which perform actions. The
  328. |>``doer'' of the action (let's say they are known to be the doer because
  329. |>their energy level gets drained, their experience level goes up,
  330. |>observers are informed that the doer has done something, etc)
  331. |
  332. |  This sounds like a world model.
  333. |
  334. |>is held in the permanent (global) variable ``doer''.
  335. |
  336. |  This is not, this is just terrible.  There may be many doers.
  337. |  When going AI, stay AI...
  338.  
  339. Yes, and then I showed how in Pop I could cope with multiple doers, to
  340. which you said:
  341.  
  342. |More contrivances.  Yes, other schemes can work but the scheme I presented
  343. |is natural, complete, and works well.  Anything could be used but the
  344. |instructional 2nd person is excellent for algorithms and has its place
  345.  
  346. All code is contrivance. It might be ``natural'' (which means ``you're
  347. used to it''). It might be ``complete'' (but how would you tell?). It
  348. might ``work well'' (which might mean that you've missed the failures or
  349. twisted them). In fact, I find treating the algorithm as a set of 2nd
  350. person commands is *unnatural*, and likely to be *incomplete* --
  351. showing, once again in this thread, the subjective loading of the term
  352. ``natural''.
  353.  
  354. |(as it always has.  Maybe you're the person who never reads the
  355. |instructions:-)
  356.  
  357. I'm probably the one who does, and then rants at the manufacturer
  358. because they (the instrcutions) are so bloody awful.
  359.  
  360. |-- Philosophy mode now ON ---------------------------------------------
  361. |
  362. |  Chris goes on to say that the world isn't made up of objects and
  363. |  interactions aren't objectively broken down into objects and their
  364. |  associated actions.
  365. |
  366. |I believe the world is made up of objects and their behavior is meaningful.
  367.  
  368. *On the human scale*, this is sort-of true. I have not disputed that the
  369. human notion of ``thing'' -- cup, pencil, person, tree, etc -- fits our
  370. way of thinking, and is useful. How could it be otherwise? Would -- or
  371. could -- we continue to think in a way we recognised as useless, or
  372. meaningless?
  373.  
  374. But do we *really* think in terms of ``messages'' being sent between
  375. objects? [Here, ``we'' is intended to encompass even those poor
  376. individuals that have never had the benefit of being exposed to
  377. object-oriented programming.] I think not. In fact, I think that to do
  378. so is *not* natural for us -- except in those circumstances where those
  379. messages are constructed by us, for us, from us, and to us.
  380.  
  381. When we move away from this human scale, the appropriateness of the
  382. notion of ``object'' begins to be disputable -- to which this discussion
  383. bears (a little) witness. Of course the object metaphor can be pushed
  384. further; we humans are creative, after all.
  385.  
  386. |OO can be used to describe the world even at the most elementary level - an
  387. |atom class, a proton class, an energy class, ... - and OO provides a good
  388. |way of modeling it.
  389.  
  390. OK, then, Bob, 'fess up. Let's see the model, an OO model. First tell us
  391. what *you* mean by an OO model. Then give us models for atoms, protons,
  392. etc. Or, better, give us criteria by which we can recognise objects, so
  393. that *we* can try. [If you have an energy class, does that make
  394. ``energy'' an object?]
  395.  
  396. |I believe Chris falls into a vocal minority because of the ubiquitous
  397. |and voluminous amount of literature and opinion against him.
  398.  
  399. Well then, let's have the references. Let's say ten works which take the
  400. view that the world is object-oriented in the style that Bob has
  401. described in earlier posts.
  402.  
  403. I am *not* interested in works by the sellers of OO methods or OO
  404. language designers, unless they specifically address the issue of the
  405. ``universality'' of OO. I *am* interested in works by physicists,
  406. philosphers, and psychologists. If you (Bob, or any other reader) don't
  407. like these criteria, let me know why.
  408.  
  409. Also, note that earlier in this thread Bob seemed to have the view that
  410. the ``objects'' were given, and things like traffic jams and waves were
  411. not part of the (objects of the) real world. I'd like details that make
  412. this distinction stand up.
  413.  
  414. |A few academic arguments seem to make their way against OO but I
  415. |don't see them gaining popular acceptance in the software engineering
  416. |community.
  417.  
  418. Heavens, Bob, I'm not saying that OO isn't useful, or that it's not
  419. popular (not that popularity has a great deal to do with truth). I'm
  420. saying that it's not universal, and that we shouldn't mistake a
  421. programming and design technique that works tolerably well for systems
  422. that humans have built for a universal description of the world.
  423.  
  424. |Chris then makes a good point, the same one that Grace Hopper
  425. |used to make, that perhaps there should several languages with one for each
  426. |branch of science and that special purpose machines should be built for them
  427. |such as the IBM machines which were built to handle the kinds of numbers
  428. |usually found in the data processing industry.
  429.  
  430. I made a point that may bear a family resemblance with Hopper's, that we
  431. should be prepared to use a variety of notations in capturing the
  432. bahaviour of a system. This is *not* the same as ``one language for each
  433. branch of science'', and I don't really think we should go for
  434. special-purpose machines for running different kinds of programming
  435. language -- although it *is* true that I would like more support for
  436. tagged pointers, and expect to need rather different kinds of
  437. programming languages for massive parallelism than, say, C++ with
  438. threads.
  439.  
  440. |I used to disagree with this philosophy because of a feared Tower of
  441. |Babel problem and because I assumed the descriptive power of something
  442. |such as OO would or could be made sufficient for any domain, and
  443. |perhaps it is.
  444.  
  445. The Tower of Babel problem arises only when there is no mutual
  446. comprehension, not just because of the use of a variety of different
  447. languages.
  448.  
  449. |I am reconsidering this point; however, since I've now seen and heard
  450. |it in many places and from many people.
  451. |
  452. |Perhaps the phrase:
  453. |  The World is Object-Oriented.
  454. |is better served by:
  455. |  The world can be described as Object-Oriented.
  456.  
  457. Some *parts of* the world can be described by using OO.
  458.  
  459. |Chris and a few others may disagree but the consensus in the literature
  460. |clearly shows the above to be the majority view and theirs to be a minority.
  461.  
  462. What consensus? What literature? What price popularity?
  463.  
  464. |>...
  465. |>If that's all you mean, I can't really quarrel with it. But if I call
  466. |>forces ``functions'' and particles ``values'', I can claim that the real
  467. |>word is function-oriented.
  468. |
  469. |But particles can change state in the real world, the functional model
  470. |doesn't capture this naturally/objectively.
  471.  
  472. What do *you* mean by ``functional model''? If you mean something like a
  473. VDM description, with ``functions'' or perhaps ``procedures'' or
  474. ``operations'', we can have something like
  475.  
  476.     operation xmove
  477.     reads particle.where
  478.     changes particle.where
  479.     result particle.where.x = old particle.where.x + 1
  480.  
  481. This seems to capture the particles state-change in a perfectly natural
  482. way.
  483.  
  484. If, on the other hand, you mean ``using pure functions'', then your
  485. notion of naturalness may need retraining (``naturalness is not a
  486. given'')
  487.  
  488.     def xmove p:particle = particle (x => p.where.x + 1, y => p.where.y)
  489.  
  490. Of course, tying this update into the rest of the system may be
  491. difficult, but that may be part of the problem rather than part of the
  492. notation. Or it may not. (I regard this as an open issue; remember that
  493. functional programs *can* talk about implicit state, otherwise doing a
  494. denotational semantics for an imperative language would be impossible.
  495. Of course, this boils down to ``how much coding can you stand?''.)
  496.  
  497. |>But a cup doesn't *have* ``constituent parts'' (unless you count the --
  498. |>human, abstract -- separation into ``handle'' and ``container''). The
  499. |
  500. |Yes it does.  The molecules and so on making up its mass are its aggregate
  501. |parts.  They were there to begin with and they still exist now but in a
  502. |different form.  This is the most natural case of aggregation I can think
  503. |of.
  504.  
  505. So the constituent parts of a cup are its molecules?
  506.  
  507. (a) then the cup is an abstract object -- it's just a name for the
  508. aggregate *and the relationship between its parts*. Clearly the
  509. relationship is important -- consider a cup made of Plastecine (no, I
  510. can't remember the right spelling) which I can deform into a sphere
  511. (pretty useless as a cup), a ring (ditto), or a cylinder (dditto). [This
  512. does, however, show that polymorphism is a Real World property!]
  513.  
  514. (b) If I hit the cup *really hard*, I can knock the atoms apart.
  515. (Actually, I can do that to a limited extend by giving it a positive
  516. charge. This is especially easy if it is made of metal.) Now it's the
  517. *atoms* that are abstract objects.
  518.  
  519. (c) If you go down to the underlying physics, There Are No Objects.
  520. [Physicists please let me know if I'm wrong!] Objects are an
  521. interpretation we place on the physics to make it comprehensible on our
  522. scale and with our intellect.
  523.  
  524. |>|Depends on your domain of discourse: RWM, MWM, or AWM.  The latter two
  525. |>|usually don't worry much about dynamics and space much.  But the former
  526. |>|does.
  527. |>
  528. |>You'll have to explain these terms in more detail, I'm afraid.
  529. |
  530. |First, these terms were made up by me for my own purposes because I am not
  531. |aware of any other such delineations.  I asked for comments on them some
  532. |time ago but didn't get any responses.  In this terminology, the real-world
  533. |model is like VR, plain and simply modeling and simulating the real world
  534. |in much the same way that we see it around us.
  535.  
  536. Would it be correct to describe it as an approximation that uses terms
  537. familiar to us from everyday life, and thus vulnerable to error from
  538. both sources?
  539.  
  540. |Mental worlds are like semantic networks: they can think, reason, and
  541. |are conscious.
  542.  
  543. Mental worlds can think? Semantic networks can think?
  544.  
  545. |We are mental worlds.
  546.  
  547. Well, it's terminology. ``Mental agents'' would surely be better.
  548.  
  549. |Abstract worlds are abstractions.
  550.  
  551. Ah.
  552.  
  553. |Mental worlds are abstractions too but are extremely complex.
  554.  
  555. So conscious, thinking entities are abstractions? [I happen to think
  556. that this is true, but I'm not sure that it's really what Bob means.]
  557.  
  558. |I find the distinctions useful since simple programming is typically
  559. |used for abstract world modeling and something more elaborate is
  560. |appropriate for RWMs and MWMs.
  561.  
  562. Is there no room for complex abstractions that don't think and are not
  563. conscious?
  564.  
  565. |All of these can be described by object-oriented techniques but in
  566. |different ways.  I think all of your examples fit cleanly into these
  567. |models.
  568.  
  569. |>I believe in an objective reality, too, and that it's hard to see. Where
  570. |>we disagree is that I don't think that the notion of object-oriented
  571. |>that appears in OOPLs is particularly appropriate.
  572. |
  573. |Yes, we disagree here.  I believe OO can be used to describe the real world
  574. |in terms close to an objective reality.  For instance, if I invented a
  575. |language based on the real-world I could start with an OO description
  576. |and simply enforce everything in the language instead of thru classes.
  577. |There would still be objects but not much would change.
  578.  
  579. OK< we disagree. Mind you, our readers probably already know this.
  580.  
  581. |>Finding a unified field theory (hard; you don't just stub your toes on them,
  582. |>or have a feeling about them in your gut) would surely be a triumphant
  583. |>*denial* of the ``objectness'' of the real world).
  584. |
  585. |More disagreement from me.  I still think you're in the vocal minority;
  586. |maybe we should have a comp.object poll?  Send email if you'd like to
  587. |follow thru on this; the results should prove most interesting.
  588.  
  589. Let me get this straight. You think that a grand unified theory, which
  590. (so far as we can tell from current physics) would have little or
  591. nothing in it that would be describable as an ``object'', would *not*
  592. deny the ``objectness'' of the world? That the absence of objects from
  593. the description would *support* the notion that the Real World is Object
  594. Oriented?
  595.  
  596. Then you wish to make a descision about the physics of the situation by
  597. a popularity contest among the readers of comp.object -- nay, just those
  598. who have taken the trouble to read the reams that we have jointly been
  599. writing? [Well, at least four people have read at least one of the
  600. posts, not necessarily the same one.]
  601.  
  602. It might make interesting sociology, but I'm burning enough time on this
  603. already.
  604.  
  605. |>The lack of encapsulation in what? -- I've lost track. There is precious
  606. |>little encapsulation in the real world (light cones and black holes come
  607. |>to mind as examples), and I've already stated my view (above, and
  608. |>earlier messages) that [a] in CLOS, encapsulation is provided by
  609. |>name-hiding, and [b] encapsulation is a property we choose to give to a
  610. |>language in order to make aspects of it easier to handle.
  611. |
  612. |Encapsulation is a property we give to classes to insure abstraction.
  613.  
  614. Which is about the same as my point [b] above.
  615.  
  616. |Encapsulating a "weak" (CLOS) class and it methods within a package is
  617. |the same as "strong" (classical OO) classes but I've shown in previous
  618. |postings the former is even weaker than C++'s classes and friends!
  619.  
  620. Let's not be so pejorative. What you seem to be saying here is that CLOS
  621. with packages is as good as (from the encapsulation viewpoint) as
  622. ``classical'' classes (which I suspect is an understatement, given the
  623. separate flexibilty of packages), but that a system with additional
  624. name-control has more name-control (== more powerful) than a system
  625. without it.
  626.  
  627. Or, to put it another way, if you think ``friends'' are important, I can
  628. add them to a general, class-independant name-hiding system.
  629. Encapsulation has little to do with classes -- they are separable.
  630.  
  631. [Of course, you have to demonstrate the the additional ``power'' of
  632. friends actually buys you something in real life.]
  633.  
  634. |>|Actually, its physical dynamics working on aggregate objects.
  635. |>
  636. |>Is this an admission that the ``stack'' doesn't know how to push?
  637. |
  638. |Yes in the RWM domain.  A stack that can push in the AWM domain
  639. |is useful because it is a behavioral abstraction.
  640.  
  641. I'm sorry, I thought part of your argument was that the real world had
  642. objects and messages, and that the objects knew what to do in response
  643. to the messages. Are you now saying that this is *not* the case, and
  644. that the object-oriented description is an *abstraction* of the real
  645. world?
  646.  
  647. And, if we're confining ourselves to some abstract world of
  648. descriptions, why can't I have my *actions* (commands, messages, generic
  649. functions, whatever) doing things, with the objects being passive?
  650.  
  651. |>|Whats the alternative?  Discussions of alternatives would be constructive,
  652. |>|not just pointing out perceived differences with reality or even our ability
  653. |>|to determine a models closeness with it.
  654. |>
  655. |>The language of physics *is* an alternative -- when you want to talk
  656. |>physics.
  657. |
  658. |Good point.  But abandoning a general-purpose tool in favor of many
  659. |special purpose ones requires strong justification.
  660.  
  661. Of course. And the justification is that physics does not contain the
  662. kinds of things we often want to talk about -- such as bank accounts,
  663. prey/predator relationships, windows, gearboxes, and community groups.
  664. Hence the need for a variety of languages.
  665.  
  666. |>A better example would be CSP, if we want to talk processes. It's not
  667. |>clear to me now what your notion of (programmatic) notion of object is
  668. |>-- I had assumed it was something like a Smalltalk object, but now it
  669. |>appears to be an Ada process. OK, we can give some sort of interface
  670. |>specification to a process.
  671. |
  672. |Or Argus or distributed Smalltalk or Dragoon.  But I wouldn't use
  673. |the term "process" here.  The term "Active Object" is preferred by me.
  674. |All the Actor models apply too.
  675.  
  676. I don't mind -- here, the two terms seem to mean much the same thing.
  677.  
  678. |>Earlier, you argued that ``naturalness'' was a key attribute in deciding
  679. |>how the world was structured. Now you say that some things, while
  680. |>``natural'' (treating a push as an object) are in a different domain to
  681. |>the others. How does one tell which is which?
  682. |
  683. |If its in your head its in a MW.
  684.  
  685. That begs the question.
  686.  
  687. |Your head is in the RW (hopefully:-).
  688.  
  689. So does that :-)
  690.  
  691. |The programs you're writing are probably dealing with an AW, seen and
  692. |designed by a MW and exist in some representation in the RW.  If your
  693. |programs deal with MW's they are MWMs.  If they deal with reality as we
  694. |see it they are RWMs.  If they deal with abstractions they are AWMs.  I
  695. |find these distinctions useful and wouldn't mind hearing about perceived
  696. |flaws.  They are just personal contrivances for my hobbies.
  697.  
  698. Well, it's just terminology, right? Incidentally, you seem to suggest
  699. that models and programs are the same (at least, you have given no
  700. examples of non-programmatic models). Is that right? I woyld not like to
  701. so restrict the term.
  702.  
  703. |[By my terminology, your not so real mathematical real-world simulations
  704. |fall into the AWM but approach a RWM.  Perhaps they lie somewhere in between.]
  705.  
  706. Don't think ``boundary'', think ``centre''.
  707.  
  708. |>``Contact''? What does ``contact'' mean for a magnetic field? I was
  709. |>rather under the impression they extended to infinity (unless confined).
  710. |
  711. |Any object occupying space affected by a magnetic field.
  712.  
  713. That's most of them.
  714.  
  715. |Obviously proximity effects the strength.
  716.  
  717. Of course, but the model has the field going out to infinity.
  718.  
  719. |A unified field theorum is necessary for better understanding, modeling
  720. |and simulation.
  721.  
  722. [That's *theory*, not *theorem*] Well, although a UFT would give better
  723. understanding at a pretty detailed level, I'd expect it to make
  724. practically *no* difference to any simulation to do with most ``real''
  725. objects -- like cars, bank-accounts, weather systems, or molecules.
  726. Sub-atomic particles and atoms, maybe.
  727.  
  728. |>Well, it's wonderfully metaphorical, but I don't think it *explains*
  729. |>anything -- I expect an explanation to have more detail, more power, to
  730. |>allow me to make predictions, when it's being presented as a Grand World
  731. |>Model.
  732. |
  733. |Well, I'll just consult with Einstien on this one (that should be
  734. |interesting).  I meant to show the object-oriented techniques can be
  735. |used to describe reality and not to present a complete model.  [It should
  736. |be easier if the new super-collider gets continued funding and gets finished
  737. |on schedule in 1999 but I'm not going to claim to be an expert on this
  738. |subject; as a software engineer going spacebuilding I would consult with
  739. |one.]
  740.  
  741. But if you can't refine the model to do at least as well as existing
  742. non-OO theories, what right have you to say that OO is ``appropriate''
  743. for describing the real world, except as a motivating metaphor? How
  744. would results from the SCSC *help*?
  745.  
  746. |>|>|Yes, we can give attributes to a flock of birds even if thats not the
  747. |>|>|way the real world is broken up.  This is the subjective side, not the
  748. |>|>|objective side of objects.
  749. |>|>
  750. |>|>It's not that it's *subjective*, it's that it's *abstract*. (Subjective would
  751. |>|>suggest that it's private to the individual.)
  752. |>|
  753. |>|You're confusing AWs with MWs (to which I was referring).
  754. |>
  755. |>That's what your model says. Do you have references?
  756. |
  757. |Nope, my terminology is completely contrived because I'm not aware of any
  758. |other distinguishing between these domains.
  759.  
  760. Surely this distinction is meat and drink to philosophers? There must be
  761. *loads* of stuff on this. Anyone got references -- there must be at
  762. least *one* reader hot on philosophy.
  763.  
  764. |To reiterate, I was (perhaps unclearly) referring to a mental (or cognitive)
  765. |model in ones head and not some programmatical abstraction; you drew the
  766. |distinction but mistook the former for the latter.
  767.  
  768. I did? I said it was *abstract*, and I didn't mean that it was
  769. *programmatic*; I meant that it was a mental notion, but one that could
  770. be shared, rather than private to the individual (the latter being
  771. ``subjective'', the term being -- I *think* -- the appropriate one to
  772. use. Philosophically speaking.)
  773. --
  774.  
  775. Regards,    | "If taking devious pains was a sign of laziness, he was quite
  776. Kers.       | prepared to call Hazelton the laziest man alive." Blish (m-o-l)
  777.