Interactions of Abstractions in Programming (2000)
omputer programs written by humans are largely composed of instances of well-understood data and procedural abstractions. Clearly, it should be possible to generate programs automatically by reuse of abstract components. However, despite much effort, the use of abstract components in building practical software remains limited. We argue that software components constrain and parameterize each other in complex ways. Commonly used means of parameterization of components are too simple to represent the multiple views of components used by human programmers. In order for automatic generation of application software from components to be successful, constraints between abstract components must be represented, propagated, and where possible satisfied by inference. A simple application program is analyzed in detail, and its abstract components and their interactions are identified. This analysis shows that even in a small program the abstractions are tightly interwoven in the code. We show how this code can be derived by composition of separate generic program components using view types. Next we consider how the view types can be constructed from a minimal specification provided by the user.
In Lecture Notes in Artificial Intelligence, Vol. 1864, pp. 185--201 2000. Springer-Verlag. ISBN 3-540-67839-5.

Gordon Novak Faculty novak [at] cs utexas edu