From ... From: Erik Naggum Subject: Re: making virtual functions in CL Date: 1999/01/17 Message-ID: <3125580309189239@naggum.no>#1/1 X-Deja-AN: 433676108 References: <3125271020612984@naggum.no> mail-copies-to: never Organization: Naggum Software; +47 8800 8879; http://www.naggum.no Newsgroups: comp.lang.lisp * tar@sevak.isi.edu (Thomas A. Russ) | This is a useful semantic concept when one is defining abstract | superclasses, ie, classes which are not expected to be instantiated | directly. This is typically done in order to have a common interface, or | in situations where some portion of the functionality can be implemented | by methods on the abstract class, but for which some additional concrete | methods are required for proper functioning. | | This does not seem like an unreasonable request. no, it isn't: it caused the concept of "interfaces" in Java. however, the "virtual" _implementation_ of this request as found in C++ is inherently flawed and should not be replicated anywhere. there are many ways to enforce a protocol or interface. a language may implement one way to do it, and that's all you get. Common Lisp is not similarly constrained. if you want to specify an interface that should cause all classes to implement their own methods, we should not look at how C++ was broken and put back toghether with duct tape -- the duct tape is not hold the solution. suppose a generic function would refuse to find methods for classes with certain properties or relationships (David has already implicated the generic functions, btw), such that there would be no danger of calling the method that "belongs" to a superclass, would it operationally define an interface? we have method classes, generic function classes, and method combination types at our command. can something be built with them that ignors the class precedence list and so does not find methods for superclasses of some or any of its arguments? this does violate the spirit of inheritance, but I believe the whole purpose here is to _have_ "disinherited" interface functions. let's do something C++ couldn't do: let's get it right. #:Erik -- SIGTHTBABW: a signal sent from Unix to its programmers at random intervals to make them remember that There Has To Be A Better Way.