Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!shadooby!eecae!tank!uxc!uxc.cso.uiuc.edu!m.cs.uiuc.edu!p.cs.uiuc.edu!johnson From: johnson@p.cs.uiuc.edu Newsgroups: comp.lang.eiffel Subject: Re: First Class Routines [Short but Message-ID: <118100001@p.cs.uiuc.edu> Date: 27 Mar 89 19:24:00 GMT References: <657@cf-cm.UUCP> Lines: 52 Nf-ID: #R:cf-cm.UUCP:657:p.cs.uiuc.edu:118100001:000:2555 Nf-From: p.cs.uiuc.edu!johnson Mar 27 13:24:00 1989 I'll comment on several articles. >Organization: U of Cambridge Comp Lab, UK >Senders: Peter Dickman & Stephen Hailes > >In our opinion, inheritance is likely to compound the problems inherent in >maintaining large systems, even though it superficially makes this easier >in the short term. > Actually, inheritance does not help all that much in the short term, but its main advantages come with large systems developed over a long period of time. It takes a long time to find good abstract classes, and they are usually discovered by generalizing a number of concrete ones. If you aren't careful, inheritance just ends up being the edit history of a program. You have to reorganize your class hierarchy to prevent this from happening. In the process you discover new abstractions. awn@computing-maths.cardiff.ac.uk (Andrew) responds with: >This is interesting, has anyone done a comparitive study of Object >Oriented and other programming methodologies for designing large >systems? What advantages do OO languages bring to the process? Nobody does comparative studies of anything for designing large systems. It is too expensive. Nobody wants to spend a few million dollars to build a second version of a system just to see which method works better. >Superficially at least, OO seems to be little more than a syntactic nicety >which can reduce the amount of typing you need to do when defining a system. >Closer study reveals that OO is a nice way of organising the reusability of >code and other information and so might reduce the time taken to 'evolve' >an existing system. Yes, the main advantage of OOP is that it makes it possible to design elegant systems. You can do bad programming in any language, but a good object-oriented design can make it really easy to understand what is going on. Abstract classes can describe the interfaces between different kinds of components. >However I remain unconvinced >that for large systems (say 200 classes or more) OO will not add to >the complexity of the problem. The inheritance mechanism with all >its wondeful 'rename' and 'redefine' and 'local' and 'public' is >confusing, even to someone who knows what is going on and will I'm sure >create an inertia of its own to the process of implementing systems. A highly polished set of classes will not have 'rename' and 'redefine'. They are what you use to achieve unplanned reuse. Once you have a working system then you should restructure it to remove the kludges you built while you were prototyping.