TI Composing Systems Using Tool Abstraction LT CUCS-034-90 OR COLUM YR 1990 AU David Garlan AU Gail E. Kaiser AU David Notkin AV ftp cs.columbia.edu:pubreportsreports-1990cucs-034?-90.ps.Z AB The well-known notion of data abstraction, which separates the interface of a module from its implementation, permits the representation and implementation of abstract data types to evolve without affecting the module's clients. However, many enhancements change the function of a system, not just its implementation. Data abstraction does not directly ease the difficulties and costs of such enhancements. {\it Tool abstraction} complements data abstraction by supporting evolutionary changes that are made incrementally and independently. This approach structures a system as a pool of shared data structures, viewed by a collection of cooperating tools, each of which provides a piece of the overall function. This article identifies tool abstraction as the common foundation of a variety of existing systems -- including spreadsheets, structure-oriented environments, production systems, and object-oriented systems.