home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #19 / NN_1992_19.iso / spool / comp / lang / objectiv / 482 < prev    next >
Encoding:
Text File  |  1992-08-27  |  5.1 KB  |  109 lines

  1. Newsgroups: comp.lang.objective-c
  2. Path: sparky!uunet!gatech!udel!louie!hercules.cis.udel.edu!carroll
  3. From: carroll@hercules.cis.udel.edu (Mark C. Carroll)
  4. Subject: Re: Objective-C vs. C++
  5. Message-ID: <1992Aug27.153118.29026@udel.edu>
  6. Sender: usenet@udel.edu (USENET News Service)
  7. Nntp-Posting-Host: hercules.cis.udel.edu
  8. Organization: University of Delaware, Newark
  9. References: <1992Aug25.142415.7762@uc.msc.edu> <3330@tivoli.UUCP>
  10. Date: Thu, 27 Aug 1992 15:31:18 GMT
  11. Lines: 96
  12.  
  13. In article <3330@tivoli.UUCP> taylor@foraker.tivoli.com (Eric Taylor) writes:
  14. >Obj. C does not have multiple inheritance.
  15. >I find the a BIG loss.
  16.  
  17. Why?
  18.  
  19. In general, I find a lot of people who _talk_ about how wonderful and
  20. essential multiple inheritance is to serious programming. But in real
  21. day to day programming, I've only seen two ways in which it is really
  22. useful:
  23.  
  24.   1> In C++, MI is used to "cheat" the type system. C++ requires
  25.     that you declare a type for each parameter to a procedure. The
  26.     "type" of an object is used to determine the set of methods 
  27.     which you are allowed to call on that object during the
  28.     procedure. If there are several different suites of messages
  29.     that a given object may want to be able to call, you've got
  30.     to declare several superclasses, each of which presents one
  31.     of the method suites that you want to use.
  32.  
  33.    For example, in a project that I'm currently working on, I've got
  34.    objects which are sometimes treated as mutable data, and sometimes
  35.    as executable code. In C++, I'd have to implement two superclass,
  36.    class Mutable, and class Executable, and when I used one of the objects,
  37.    I'd have to declare it as either Mutable or Executable depending on
  38.    the way in which I was using it. For my application, it _really_ doesn't
  39.    make sense for this kind of object to inherit from _either_ of those
  40.    classes, but if I want to be able to use it the way I need to, I need
  41.    to create an artificial inheritance relationship in order to convince
  42.    the type system to allow me to use them.
  43.  
  44.     In Objective-C, the dispatch system is different, and you don't have
  45.     to declare a type to define the method suite that you are going to
  46.     use. (The flip side of that is that you _do_ need to write an error
  47.     handler for innappropriate method calls. But the ability to do that
  48.     is built into the language in a very simple and elegant way.)
  49.  
  50.   2> In languages like CLOS, people do "mixin" programming, which is
  51.     similar to the "protocol" multiple inheritance of the newest version
  52.     of C++. Mixins are similar to the above described usage; the difference
  53.     is that the inheritance relation is considered to not be the is-a
  54.     relation, but rather the "implements" relation. So if A inherits from
  55.     GarbageCollectable, that means that A implements the methods of
  56.     the class named GarbageCollectable. Mixin programming typically makes
  57.     use of _extremely_ large numbers of very small classes. The C++ object
  58.     model is very bad at mixin style programming.
  59.       
  60.  
  61. >Objective C syntax is even weirder in class
  62. >definition than C++.
  63.  
  64. This I don't understand at all. The syntax is actually _clearer_ in
  65. Objective-C, and I don't think that either is wierd. (The reason that
  66. I say the Objective-C is clearer is because methods and instance
  67. variables are clearly seperated in Objective-C, whereas I find it easy
  68. to jumble them in C++ because they are interspersed. Personal taste
  69. and personal brain-damage, but I _really_ think that they should be
  70. seperated, because they are conceptually two completely different
  71. things.)
  72.  
  73. >I don't seen to remember any operator overloading
  74. >in Obj. C  I may be wrong.
  75.  
  76. Depends what you mean by "operator overloading".
  77.  
  78. C++ allows you to bind method calls to operations in standard C
  79. syntax.  So, in effect, C++ has said that "x+y" does _not_ mean add x
  80. to y; it means call the function "operator+(x,y)".
  81.  
  82. Objective-C doesn't do that. The designer of Objective-C decided that
  83. the meaning of method calls (Object-dispatch) was fundamentally
  84. different from the meaning that is automatically associated with the
  85. standard operations of a programming language, the two should be
  86. syntactically distinguished. So in Objective-C, all method calls are
  87. done using method call syntax, to clearly distinguish dispatch from
  88. primitive operations. So, to add two objects, you need to call
  89. something like "[a add: b]".
  90.  
  91. But on objects, "operations" are method calls, and those can be 
  92. overloaded to your hearts content. So for _any_ operation you
  93. perform on an Objective-C object, it is overloadable. It just has
  94. to be expressed in method-call syntax.
  95.  
  96. Now, please, can we try to prevent this from expanding into yet
  97. another My Language Can Beat Up Your Language argument? C++ and
  98. Objective-C are two different languages designed for two different
  99. purposes where each is better at what it was designed for!
  100.  
  101.     <MC>
  102.  
  103.  
  104. -- 
  105. || Mark Craig Carroll: <MC>     || "Humanity isn't a physical description,
  106. || Univ of Delaware, Dept of CIS|| it's a spiritual goal. It's not something
  107. || Grad Student/Labstaff Hacker || you're given, it's something you earn."
  108. || carroll@udel.edu             ||     - _One_, by Richard Bach
  109.