Xref: utzoo comp.software-eng:3925 comp.lang.eiffel:1002 Path: utzoo!utgpu!news-server.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!zaphod.mps.ohio-state.edu!swrinde!ucsd!hub.ucsb.edu!eiffel!bertrand From: bertrand@eiffel.UUCP (Bertrand Meyer) Newsgroups: comp.software-eng,comp.lang.eiffel Subject: Re: OOP and software reuse Message-ID: <365@eiffel.UUCP> Date: 12 Jul 90 19:49:33 GMT References: <39400113@m.cs.uiuc.edu> <112789@linus.mitre.org> <558@argus.mrcu> Organization: Interactive Software Engineering, Santa Barbara CA Lines: 41 From <558@argus.mrcu> by paj@mrcu (Paul Johnson): > > Meyer writes of extracting and brushing up > classes after an application is finished. What I wrote was, I hope, somewhat more nuance'. The observation to which Mr. Johnson refers is descriptive rather than prescriptive: many good reusable components have evolved from more specialized ones through a process of generalization. If you can write components that are reusable right from the start, then great. But an ``existence proof'' is required: you cannot be sure that a component is reusable until you have shown it to be at least usable. If the component's initial avatar was as an element of a specific but reasonably successful system, it has passed that first test - certainly not a sufficient condition, but a necessary one. The comment also has a more practical side. To develop good reusable components, it is certainly better to have as your official charter the development of reusable software components. Most people, however, work in a context where managerial concerns are more short-term; the decision makers want to see working programs more than they want to see high-quality reusable components. This is what (in published discussions of these topics) I have called the traditional ``project culture'', as opposed to the ``component culture'' fostered by object-oriented techniques. Since most people work in an environment where the project culture is the dominant one, the more modest approach to reusability - building up reusable components from specific ones, as opposed to more ambitious efforts having reusability as their avowed goal - may be the only practical one. I have seen it work quite well. I agree with Mr. Johnson that its success requires the designer to have a mental model of future component usage which goes beyond the original application. The only way to validate this model is to apply the components successfully to two or more widely different applications. -- -- Bertrand Meyer bertrand@eiffel.com