Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!usc!julius.cs.uiuc.edu!ux1.cso.uiuc.edu!ux1.cso.uiuc.edu!m.cs.uiuc.edu!johnson From: johnson@m.cs.uiuc.edu Newsgroups: comp.object Subject: Re: Void references Message-ID: <77500065@m.cs.uiuc.edu> Date: 21 Nov 90 12:11:00 GMT References: <447@eiffel.UUCP> Lines: 24 Nf-ID: #R:eiffel.UUCP:447:m.cs.uiuc.edu:77500065:000:1199 Nf-From: m.cs.uiuc.edu!johnson Nov 21 06:11:00 1990 pcg@cs.aber.ac.uk said: >Abstract (deferred) classes are no good of course. They are just a hack >to decouple a bit the algebra of interfaces from that of >implementations, which are otherwise coupled in inheritance. I am shocked! What can this mean? Abstract classes are one of the most important design techniques in object-oriented programming! Reading on, I decided that Piercarlo and I have different definitions of abstract classes. I think that he defines an abstract class as one that has NO implementation, in which every method is deferred. However, my definition of an abstract class is that it is a class that does not have a COMPLETE definition, in which there is SOME method that is deferred. Abstract classes according to my definition are a crucial technique for reusing classes. An abstract class is a template for its subclasses, and replaces other ways of reusing design such as code skeletons. I agree with Piercarlo that abstract classes should not be used just to represent types (though of course if you are programming in C++ then you have no other choice). Thus, we probably don't really disagree. Ralph Johnson -- University of Illinois at Urbana-Champaign