2.0 Prerequisites Our work is largely motivated by the present availability and promise of powerful, highly interactive, highly graphical, personal workstations. McDonald and Pedersen (1985a) and (1985b) carefully consider workstation architecture and its impact on data analysis. Our aim is to fashion a system for data analysis and statistics which takes advantage of the special nature of this new technology, some aspects of which we next describe. The initial implementation of DINDE has taken place on the Xerox 1109 workstation. The 1109 incorporates a proprietary central processor developed by Xerox. The processor runs microcode which is specially tailored for Interlisp, so many Lisp functions (e.g. CONS, CAR, POLY (polynomial evaluation)) are actually machine language instructions, leading to impressive Lisp performance. Lisp attempts to present the illusion of an infinitely large, persistent memory space. To support this illusion, the processor manages a virtual memory of 32 Mbytes (real memory of 3.7 Mbytes), and assists the so called garbage collection of unreferenced objects with microcode routines. A hardware floating point coprocessor is also installed on the 1109. Central to the design of the workstation is its bit-mapped display and its "mouse" pointing device. The display screen is organized as an array of about 1000 by 1000 individually addressable pixels. A high capacity communications channel connects the display with a segment of processor memory, a 1000 by 1000 map of bits. Special processor instructions manipulate the bit-map, and dedicated hardware refreshes the display from the bit-map 38 times each second. This provides the foundation for the window system › a collection of overlapping screen regions capable of displaying dynamic, detailed, highly resolved, independent images. A pointing device, called the mouse, allows the user to focus attention and initiate action on particular portions of the display. As the user rolls the mouse along the tabletop, a small arrow (the pointer) moves in a corresponding fashion across the display screen. The mouse we use has two buttons, allowing three different combinations of buttons to be pressed: left, right and so called "middle" (i.e. both buttons pressed). DINDE responds to the mouse in different ways depending on its screen location and the buttons being pressed. (In what follows, we occasionally refer to the action of pointing and then pressing the left, right, or middle buttons as "mousing".) DINDE makes extensive use of windows, the mouse, pop-up menus, a variety of type fonts, shading, point and line drawing (but no color yet). These facilities are of recent vintage, and, for the most part, available together only in workstation configurations. The workstation also has a keyboard œ which we have come to regard as a clumsy companion to the mouse. A local area network (Ethernet) connects workstations to print, filing, and mail services. Paging space and some file storage is maintained on a hard disk located on the workstation. The personal workstation hardware just described supports a distinctive software system: the Interlisp-D integrated programming environment. (The following discussion is distilled from the Interlisp Reference manual (1983)). Interlisp is a programming system consisting of a programming language (Lisp) and an environment that supports the programmer by providing a variety of specialized programming tools. Lisp offers a rich collection of predefined programs that can be used either as direct, top-level, commands or as subroutines in user programs (e.g., the text editor TEDIT that we have used to create this document is also called on internally by the DINDE system to add commentary to statistical objects.) The environment supports program development and execution by providing an integrated set of programming tools which know a great deal about Lisp and can act as "assistants" to the programmer. These tools include not only program editors, compilers, and debuggers, but also tools which assist the user by keeping track of changes to functions, variables, and other data objects, and which "understand" certain dependency relations among these components. The programmer is thereby relieved of many mundane housekeeping and version management chores. Our work with DINDE relies heavily on an extension of the Interlisp environment called LOOPS. LOOPS incorporates four important programming paradigms oriented, respectively, around prodedures, objects, data access, and rules. Procedure oriented programming, the most familiar, is offered by traditional programming languages (C, Pascal, etc.), and in LOOPS is provided by the underlying Lisp system. Object oriented programming was pioneered by Smalltalk (Goldberg and Robson (1983)) and the M.I.T. Lisp Machine Flavors system (Weinreb and Moon, (1981)). Object oriented programming is organized around entities called objects which have aspects both of procedures and of data. Computation in the object oriented scheme is accomplished by directing an object to execute a procedure and return a value, the procedure may refer to local state information unique to the object. (We elaborate on this description below.) In data oriented programming, action is potentially triggered when data are accessed. Sets of condition-action pairs (If › Then clauses) determine the behavior of programs built in the rule oriented paradigm. DINDE uses procedure and object oriented programming heavily at all levels, it uses data oriented programming internally, and does not use rule oriented programming. The multiplicity of programming paradigms allow us to closely match each of the various structures comprising our system with an appropriate expression as a program. (The following discussion is distilled from Bobrow and Stefik (1983), see also Goldberg and Robson (1983)). The object oriented paradigm of LOOPS is built on the following concepts. Classes: A class is a description of one or more similar objects. An instance is an object described by a particular class. Every object is an instance of exactly one class. (At the outset it may be helpful to regard a class as a template. From time to time, instances of a class are created or instantiated. This entails filling in the template with specific details about the new object being created.) DINDE gives definitions for many classes related to data analysis and statistics, among these are the classes Vector, ScatterPlot, and BivariateRegression. Variables: There are two kinds of variables › instance variables and class variables. Instance variables contain information specific to an instance. Class variables are used to contain information shared by all instances of the class. A class variable is typically used for information about a class taken as a whole. Both kinds of variables have names, values and other properties. A class describes the structure of its instances by specifying the names and default values of instance variables. So for example, the class description for ScatterPlot directly defines two instance variables: X and Y (which identify Vectors giving the coordinates of the points), and also defines a class variable: References (which is a text string citing further general reading concerning scatter plots.) Methods: A class specifies the behavior of its instances in terms of their response to a special kind of procedure call, (making such a call is usually called sending a message.) The class associates a selector (a name) with a method (the function that responds to the selector). All instances of a class use the same selectors and methods. Any difference in response by two instances of the same class is determined by a difference in the values of their instance variables. The class ScatterPlot, for example, defines the method PlotPoints. An instance of ScatterPlot responds to the selector PlotPoints by drawing a scatter plot derived from its X and Y instance variables. Inheritance: Inheritance is an important tool for organizing information in objects. It enables the easy creation of objects that are "almost like" other objects with a few incremental changes. Inheritance avoids redundant specification of information and simplifies modification, since information that is common is defined in, and need be changed in, only one place. An object may inherit some or all of its instance variable description and methods from one or more classes. The definition of a class identifies one or more parent classes from which variables and methods are inherited. (LIST ((PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC ) STARTINGPAGE# 3) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY CLASSIC OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC )) (162 36 288 36) NIL) (HEADING NIL (HEADINGTYPE DINDE) (120 3600 492 36) NIL) (TEXT NIL NIL (72 72 468 648) NIL))) (PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC )) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY CLASSIC OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC )) (162 36 288 36) NIL) (HEADING NIL (HEADINGTYPE DINDE) (120 3600 492 36) NIL) (TEXT NIL NIL (72 72 468 648) NIL))) (PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC )) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY CLASSIC OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC )) (162 36 288 36) NIL) (HEADING NIL (HEADINGTYPE DINDE) (120 3600 492 36) NIL) (TEXT NIL NIL (72 72 468 648) NIL)))))(MODERN CLASSIC CLASSIC CLASSIC µ'½+!B±½¸?º   *L SÝ "   , K!ÀAzº