Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!utgpu!water!watmath!clyde!cbosgd!ihnp4!inuxc!iuvax!pur-ee!uiucdcs!uiucdcsp!johnson From: johnson@uiucdcsp.UUCP Newsgroups: comp.ai Subject: Re: Software Reuse (short title) Message-ID: <76600012@uiucdcsp> Date: Wed, 8-Jul-87 23:10:00 EDT Article-I.D.: uiucdcsp.76600012 Posted: Wed Jul 8 23:10:00 1987 Date-Received: Sun, 12-Jul-87 11:07:34 EDT References: <1339@ogcvax.UUCP> Lines: 28 Nf-ID: #R:ogcvax.UUCP:1339:uiucdcsp:76600012:000:1659 Nf-From: uiucdcsp.cs.uiuc.edu!johnson Jul 8 22:10:00 1987 Object-oriented programming languages like Smalltalk provide a great deal of software reuse. There seems to be several reasons for this. One is that the late bound procedure calls (i.e. message sending) provide polymorphism, so it is easier to write generic algorithms. Late binding encourages the use of abstract interfaces, since the interface to an object is the set of messages it accepts. Another reason is that class inheritance lets the programmer take some code that is almost right and convert it without destroying the original, i.e. it permits "programming by difference". These two features combine to encourage the creation of "application frameworks" or "application toolkits", which are sets of objects and, more importantly, interfaces that let the application developer quickly build an application by mixing and matching objects from existing classes. There are a number of ways that an abstract algorithm can be expressed in these languages. An abstract sort or summation algorithm can be built just using a polymorphic procedure. Abstract "process all" and reduction algorithms are provided by inheritance in the Collection class hierarchy of Smalltalk, and a toolkit can be used to describe the abstract design of a browser or editor from a set of abstract data types, a display manager, and a dialog control component (i.e. the Model/View/Controller system). The Smalltalk programming environment also provides tools to help the user find code and to figure out what it does. While these tools (and the language) could stand some improvement, they already provide a lot of what is needed for code reuse. And they don't use A.I!