annotate man/br-design.texi @ 175:2d532a89d707 r20-3b14

Import from CVS: tag r20-3b14
author cvs
date Mon, 13 Aug 2007 09:50:14 +0200
parents ac2d302a0011
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1 \input texinfo @c -*-texinfo-*-
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3 @c %**start of header (This is for running Texinfo on a region.)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4 @setfilename br-design.info
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5 @settitle The OO-Browser Design
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
6 @c %**end of header (This is for running Texinfo on a region.)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
7 @synindex vr fn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
8
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
9 @iftex
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
10 @finalout
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
11 @end iftex
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
12
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
13 @titlepage
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
14 @sp 4
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
15 @center @titlefont{Design Issues in the OO-Browser}
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
16 @sp 5
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
17 @center Bob Weiner
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
18 @center Motorola Inc.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
19
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
20 @sp 2
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
21 @center March 1991 and January 1993
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
22
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
23 @end titlepage
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
24 @page
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
25
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
26 @node Top, Design Issues, (dir), (dir)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
27 @unnumbered Abstract
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
28
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
29 The OO-Browser is an efficient object-oriented class browser. It has a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
30 completely direct-manipulation interface with multiple modalities. It
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
31 may be used for both system exploration and for browsing purposes as
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
32 part of a professional software development tool chest. It quickly
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
33 displays and provides views of complicated inheritance trees, making
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
34 it an important tool for understanding object-oriented systems. It is
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
35 integrated with a powerful editing environment that can be customized
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
36 to meet personal work styles.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
37
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
38 The OO-Browser is the first such tool to work with a multiplicity of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
39 object-oriented languages. It currently supports five object-oriented
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
40 languages (Eiffel, C++, Objective-C, CLOS (Lisp), and Smalltalk) and
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
41 one documentation language (GNU Info). Adding a new language is fairly
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
42 straightforward and can be done in one to five days.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
43
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
44 This paper has three main parts. The first discusses issues in the design
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
45 of the OO-Browser, emphasizing its unique aspects. Issues pertinent to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
46 all class browsers are touched upon and an explanation is given for how
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
47 the OO-Browser approaches each of them.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
48
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
49 The second part examines the actual implementation. It concentrates on
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
50 the user interface aspects and how they empower the user. Novel
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
51 concepts introduced by the browser are discussed. They include: a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
52 merged help/command menu construct, dynamic method location, Environment
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
53 class groupings, and browsing based on source code only.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
54
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
55 The third part suggests directions for future work.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
56
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
57 @menu
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
58 * Design Issues::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
59 * Design Specifics::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
60 * Further Work::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
61 * Conclusion::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
62
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
63 --- The Detailed Node Listing ---
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
64
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
65 Interactivity
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
66
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
67 * Build Speed::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
68 * Query Response Time::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
69
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
70 Textual User Interface
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
71
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
72 * Environments::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
73
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
74 Direct Manipulation
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
75
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
76 * In C++::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
77 * In Eiffel::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
78
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
79 Alternate Interfaces
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
80
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
81 * Environments::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
82
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
83 Environments
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
84
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
85 * Env Create::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
86 * Env Build::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
87 * Env Load::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
88 * Env Save::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
89 * Env Update::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
90
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
91 Expand Query Types
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
92
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
93 * Dynamic Object Browsing::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
94 * Tool Integration::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
95 * Graphical Interface::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
96 * Version Control::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
97 @end menu
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
98
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
99 @node Design Issues, Design Specifics, Top, Top
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
100 @chapter Design Issues in the OO-Browser
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
101
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
102 @section Background
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
103
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
104 The OO-Browser was initially conceived for utilitarian reasons. A
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
105 simple, fast class browser was needed for a development project based
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
106 in the object-oriented language, Eiffel. The browsers available for
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
107 Eiffel were deemed weak and of not much value.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
108
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
109 Since I had built tools in the past on top of the GNU Emacs
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
110 environment, I knew that this could be a rapid process, even when a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
111 high-level interface was needed. GNU Emacs was also the preferred local
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
112 editor, so close integration with it was considered a benefit.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
113
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
114 A simple prototype of the browser was completed in two days from
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
115 conception to implementation. Its user interface was based in part on
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
116 the Smalltalk-80 class browser under the assumption that this interface
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
117 had been developed over a long period of time to maximize developer
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
118 productivity.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
119
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
120 The prototype showed promise as a tool that would be useful for other
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
121 languages besides Eiffel. I identified C++ and Objective-C as the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
122 languages most needy of such a tool. A separate prototype version for
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
123 each of these languages was done in a single day as a dramatic
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
124 demonstration of the generality of the concept.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
125
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
126 The road from prototype to a professional tool required a good amount
2
ac2d302a0011 Import from CVS: tag r19-15b2
cvs
parents: 0
diff changeset
127 of work over an extended period as an independent project. Browser
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
128 performance, structure and features were improved throughout this
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
129 period. A number of new languages were also added and all of these were
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
130 integrated via a single common kernel. A complete user manual was
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
131 written. The shared kernel browser was dubbed the OO-Browser.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
132
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
133 The architecture layered on top of GNU Emacs turned out to be a great
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
134 success for a number of reasons.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
135
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
136 @itemize @bullet
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
137
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
138 @item
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
139 Both computational and interaction speed of the browser exceeded
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
140 most people's expectations.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
141
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
142 @item
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
143 Integration with Emacs meant that when interacting with the browser,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
144 people could reuse the editing skills they had acquired from other
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
145 tasks.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
146
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
147 @item
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
148 The flexibility of Lisp provided a direct means for implementing
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
149 the common browser kernel.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
150 @end itemize
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
151
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
152 @menu
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
153 * Design Goals::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
154 * Interactivity::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
155 @end menu
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
156
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
157 @node Design Goals, Interactivity, Design Issues, Design Issues
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
158 @section Design Goals
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
159
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
160 The OO-Browser was initially designed in response to the lack of easy to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
161 use class browsers in the many emerging object-oriented language
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
162 environments of today. In fact, many environments still consist of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
163 nothing more than a compiler and a debugger. Even those environments
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
164 that contain browsers, often offer weak ones with barely usable interfaces.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
165 The well-known Smalltalk environments [@cite{Goldberg 83}] are the only
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
166 notable exceptions. Some excellent C++ support environments are now
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
167 just emerging (Saber-C++, ObjectWorks for C++, Field, ET++).
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
168
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
169 The OO-Browser was meant to be small, fast, and easy to use. So far it
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
170 has met all of those goals. There are three main uses that I see for a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
171 class browser:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
172
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
173 @table @strong
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
174 @item Design Tool
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
175 A browser should allow for the location of classes
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
176 that meet a specified set of criteria. It should be just as easy to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
177 determine that no such class exists. A more difficult task is to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
178 determine similar classes that might be of interest to the user.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
179
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
180 @item Exploration Tool
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
181 The browser should allow one to explore libraries of classes as well as
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
182 full programs. It should be especially useful when one is unfamiliar
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
183 with the set of components that one is browsing.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
184
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
185 @item Engine Interface
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
186 The browser engine should be usable without the user interface, so that
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
187 one can use the browser features while editing and so that programs may
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
188 use the browser capabilities with their own user interfaces.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
189 @end table
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
190
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
191
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
192 The quality with which a browser provides the above services can be surveyed by
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
193 examining a number of issues:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
194
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
195 @table @strong
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
196 @item Interactivity
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
197 The browser should preprocess source files quickly.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
198 It should also answer queries with minimal delay so that the user
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
199 maintains a sense of interactivity.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
200
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
201 @item Usability
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
202 It should be easy to invoke and just as easy to put
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
203 away, so that it does not distract from other tasks in which the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
204 developer is involved.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
205
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
206 @item Consistency
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
207 A user of the browser should be able to learn a small
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
208 set of interaction techniques and thereby access a broad set of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
209 functions. He should also be able to build on these fundamental
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
210 concepts to achieve higher levels of proficiency with the tool.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
211
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
212 @item Scalability
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
213 It should scale up well and maintain its speediness
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
214 with libraries of thousands of classes.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
215
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
216 @item Integration
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
217 It should integrate well with a program editing
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
218 environment, providing language specific features to speed the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
219 development process.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
220
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
221 @item Extensibility
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
222 The browser should be extensible by a competent programmer.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
223 @end table
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
224
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
225 @noindent
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
226 Let us discuss separately each of these issues to see how the OO-Browser
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
227 addresses them.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
228
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
229
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
230 @node Interactivity, , Design Goals, Design Issues
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
231 @section Interactivity
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
232
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
233 There are two interactivity concerns associated with most class
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
234 browsers, speed of database construction and query response time.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
235
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
236 @menu
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
237 * Build Speed::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
238 * Query Response Time::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
239 @end menu
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
240
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
241 @node Build Speed, Query Response Time, Interactivity, Interactivity
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
242 @subsection Build Speed
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
243
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
244 The first concern involves the speed with which the browser can
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
245 extract any information it needs in building a cache or database of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
246 information from the code. If this is a long, involved process, users
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
247 will want it performed in a batch fashion so that it does not delay
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
248 their workflow. The rebuilding of databases at night or on idle
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
249 processors is a common solution. The drawback to this is that it
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
250 likely precludes the use of the browser for immediate exploration of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
251 newly discovered or procured class libraries. If on the other hand,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
252 this building process is rapid, the user will be much more likely to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
253 experiment with the tool and to use it for exploring new class sets.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
254
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
255 The OO-Browser takes the latter approach. It builds a minimal lookup
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
256 structure derived directly from class source. It assumes that the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
257 classes it scans are syntactically correct and therefore needs parse
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
258 only a small fraction of the code scanned. This scanner can
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
259 distinguish between declarations and definitions. It recognizes
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
260 commented passages and so ignores valid definitions embedded within
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
261 them.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
262
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
263 The result is that even though this scanning code has not yet been
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
264 optimized, it can scan hundreds of classes a minute on a single
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
265 processor machine. This speed is fast enough that when users come
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
266 upon an unfamiliar class library, they simply ask the browser to scan
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
267 it and wait for its initial display of the class list found from the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
268 scan.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
269
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
270 Still, on some platforms, the lookup structures for very large class
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
271 libraries may be better built in a batch fashion. The OO-Browser
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
272 includes a mechanism for doing so via a simple command line invocation
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
273 which can be scheduled with the UNIX 'cron' utility.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
274
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
275 @node Query Response Time, , Build Speed, Interactivity
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
276 @subsection Query Response Time
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
277
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
278 Most browsing operations represent some form of query. Show the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
279 ancestors for this class. List all classes that contain the string,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
280 'window'. How many classes are in this library?
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
281
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
282 Query responses must therefore be fast enough to give the user a sense
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
283 of close knit interaction. This is the reason much effort is often
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
284 put into the database back ends of program support environments.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
285
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
286 The OO-Browser instead uses basic caching techniques to optimize the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
287 most common queries. These techniques work surprisingly well, even
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
288 for environments containing thousands of classes.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
289
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
290 One of the most common queries given to the OO-Browser is to show
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
291 descendency or ancestry graphs for a set of classes. On a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
292 workstation, a graph involving about 500 classes can be computed and
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
293 displayed in three to four seconds. Smaller queries receive
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
294 instantaneous replies.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
295
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
296
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
297 @section Usability
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
298
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
299 With the emergence of multi-windowed graphical interfaces in recent
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
300 years, man-machine interaction has become much more complex. Many
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
301 environments have been converted to these interfaces in the name of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
302 ease of use, but often the user is left with less control than he had
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
303 before.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
304
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
305 A common example is the window pile problem that results when many
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
306 applications share a display space and each creates a new window every
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
307 time a simple action, like setting a parameter value, must be
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
308 performed. A user often is left to use simple push and pop funtions
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
309 to wade through the window layers to find one he may want.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
310
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
311 This sort of behavior was considered unacceptable for the OO-Browser.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
312 To avoid those situations, the browser performs its own window
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
313 management. The browser is invoked by a key press or menu selection.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
314 It then displays all of its windows. Another key can be used to put
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
315 the browser away, essentially to hide it from view. All of its
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
316 windows then disappear. Since the user has not actually quit from the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
317 browser, when he invokes it again, his entire context is restored,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
318 both visually and computationally. With such an interface, browsing
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
319 becomes a basic reflex. Invoke browser. Locate desired class for
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
320 editing. Hide browser, leaving selected class visible. Continue work.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
321
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
322
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
323 @section Consistency
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
324
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
325 Consistency and usability go hand in hand. Techniques of good design
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
326 dictate that a designer should play upon the skills that his user base
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
327 brings with them. New interface metaphors should be carefully thought
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
328 out. Their benefits should be weighed against the cognitive strain
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
329 that new users will necessarily endure.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
330
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
331 Editing skills, for example, become almost hard-wired into skilled
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
332 computer users psyches so that little conscious action is needed to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
333 perform common tasks. Yet often, each new application offers a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
334 different editing model without adding any new editing benefits for the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
335 user. This sort of design is especially egregious in a tool-based
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
336 environment where the designer knows that his users will likely need a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
337 variety of tools to do their work.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
338
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
339 The OO-Browser avoids this sin by integrating with the popular GNU
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
340 Emacs editor. Since Emacs provides a modeless editing environment in
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
341 which any command may be executed at any time, all normal Emacs
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
342 editing funtions are available while the user is within the browser's
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
343 Emacs interface. So, for example, if one already knows how to search
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
344 an edit buffer for a particular string, one simply does the same thing
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
345 within the browser.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
346
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
347 Browser key bindings are carefully selected to be both mnemonic and
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
348 consistent with standard Emacs key usage. In mouse-based
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
349 environments, direct manipulation techniques are supported, so the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
350 user can select the entity he wants to operate on and the command he
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
351 wants to apply without the need to memorize any key names.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
352
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
353
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
354 @section Scalability
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
355
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
356 The term educational programming environment is too often used to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
357 describe tools too weak to be used for real development projects.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
358 This is a common syndrome associated with highly interactive tools.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
359 They simply don't scale up for use in large, distributed projects.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
360
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
361 @noindent
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
362 The symptoms of this syndrome in browsing tools include:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
363 @enumerate
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
364 @item
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
365 the ability to browse code from only one root directory at a time;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
366
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
367 @item
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
368 support for only one browsing environment under which all classes must
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
369 be lumped;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
370
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
371 @item
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
372 slow performance with large class sets;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
373
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
374 @item
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
375 ability to operate on only one class/category at a time;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
376
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
377 @item
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
378 no portability of the interface or tool itself.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
379 @end enumerate
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
380
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
381 The OO-Browser has so far seemed to scale well. It uses the concept
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
382 of Environments to address symptoms (1) and (2). For each instance of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
383 the OO-Browser, the user selects a current Environment which he wants
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
384 to browse. (Environments are discussed later in this paper.) Each
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
385 Environment may include source from any number of directories,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
386 distributed across machines using file sharing systems like NFS or
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
387 Apollo's Domain system. Each Environment contains classes written in
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
388 a single language. The user may select another Environment at any
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
389 time and thereby switch languages.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
390
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
391 Symptom (3) has been addressed in the previous section on @strong{Query
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
392 Response Time}.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
393
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
394 Symptom (4) does not exist in the OO-Browser. Virtually all commands
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
395 that can be applied to a single class may also be applied to any class
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
396 list returned by a browser query.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
397
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
398 Symptom (5) is not a problem either. The OO-Browser is extremely
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
399 portable. The browser runs on any UNIX system on which GNU Emacs
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
400 runs, which is virtually every one. Therefore, a user can run the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
401 browser on platforms from any vendor. The graphical interface to the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
402 OO-Browser runs under the portable X Window System. It currently uses
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
403 a Motif-based interface, but may in the future be converted to an even
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
404 more portable interface toolkit.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
405
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
406
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
407 @section Integration
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
408
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
409 A browsing tool is but one piece of the development environment. It
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
410 must therefore not only do its job but also support the style of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
411 program development followed at a site.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
412
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
413 The OO-Browser supports object-oriented development. Object-oriented
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
414 development is necessarily incremental and component-based. The browser
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
415 allows one to edit a class and then incrementally update the browsing
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
416 environment with any changes. It lets developers think in terms of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
417 classes, the building blocks of object-oriented languages, without
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
418 regard to where the classes are located.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
419
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
420 Each browser language mode is tailored to the specifics of the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
421 language. For Eiffel, it supports the location of method definitions
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
422 that have been repeatedly renamed throughout the inheritance
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
423 graph. For C++, support for method overloading and multiple
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
424 inheritance is included.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
425
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
426 Editor integration is critical in a browser, as this is the mainstay
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
427 tool for program development. Surprisingly, this is not universally
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
428 understood. Stepstone Corporation's Objective-C browser still does
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
429 not allow one to edit classes that it displays. Only the newest
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
430 versions of Interactive Software Engineering's Eiffel browsers allow
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
431 one to edit classes; one still cannot simply select a class name
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
432 returned as a result of a query in order to edit it.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
433
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
434 Besides the Emacs interface, the current OO-Browser version allows the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
435 use of alternate editors, so that a user need not become familiar with
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
436 the Emacs editing model if he is not already. It still uses the Emacs
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
437 lisp engine as a back end to process browser requests, but allows the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
438 user to edit classes with whatever program he likes. The graphical
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
439 interface also supports the use of any desired editor. For non-Emacs
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
440 users, it is a simple matter to produce a turnkey command that allows
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
441 use of the browser without any prior knowledge.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
442
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
443
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
444 @section Extensibility
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
445
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
446 The whole open systems phenomenon arose after corporate users tired of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
447 relying on vendors to provide proprietary solutions to simple
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
448 problems. The choice of an open system allows one to seek software
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
449 solutions and system support from a larger pool of organizations than
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
450 with closed systems.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
451
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
452 Similar needs are now arising in the programming support arena.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
453 Closed systems seldom meet all of the needs of the user base. Without
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
454 a back end customization language, users are left to the whims of the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
455 developer to decide whether a feature is important enough to include.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
456 Macro language provisions are too weak to allow all the changes that may be
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
457 desired, so a full programming language interface is needed for
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
458 advanced user customization.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
459
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
460 Simple customizations are performed by setting values of attributes
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
461 included as user variables in the OO-Browser. More advanced
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
462 customizations, like the addition of a new query type are performed in
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
463 GNU Emacs Lisp. Most of the OO-Browser is written in the Lisp dialect.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
464 It is a fully interpreted language and so is natural to use as a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
465 customization language since each change may be immediately tested.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
466
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
467 As noted earlier, an entire language interface can be built in a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
468 matter of days, demonstrating both the flexibility of Lisp and of the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
469 language interface provided by the OO-Browser.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
470
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
471
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
472 @node Design Specifics, Further Work, Design Issues, Top
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
473 @chapter OO-Browser Design Specifics
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
474
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
475 @menu
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
476 * Textual User Interface::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
477 * Graphical Tree Display::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
478 * Direct Manipulation::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
479 * Alternate Interfaces::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
480 * Environments::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
481 @end menu
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
482
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
483 @node Textual User Interface, Graphical Tree Display, Design Specifics, Design Specifics
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
484 @section Textual User Interface
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
485
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
486 The screen shot on the following page highlights the major components
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
487 of the OO-Browser textual user interface. The windows across the top of the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
488 OO-Browser screen are called @dfn{class listing windows}; they display
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
489 @dfn{class listing buffers} with a single class name per line. The
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
490 @dfn{class viewer window}, sometimes simply referred to as the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
491 @dfn{viewer window}, fills the bottom half of the screen. It is used
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
492 to display class source and summary information. Pictured here in the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
493 viewer window is the command help/menu buffer, summarizing the browser's
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
494 command key bindings.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
495
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
496 The number of listing windows is limited only by the screen width. The
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
497 width of the windows may be interactively adjusted to permit more or
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
498 fewer windows for particular tasks. CLOS identifiers are typically much
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
499 longer than Eiffel identifiers, so one would want to raise the window
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
500 width when operating on CLOS classes.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
501
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
502 @menu
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
503 * Hierarchy Listings::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
504 @end menu
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
505
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
506 @node Hierarchy Listings, , Textual User Interface, Textual User Interface
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
507 @subsection Hierarchy Listings
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
508
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
509 The directed, acyclic graph relations prevalent in languages with
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
510 multiple inheritance are translated into textual hierarchies by repeating
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
511 elements with multiple parents throughout the tree structure. So if
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
512 class B inherits from C and class C inherits from P1, P2 and P3. One
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
513 view of descendants would show:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
514
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
515 @example
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
516 P1
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
517 C
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
518 B
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
519 P2
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
520 C ...
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
521 P3
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
522 C ...
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
523 @end example
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
524
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
525 The ellipses indicate that C's subtree has been expanded somewhere
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
526 above, so it is not repeated. The resultant structure is easy to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
527 understand and very useful. This sort of structure allows one to use
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
528 the browser on a text-only terminal and still be able to visualize
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
529 significant inheritance relations.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
530
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
531 @noindent
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
532 Queries that may be made under this interface include:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
533 @itemize @bullet
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
534 @item
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
535 show parents
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
536 @item
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
537 show children
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
538 @item
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
539 show ancestors
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
540 @item
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
541 show descendants
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
542 @item
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
543 total selected classes
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
544 @item
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
545 select classes matching regular expression or string.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
546 @end itemize
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
547
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
548 @noindent
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
549 All of these commands may be applied to any grouping of classes,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
550 eliminating the sequential bottleneck found in many other such tools.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
551
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
552 All displays that move up the inheritance tree consume a listing window
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
553 to the left of the current one. Descendancy displays do the opposite
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
554 and select the window to the right. At the edges of the display, the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
555 window selected wraps around to the other side. An exit command
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
556 clears the current listing buffer and returns to the last one,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
557 regardless of how the user walks up and down the trees. Ancestor
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
558 listings may be shown with parent down to root (highest level ancestor)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
559 or inverted, with root down to parent, so that children are always
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
560 displayed below their parents.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
561
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
562 The class matching command is fast and easy to use.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
563
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
564
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
565 @noindent
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
566 Besides queries, a few of the useful commands provided are:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
567 @itemize @bullet
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
568 @item
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
569 sort classes
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
570 @item
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
571 view class source
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
572 @item
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
573 edit class source
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
574 @item
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
575 save class listing.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
576 @end itemize
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
577
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
578 The editor is user selectable. The ability to sort any class listing
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
579 simplifies class location. The @emph{save class listing} command is
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
580 useful to record the output of interesting queries for documentation and
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
581 reference purposes.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
582
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
583 All browser queries and commands work with class source code only. This
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
584 makes the tool useful in exploratory situations where a compiler is not
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
585 available. It also ensures that the browser receives up to date
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
586 information from which to work.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
587
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
588
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
589 @node Graphical Tree Display, Direct Manipulation, Textual User Interface, Design Specifics
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
590 @section Graphical Tree Display
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
591
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
592 The graphical interface to the browser provides a compact tree-based
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
593 view of a set of classes or an Info manual. (A sample enlarged display
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
594 is shown on the following page. It uses the same set of classes as the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
595 prior picture of the textual display, for ease of comparison.) This
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
596 interface supplements the textual interface so that the user can easily
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
597 comprehend large inheritance structures. (Nodes with more than one
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
598 incoming pointer (parent) are repeated throughout the tree, but their
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
599 subtrees are excised and replaced with the ellipses symbol, ..., just as
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
600 in the textual interface. Subtrees may be collapsed or expanded
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
601 interactively. Scrolling mechanisms are limited to horizontal and
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
602 vertical scroll bars, but a panning construct is being considered.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
603
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
604 When the user finds a class he is interested in, he simply selects it
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
605 with the same mouse button he uses to select classes in the textual
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
606 interface. The node is highlighted and the associated class is
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
607 displayed in the text editor.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
608
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
609 The graphical interface can be invoked on any portion of the current
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
610 browser Environment. One may for instance, obtain a list of classes
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
611 with 'Stack' in their name and then through a mouse click, invoke the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
612 graphical browser on just the descendancy trees of the selected classes.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
613
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
614 Any number of graphical browser views may be shown at the same time.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
615 Each view is independent, so each may provide a view of any environment
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
616 previously created by the OO-Browser. All views can communicate with a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
617 single instance of the editor, so that one can maintain onscreen views
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
618 of multiple environments, even across languages, and simply select any
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
619 node from any view to access the corresponding source.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
620
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
621 A new, window-system independent version of the graphical interface
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
622 provides double buffered display updates for smooth scrolling, a panner
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
623 device for rapid movement throughout a view, and a number of useful tree
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
624 display representation alternatives.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
625
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
626 The graphical interface is presently somewhat limited, but that is only
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
627 because it is so new. It is a straightforward matter to provide a user
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
628 of the graphical interface with the full complement of browser commands
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
629 by adding the commands to a set of menus and sending each command to the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
630 browser engine as it is selected.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
631
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
632
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
633 @node Direct Manipulation, Alternate Interfaces, Graphical Tree Display, Design Specifics
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
634 @section Direct Manipulation
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
635
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
636 To maximize the utility of the displays presented to the user, most
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
637 displayed entities may be operated upon through simple mouse clicks.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
638 For example, clicking on a class name displays the associated class
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
639 definition. Clicking to the left of a class displays its ancestors and
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
640 to the right its descendants. Selection of the ellipses after a class
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
641 name shifts the display focus to the class' descendants list.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
642
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
643 A click in an empty listing buffer may display the browser help text or
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
644 a menu of language-specific source files which the user has browsed.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
645 This menu permits random access selection of any class file.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
646
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
647 A click on any of the command descriptions in the help display executes
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
648 the associated command on the previously selected item. This is such a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
649 useful, intuitive means of control that it is surprising that one never
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
650 sees this capability in application interfaces.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
651
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
652
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
653
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
654 @menu
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
655 * In C++::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
656 * In Eiffel::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
657 @end menu
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
658
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
659 @node In C++, In Eiffel, Direct Manipulation, Direct Manipulation
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
660 @subsection In C++
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
661
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
662 @cindex C++
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
663 Entities in C++ programs may be selected for inspection with the middle
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
664 mouse button. Most importantly, once a class header file is displayed,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
665 one simply clicks on a method declaration to see its corresponding
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
666 definition. Each feature declaration should be given separately to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
667 ensure accurate parsing. If the method is inherited from another class,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
668 a message at the bottom of the screen describes which class the method
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
669 is defined in once the browser displays the method definition.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
670
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
671 The browser dynamically handles full function overloading and numerous
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
672 other complex mappings between declaration and definition that are
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
673 permitted in C++. A complex set of pattern matching heuristics are used
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
674 which work in almost all cases. This is a novel approach that speeds
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
675 the construction of Environments, since no normalization is performed on
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
676 function signatures until they are operated upon. All other browsers
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
677 rely on preprocessing techniques which store a normalized form of the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
678 declaration to match against the definition signature.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
679
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
680 Parent classes may be browsed in a similar manner by clicking on their
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
681 names in an inheritance or declaration clause. Multiple inheritance is
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
682 fully supported. There is no support as yet for locally scoped classes.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
683
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
684 Include files may be browsed by selecting their inclusion declarations
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
685 (@strong{#include} ...).
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
686
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
687
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
688
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
689 @node In Eiffel, , In C++, Direct Manipulation
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
690 @subsection In Eiffel
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
691 @cindex Eiffel
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
692 Selection of a feature name in an export clause displays the feature
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
693 definition, even if it is renamed several times within ancestors.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
694 Parent classes may be browsed in a similar manner by clicking on their
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
695 names in an inheritance or declaration clause.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
696
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
697 The following example of locating a renamed feature is taken from an
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
698 actual set of Eiffel library classes:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
699
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
700 @example
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
701 User selects feature @emph{subwindow} of @emph{POPUP_MENU}
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
702 inherited from @emph{WINDOW}
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
703 which renames @emph{child} as @emph{subwindow}
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
704 inherited from @emph{TWO_WAY_TREE}
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
705 which renames @emph{active} as @emph{child}
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
706 inherited from @emph{TWO_WAY_LIST}
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
707 inherited from @emph{LINKED_LIST}
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
708 which defines @emph{active}.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
709 @end example
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
710
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
711 The browser would display the feature @emph{active} and explain to the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
712 user that feature @emph{subwindow} of class @emph{POPUP_MENU} is
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
713 inherited from feature @emph{active} of class @emph{LINKED_LIST}.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
714 Location of this sort of feature definition would be incredibly tedious
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
715 without programmatic support.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
716
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
717 If a feature reference is selected within a non-deferred (non-abstract)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
718 class, then deferred features are automatically ignored when searching
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
719 for the feature definition. If the reference class is deferred
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
720 (abstract), the first matching ancestral feature found is selected,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
721 whether it is deferred or not.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
722
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
723 The algorithm used to locate features is dynamic, so if another class
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
724 is inserted into the inheritance structure given above, the feature
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
725 definition still will be located properly.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
726
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
727
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
728
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
729 @node Alternate Interfaces, Environments, Direct Manipulation, Design Specifics
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
730 @section Alternate Interfaces
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
731
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
732 Earlier we mentioned that the computational back end, the @dfn{engine}
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
733 part of the browser should be available for use without its interface.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
734 The interactive nature of Lisp allows the prototyping and delivery of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
735 different interfaces quickly. For example, the graphical interface to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
736 the browser was originally a standalone tree drawing program. A
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
737 prototype interface to the browser was developed in a matter of two
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
738 hours, with most of the time spent examining the unfamiliar code in the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
739 tree drawing program.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
740
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
741 @noindent
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
742 Other simple but extremely useful interfaces we have provided include:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
743 @itemize @bullet
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
744 @item
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
745 the ability to perform completion on type identifiers when programming;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
746
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
747 @item
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
748 support for compiler error parsing when the compiler outputs only the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
749 class name and line number of the error;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
750
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
751 @item
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
752 a command that prompts for a class name and then edits the class,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
753 with class name completion included.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
754 @end itemize
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
755
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
756 @noindent
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
757 All of these were straightforward to implement based upon the browser
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
758 engine functions.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
759
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
760 @menu
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
761 * Environments::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
762 @end menu
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
763
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
764 @node Environments, , Alternate Interfaces, Design Specifics
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
765 @section Environments
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
766
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
767 @cindex Environment, the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
768 @cindex Library search list
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
769 @cindex System search list
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
770 Whenever the OO-Browser is in use, an Environment is selected. An
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
771 Environment may be built or simply specified. An @dfn{Environment
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
772 specification} tells the browser what to include in the construction of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
773 an Environment. (@xref{Env Create, , Creating Envir Specs}, for more
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
774 info.) An OO-Browser @dfn{Environment} includes a set of inter-class
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
775 relationships together with a few browser settings. The phrase,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
776 @dfn{the Environment}, refers to the current OO-Browser Environment.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
777 Many browser commands depend on information in the Environment. A
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
778 summary of the components of the Environment may be displayed any time
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
779 during browser use. See the next page.@refill
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
780
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
781 The set of classes included in an Environment is specified by two lists
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
782 of directories, below which all of the Environment's class source files
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
783 are to be found. (The OO-Browser will automatically search
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
784 sub-directories below the directories specified.) The first list of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
785 directories is called the @dfn{Library search list}; it defines the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
786 locations of stable, typically reusable classes that have been released
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
787 for general use. The second list is called the @dfn{System search
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
788 list}; it defines the locations of unreleased classes being developed,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
789 often for a particular system. All class names within a single
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
790 Environment must be unique to ensure proper operation of the browser.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
791 This also implies that the Library and System class sets be disjoint.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
792
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
793 The OO-Browser lets one create, update and save Environments. Once an
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
794 Environment file has been created, it may be loaded at any time. The
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
795 browser will then use this Environment for all of its operations until
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
796 another one is loaded.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
797
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
798 The browser maintains a separate Environment for each programming
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
799 language on which it is used. Thus, if one switches from Eiffel to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
800 C++ browsing and then back to Eiffel browsing, the Eiffel environment
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
801 will not need to be reloaded; it will appear immediately and the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
802 screen will appear as if the Eiffel OO-Browser were invoked for the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
803 first time. Only one Environment per language is kept in memory.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
804
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
805 @cindex Environment, default
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
806 There is a default Environment file name for each browser-supported
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
807 language; these names are unique to each user account on the system:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
808 @file{~/.br-eif-env}, @file{~/.br-c++-env}, @file{~/.br-objc-env},
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
809 @file{~/.br-clos-env}, @file{~/.br-smt-env}, and @file{~/.br-info-env}.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
810 Environment files are automatically created and loaded by the OO-Browser
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
811 so that one need never become familiar with their format.@refill
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
812
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
813 Environments provide a simple, uniform way of managing numerous class
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
814 libraries. A simple extension to the browser is planned which will
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
815 allow one to interactively select Environments as one typically does
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
816 with files. Each Environment stores an indication of what language its
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
817 classes are in, so it can dictate which browser version to invoke.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
818
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
819
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
820 @menu
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
821 * Env Create::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
822 * Env Build::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
823 * Env Load::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
824 * Env Save::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
825 * Env Update::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
826 @end menu
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
827
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
828 @node Env Create, Env Build, Environments, Environments
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
829 @c node-name, next, previous, up
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
830 @subsection Creating Environment Specifications
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
831
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
832 @cindex Environment specification
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
833 Environment specifications are useful when one wants to describe a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
834 number of Environments to the OO-Browser but wants to defer their
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
835 construction until later. Large environments then can be built
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
836 overnight. @xref{Env Build, , Building Environments}, for more
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
837 info.@refill
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
838
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
839 @findex br-env-create
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
840 @cindex initialization file
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
841 Every Environment must be specified before it can be built or used.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
842 Thus, specifying an Environment is the first step in creating it.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
843 An Environment create command interactively prompts for all information
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
844 necessary to specify and to build an Environment. This command may
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
845 be invoked repeatedly to quickly specify a number of different
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
846 Environments.@refill
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
847
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
848 @noindent
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
849 Here are the Environment specification components for which the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
850 OO-Browser prompts:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
851 @table @code
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
852 @item System search directories
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
853 List of directories below which other System directories containing
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
854 class source code and directories of class source files may be found.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
855
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
856 @item Library search directories
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
857 List of directories below which Library files of class source code
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
858 and directories of class source files may be found.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
859
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
860 @item Save all Environment lookup tables?
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
861 @emph{Yes} means that a complete set of lookup tables should be saved as
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
862 a class Environment. @emph{No} means that some lookup tables should be
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
863 built from others when the tables are loaded from an Environment file.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
864 Answering @emph{yes} doubles the size of each Environment file but
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
865 slightly speeds the loading of an Environment into the browser.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
866 @emph{No} is the default that works best on most computers.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
867 @end table
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
868
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
869
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
870 @node Env Build, Env Load, Env Create, Environments
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
871 @c node-name, next, previous, up
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
872 @subsection Building Environments
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
873
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
874 @cindex Environment building
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
875 An Environment specification tells the OO-Browser what to include in the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
876 Environment, but the Environment still must be built before use. When
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
877 class names or locations have changed or the Environment's inheritance
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
878 structure is modified, the Environment must be rebuilt. For small
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
879 Environment changes, one may use the class addition and deletion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
880 features of the browser. @xref{Env Update, , Updating Environments},
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
881 for more info.@refill
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
882
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
883 @cindex Environment building, batch
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
884 @cindex large Environments
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
885 Very large Environments may be built overnight by invoking Emacs in
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
886 batch mode at a scheduled time. Note that the Environment specification
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
887 file must have been created prior to execution of this command so that
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
888 the browser knows what to build.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
889
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
890 @node Env Load, Env Save, Env Build, Environments
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
891 @c node-name, next, previous, up
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
892 @subsection Loading Environments
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
893
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
894 @cindex Environment loading
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
895 A new Environment may be loaded for use at any time within the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
896 OO-Browser. One may either select the load Environment command from
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
897 the on screen OO-Browser command summary or simply use the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
898 language-specific browser invocation command that was originally used to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
899 start the browser, except in this case, it should be preceded by a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
900 prefix argument. For example, the @code{(eif-browse)} command, would
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
901 prompt for and then load a new Eiffel environment, even when one is
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
902 already browsing an Eiffel environment.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
903
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
904
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
905 @node Env Save, Env Update, Env Load, Environments
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
906 @c node-name, next, previous, up
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
907 @subsection Permanently Storing Environments
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
908
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
909 The OO-Browser automatically builds and saves Environments in most
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
910 cases. Occasionally one may find a need to force the Environment to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
911 be saved to a file, as in the case when one wants to save an Environment
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
912 under a different file name.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
913
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
914 The Environment save command is used to force an Environment save to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
915 occur. The command prompts for a file to save to, with the default
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
916 as the current Environment file name.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
917
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
918
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
919 @node Env Update, , Env Save, Environments
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
920 @c node-name, next, previous, up
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
921 @subsection Updating Environments
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
922
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
923 @findex br-add-class-file
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
924 @cindex class, adding to Environment
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
925 @cindex class, replacing in Environment
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
926 @cindex Environment, adding classes
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
927 @cindex Environment, replacing classes
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
928 @cindex initialization file
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
929 A file containing class definitions may be added to the Environment with
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
930 the add class file command. This will prompt for the file name, scan
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
931 the file, and then update the Environment. If a class defined in the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
932 file is already in the Environment, its information will be replaced
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
933 with the information gathered from the file; otherwise, the class will
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
934 be added to the Environment.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
935
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
936 @cindex Environment, adding individual classes
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
937 To add a single class from a file containing multiple classes, the file
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
938 can be read into an Emacs buffer, the buffer narrowed to the desired
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
939 class and then the add command executed. @xref{Narrowing, , Narrowing,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
940 emacs, The Gnu Emacs Manual}.@refill
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
941
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
942 This command may also be used outside of the browser user interface when
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
943 one is editing a file in Emacs, so that there is no need to jump in and
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
944 out of the browser.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
945
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
946 @kindex C-c C-d
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
947 @findex br-delete
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
948 @cindex class, deleting from Environment
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
949 @cindex Environment, deleting classes
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
950 A class is deleted from the Environment, by pointing to its name in a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
951 class listing buffer and then executing the delete class command.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
952 The class matching command may be used to locate it. The browser
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
953 confirms the deletion by removing the class name from the listing
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
954 buffer.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
955
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
956
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
957 @node Further Work, Conclusion, Design Specifics, Top
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
958 @chapter Suggestions of Further Work
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
959
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
960 @section Expand Query Types
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
961
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
962 The browser really only works with inheritance and method relations
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
963 right now. There is an undeniable need for the addition of supplier,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
964 client, and category-based browsing.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
965
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
966 Suppliers are classes which contain methods invoked by other classes,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
967 the clients. Computation of these recursive relations is expensive. A
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
968 technique must be developed which preserves the quickness of Environment
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
969 construction and supports queries using these relations.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
970
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
971 Method breakdowns by visibility (public, private, protected) would also
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
972 be useful to add. This should not require too much work.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
973
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
974 Category-based browsing should be the next major addition. Some other
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
975 people have already done work on adding facet-based categories to the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
976 browser. Facets are traits that classes have. Classes sharing facets
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
977 are grouped into a facet category. Facet examples might be: fixed sized
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
978 container classes, domain-specific classes, or classes that contain a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
979 name field.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
980
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
981 @menu
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
982 * Dynamic Object Browsing::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
983 * Tool Integration::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
984 * Graphical Interface::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
985 * Version Control::
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
986 @end menu
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
987
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
988 @node Dynamic Object Browsing, Tool Integration, Further Work, Further Work
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
989 @section Support Dynamic Object Browsing
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
990
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
991 The OO-Browser works with static structures. It therefore utilizes
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
992 class groupings but has no concept of run-time objects. The techniques
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
993 and query relations desired in an object browser are very different from
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
994 that of a class browser. Therefore, a separate tool should be built.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
995 It could, however, utilize the OO-Browser user interfaces. It would
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
996 then act as a back-end engine communicating with the class browser
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
997 interface. This raises the inter-application communication issue of the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
998 next section.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
999
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1000
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1001 @node Tool Integration, Graphical Interface, Dynamic Object Browsing, Further Work
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1002 @section Provide Mechanism for Integration with Other Tools
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1003
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1004 Emacs supports subprocess control. This is how the textual interface
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1005 communicates with the graphical interface. They use a simple
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1006 redirection of standard input and standard output.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1007
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1008 A much more desirable and flexible strategy is to use a communications
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1009 medium like sockets to allow peer-to-peer communication. On top of this
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1010 low-level mechanism, a method like Field's Selective Broadcasting
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1011 [@cite{Reiss 88}] or ET++'s Multiple Views [@cite{Weinand 89}] might be used.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1012
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1013 @node Graphical Interface, Version Control, Tool Integration, Further Work
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1014 @section Extend Graphical Interface
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1015
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1016 A lot could be done here, none of it particularly difficult. As
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1017 mentioned before, a full suite of browser commands should be added.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1018 A technique that allows dynamic menu entry additions would provide the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1019 requisite flexibility. This could probably be achieved with a basic
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1020 resource file format and a small amount of application code to cache the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1021 entries.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1022
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1023 @node Version Control, , Graphical Interface, Further Work
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1024 @section Support Version Control Systems
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1025
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1026 RCS is the likely candidate system. One would want to be able to
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1027 browse particular releases and to avoid mixing code from one release
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1028 with that of another when building Environments.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1029
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1030
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1031
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1032 @node Conclusion, , Further Work, Top
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1033 @unnumbered Conclusion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1034
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1035 The OO-Browser is a robust tool for class or generalized hierarchy
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1036 browsing. New subsystems are easy to integrate, so we expect the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1037 available types of queries and means of user interaction to continue
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1038 to expand.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1039
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1040 The browser demonstrates useful user interface techniques. It supports
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1041 multiple interaction modalities: keyboard and mouse inputs, graphical
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1042 and textual views, menu and direct selection techniques. This allows
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1043 the user to choose a style with which he is comfortable. The ease of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1044 entry and exit from the browser coupled with its access speed,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1045 encourages a developer to use it often. It integrates well with the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1046 incremental development cycles often found in object-oriented projects.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1047 It further supports the developer with external interfaces for compiler
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1048 error parsing and type name completion.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1049
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1050 The browser implementation vividly illustrates that a single, portable
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1051 tool and interface can be used for a variety of languages. Departmental
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1052 language needs often change. So the ability to continue to use the same
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1053 tool with a different language lessens developer slow down and actually
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1054 provides an immediate comfort zone, so that the change need not be
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1055 overwhelming. Another good example of interface reuse is the ET++
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1056 application development framework [@cite{Weinand 89}]. It provides a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1057 means of building highly interactive, window system independent
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1058 applications that all share common interface constructs. One would hope
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1059 that more developers of programmer support tools will start taking an
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1060 approach of this kind.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1061
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1062 @sp 2
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1063 [@cite{Goldberg 83}] Goldberg, Adele and David Robson.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1064 @emph{Smalltalk-80: The Language and its Implementation}.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1065 Addison-Wesley, 1983.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1066
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1067
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1068 [@cite{Reiss 88}] Reiss, Steven P. "Integration Mechanisms in the FIELD
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1069 Environment," Brown University Technical Report CS-88-18, October 1988.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1070
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1071
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1072 [@cite{Stallman 87}] Stallman, Richard. @emph{GNU Emacs Manual}. Free
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1073 Software Foundation, Cambridge: MA, March 1987.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1074
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1075
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1076 [@cite{Weinand 89}] Weinand, Andre, Erich Gamma, and Rudolf Marty.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1077 Design and Implementation of ET++, a Seamless Object-Oriented
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1078 Application Framework, @i{Structured Programming}, Springer-Verlag: NY,
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1079 NY, Vol. 10, No. 2, 1989.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1080
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1081
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1082 @contents
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1083 @bye
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1084