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!