Newsgroups: comp.lang.smalltalk,comp.object
Path: cantaloupe.srv.cs.cmu.edu!das-news2.harvard.edu!fas-news.harvard.edu!newspump.wustl.edu!news.ecn.bgu.edu!usenet.ins.cwru.edu!howland.reston.ans.net!swrinde!pipex!uknet!comlab.ox.ac.uk!sable.ox.ac.uk!lady0065
From: lady0065@sable.ox.ac.uk (David Hopwood)
Subject: Re: [Q] Multiple Inheritance (Flame bait)
Message-ID: <1995Feb9.125742.5565@inca.comlab.ox.ac.uk>
Sender: david.hopwood@lmh.oxford.ac.uk
Organization: Oxford University, England
References: <JKVG.95Jan29195005@kamet.ccs.neu.edu> <3gr7u7$pgi@ns.oar.net> <1995Feb3.162310.2504@rcmcon.com> <3h6fvp$mjm@ns.oar.net>
Date: Thu, 9 Feb 95 12:57:41 GMT
Lines: 54
Xref: glinda.oz.cs.cmu.edu comp.lang.smalltalk:20607 comp.object:26430

In article <3h6fvp$mjm@ns.oar.net>,  <drr@terrapin.raleigh.com> wrote:
>In <1995Feb3.162310.2504@rcmcon.com>, rmartin@rcmcon.com (Robert Martin)
>writes:
>>drr@terrapin.raleigh.com writes:
>>
>>>Basically it's the "Duck principle."

>>>Most current OOPS-languages do not directly address this issue. C++
>>>gives it to you through MI, 
>>
>>C++ gives it to you through abstract classes, like the one above.  Such
>>classes can be multiply inherited so that a single object can respond
>>to more than one interface.
...
>>>In fact in most cases MI confuses the issue...

MI isn't the cause; it's a symptom. You need MI to do multiple subtyping in
C++. Fact is, there are quite a few idioms you need to do anything constructive
in C++. That doesn't mean the language is unusable (although it does mean I
don't like using it :-)

>>No.  If you have properly separated the interface from the
>>implementation, then there is no inconsistency to fix up.
>
>Agreed. However, my jaded experience (see flames above) leads me to believe
>that this is the exception rather than the rule. In maintenance it is the
>norm.

Exactly. You _can_ write C++ in a style which completely separates interface
from implementation. This works reasonably well (at least for small projects).
But it doesn't look very much like most C++ code I've come across.

>... In short, the point is that object behavior and object
>representation are two entirely different animals, and ALL (CAVEAT LECTOR:
>that I know of) OOPS-languages confuse them.

I know of at least three that do not: Cecil, Trellis/Owl, and Sather.
I'm sure there are a few others.

Information on Cecil can be found at:

http://www.cs.washington.edu/research/projects/cecil/www/cecil-home.html

and on Sather:

http://www.icsi.berkeley.edu/Sather

(sorry, no web references for Trellis/Owl, but there was an article in
OOPSLA a few years ago).

So you see, there are nice languages out there :-)

David Hopwood
david.hopwood@lmh.oxford.ac.uk
