Many problems require recursively specified types of data and a collection of tools that operate on those data. Over time, these problems evolve so that the programmer must extend the toolkit or extend the types and adjust the existing tools accordingly. Ideally,this should be done without modifying existing code. Unfortunately,theprevailing program design strategies do not support both forms of extensibility: functional programming accommodates the addition of tools, while object-oriented programming supports either adding new tools or extending the data set, but not both. In this paper, we present a composite design pattern that synthesizes the best of both approaches and in the process resolves the tension between the two design strategies. We also showhow this protocol suggests a new set of linguistic facilities for languages that support class systems.
|
3878
|
Design Patterns: Elements of Reusable ObjectOriented Software
– Gamma, Helm, et al.
- 1995
|
|
1447
|
The Java Language Specification
– Gosling, Joy, et al.
- 1996
|
|
1416
|
The definition of Standard ML
– Milner, Tofte, et al.
- 1989
|
|
1301
|
The C++ Programming Language
– Stroustrup
- 1985
|
|
1057
|
The C Programming Language
– Kernighan, Ritchie
- 1978
|
|
294
|
Pizza into Java: Translating theory into practice
– Odersky, Wadler
- 1997
|
|
211
|
Report on the programming language Haskell: a non-strict, purely functional language version 1.2
– Hudak, Jones, et al.
- 1992
|
|
175
|
Monad transformers and modular interpreters
– Liang, Hudak, et al.
- 1995
|
|
157
|
The revised report on the algorithmic language Scheme
– Clinger, Rees
- 1986
|
|
84
|
Object-oriented programming versus abstract data types
– Cook
- 1990
|
|
82
|
The De nition of Standard ML
– Milner, Tofte, et al.
- 1990
|
|
78
|
Type inference for recursively constrained types and its application to OOP
– Eifrig, Smith
- 1995
|
|
78
|
The Java Language Speci cation
– Gosling, Joy, et al.
- 1996
|
|
72
|
Revised 4 report on the algorithmic language scheme
– Rees, Clinger
- 1991
|
|
62
|
2005, ‘PLT MzScheme: Language Manual
– Flatt
|
|
62
|
Evolution of Object Behavior using Context Relations
– Seiter, Palsberg, et al.
- 1998
|
|
61
|
The essence of the Visitor pattern
– Palsberg, Jay
- 1997
|
|
59
|
Composite design patterns
– Riehle
- 1997
|
|
57
|
K.: Efficient Implementation of Adaptive Software
– Palsberg, Xiao, et al.
- 1995
|
|
49
|
Efficient inference of object types
– Palsberg
- 1995
|
|
47
|
Mixin modules
– Duggan, Sourelis
- 1996
|
|
47
|
DrScheme: A pedagogic programming environment for Scheme
– Findler, Flanagan, et al.
- 1997
|
|
41
|
Genericity in Java with Virtual Types
– Thorup
|
|
28
|
Extensible denotational language specifications
– Cartwright, Felleisen
|
|
27
|
Building interpreters by composing monads
– Steele
- 1994
|
|
26
|
On the interaction of object-oriented design patterns and programming languages
– Baumgartner, Laufer, et al.
- 1998
|
|
25
|
User-defined types and procedural data structures as complementary approaches to data abstraction
– Reynolds
- 1975
|
|
16
|
A Little Java, A Few Patterns
– Felleisen, Friedman
- 1998
|
|
14
|
vs. Ada vs. C++ vs. Awk vs. . . . An experiment in software prototyping productivity
– Haskell
- 1994
|
|
10
|
The translator pattern---external functionality with homomorphic mappings
– Kuhne
- 1997
|
|
6
|
Building interpreters by transforming stratified monads. Unpublished manuscript
– Espinosa
- 1994
|
|
5
|
Modular abstract interpreters. Unpublished manuscript
– Findler
- 1995
|
|
3
|
Extensible denotational language speci cations
– Cartwright, Felleisen
- 1994
|
|
2
|
Introduction aux objets. Unpublished manuscript, lecture notes for course de magistere, Ecole Normale Superieure
– Remy
- 1996
|
|
2
|
User-de ned types and procedural data structures as complementary approaches to data abstraction
– Reynolds
- 1975
|
|
2
|
Genericity inJava with virtual types
– Thorup
- 1997
|
|
1
|
Building interpreters by transforming strati ed monads. Unpublished manuscript
– Espinosa
- 1994
|
|
1
|
An experiment in software prototyping productivity
– Awkvs
|
|
1
|
Flexible command interpreter: A pattern for an extensible and languageindependent interpreter system
– Portner
- 1995
|
|
1
|
An experiment in software prototyping productivity
– vs
- 1994
|
|
1
|
GenericityinJava with virtual types
– Thorup
- 1997
|