We have designed and implemented an intelligent database assistant to aid the user in formulating a query. The system, named RABBIT, relies upon a new paradigm for retrieval, retrieval by reformulation, based on a psychological theory of human remembering. To make a query, the user interactively constructs a description of his target item(s) by criticizing successive example (and counterexample) instances.
The first substantial interactive, display-based implementation was the SMALLTALK language (Goldberg & Robson, 1983). The object-oriented style has often been advocated for simulation programs, systems programming, graphics, and AI programming. The history of ideas has some additional threads including work on message passing as in ACTORS (Lieberman, 1981), and multiple inheritance as in FLAVORS (Weinreb & Moon, 1981). It is also related to a line of work in AI on the theory of frames (Minsky, 1975) and their implementation in knowledge representation languages such as KRL (Bobrow & Winograd, 1977), KEE (Fikes & Kehler, 1985), FRL (Goldstein & Roberts, 1977) and UNITS (Stefik, 1979). One might expect from this long history that by now there would be agreement on the fundamental principles of object-oriented programming.
This paper presents, explores and compares object-oriented approaches for roles in statically typed programming languages. We choose five solutions which support information hiding. On the one hand, we investigate the established object-oriented possibilities multiple and interface inheritance and the role object pattern, on the other hand, we examine the language extensions Object Teams and the syntactical extension of classes with roles. We discuss all approaches in turn, using a versatile example. The investigation shows that standard approaches interface inheritance and role object pattern are more appropriate for enterprise projects. New approaches are not developed far enough to be used widespread. But they are all promising proceedings, particularly the approach of roles as components of classes.
This paper presents an attempt to synthesize a methodology and environment which has features both of traditional software development methodologies and exploratory programming environments. The environment aids the development of conceptual natural language analyzers, a problem area where neither of these approaches alone adequately supports the construction of modifiable and maintainable systems. The paper describes problems with traditional approaches, the new "parallel" development methodology, and its supporting environment, called the PLUMber's Apprentice.