The programmer's apprentice
KIDS: A Semiautomatic Program Development System
IEEE Transactions on Software Engineering
The C++ programming language (2nd ed.)
The C++ programming language (2nd ed.)
ACM Computing Surveys (CSUR)
Communications of the ACM
Partial evaluation and automatic program generation
Partial evaluation and automatic program generation
SIGSOFT '93 Proceedings of the 1st ACM SIGSOFT symposium on Foundations of software engineering
Communications of the ACM
Design patterns: elements of reusable object-oriented software
Design patterns: elements of reusable object-oriented software
Artificial intelligence: a modern approach
Artificial intelligence: a modern approach
Software Reuse by Specialization of Generic Procedures through Views
IEEE Transactions on Software Engineering
SciNapse: A Problem-Solving Environment for Partial Differential Equations
IEEE Computational Science & Engineering
Reusing Software: Issues and Research Directions
IEEE Transactions on Software Engineering
Conversion of Units of Measurement
IEEE Transactions on Software Engineering
Creation of Views for Reuse of Software with Different Data Representations
IEEE Transactions on Software Engineering
A New Control Structure for Transformation-Based Generators
ICSR-6 Proceedings of the 6th International Conerence on Software Reuse: Advances in Software Reusability
A formal representation for plans in the programmer's apprentice
IJCAI'81 Proceedings of the 7th international joint conference on Artificial intelligence - Volume 2
The abstraction/implementation model of problem reformulation
IJCAI'87 Proceedings of the 10th international joint conference on Artificial intelligence - Volume 2
Hi-index | 0.00 |
Computer 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 automaticgen eration 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 genericp rogram components using view types. Next we consider how the view types can be constructed from a minimal specification provided by the user.