[Shakespeare 1609] William Shakespeare. "Sonnet 18," *The Riverside Shakespeare*. Boston, MA: Houghton Mifflin, 1974.

[Shoch 1979] John F. Shoch. "An Overview of the Programming Language Smalltalk-72," *ACM SIGPLAN Notices*, vol. 14, no. 9 (September 1979), pp. 64-73.

[Skublics et al. 1996] Suzanne Skublics, Edward J. Klimas, David A. Thomas. *Smalltalk with Style*. Englewood Cliffs, NJ: Prentice-Hall, 1996. One hundred and twenty-six guidelines worth considering.

[Snyder 1986] Alan Snyder. "Encapsulation and Inheritance in Object-Oriented Programming Languages," *ACM SIGPLAN Notices* (OOPSLA '86 Conference Proceedings), vol. 21, no. 11 (November 1986), pp. 38-45.

[Stroustrup 1991] Bjarne Stroustrup. *The C++ Programming Language*, 2nd ed. Reading, MA: Addison-Wesley, 1991.

[Stroustrup 1994] Bjarne Stroustrup. *The Design and Evolution of C++*. Reading, MA: Addison-Wesley, 1994. The story of where C++ has been and where it might go, by its chief inventor.

[Sun 1995] *The Java Language Specification, Release 1.0 Alpha*. Sun Microsystems Computer Corporation, 1995.

[de Troyes 1190] Chrétien de Troyes. "The Story of the Grail," *Arthurian Romances*. New York: Penguin, 1991. The earliest known telling of Arthurian tales.

[Ungar and Jackson 1988] David Ungar, Frank Jackson. "Tenuring Policies for Generation-Based Storage Reclamation," *ACM SIGPLAN Notices* (OOPSLA '88 Conference Proceedings), vol. 23, no. 11 (November 1988), pp. 1-17.

[Wegner 1987] Peter Wegner. "Dimensions of Object-Based Language Design," *ACM SIGPLAN Notices* (OOPSLA '87 Conference Proceedings), vol. 22, no. 12 (December 1987), pp. 168-182.

[Wegner and Zdonik 1988] Peter Wegner, Stanley Zdonik. "Inheritance as an Incremental Modification Mechanism or What Like Is and Isn't Like," *ECOOP '88* (Proceedings of the 1988 European Conference on Object Oriented Programming). Berlin: Springer-Verlag, 1988, pp. 55-77.

[Wirfs-Brock et al. 1990] Rebecca Wirfs-Brock, Brian Wilkerson, Lauren Wiener. *Designing Object-Oriented Software*. Englewood Cliffs, NJ: Prentice-Hall, 1990. Focus first on the responsibilities of objects.

[Wolf and Liu 1995] Kirk Wolf, Chamond Liu. "New Clients with Old Servers: A Pattern Language for Client/Server Frameworks," *Pattern Languages of Program Design*. James Coplien, Doug Schmidt, editors. Reading, MA: Addison-Wesley, 1995, ch. 4.

[Yonezawa and Tokoro 1987] Akinori Yonezawa, Mario Tokoro, editors. *Object-Oriented Concurrent Programming*. Cambridge: MIT Press, 1987.
# Index

>> notation 47

^ (caret) 38, 49

## A

ABC (abstract base class) 66

abstract base class 66

abstract class 61, 242

abstract data type 13

abstract method 64, 68

accessor method 95

Accounts framework 254

Ada 3, 27, 29

Ada95 29

address book 152

aggregation 21, 28

vs. association 215

vs. container 78

agnosia, visual 146

AKO (A-Kind-Of) 14, 198, 199

Alexander, Christopher 241

aliasing 59, 150

analysis 88

analysis, object-oriented 110

Anderson, Bruce 241

ANSI standard Smalltalk 30, 126, 212

API 242, 253

APL 29

apparent down-call 68

application (in IBM Smalltalk) 26

application programming interface See API

Aristotle 30

array, literal 36

assembly 21

assignment 12, 34

subtyping and 201

association 72

association class 217

attributes of an object 19

autonomy and concurrency 10

## B

Baker garbage collector 190

base method 68

BASIC 182

Beck, Kent 82, 240

behavior of an object 19

black-box reuse 103, 250, 252, 253, 255

block 42

temporary variable 56, 276

broadcast pattern 276

broadcasting 228

broker object 219, 221, 230, 245, 254

buy 175

vs. inherit 99, 255

bytecodes 182

## C

C 27, 29

C++ 23, 27, 29, 168

garbage collection and 192

method lookup 185

polymorphism and 206

pure virtual function in 64, 66

cache 184

callback 129, 138

handler 137

callbacks and events 137, 140

cascade 52

category theory 204

Cg See common graphics

characteristics of an object 19

CHOICES operating system 166
class 11
AbtConverter 217
AbtObservableObject 125, 276
Array 35, 49, 70, 208
Bag 208
Behavior 262
BitBlt 217
Boolean 32, 163
byteArray 70, 223, 251
CgDrawable 138
CgSingleDrawingAreaApplication 138
CgWindow 138
Character 32, 35
Class 260
ClassDescription 262
Collection 69, 100, 208
CompiledMethod 182
ComposedTextView (in VisualWorks) 276
Controller (in VisualWorks) 125
CwButtonEvent 139
CwForm 129
CwWindow 129
CwMotionEvent 139
Cw{P}ushButton 137
CwText 129
CwTopLevelShell 129
Date 14, 56
Dictionary 70, 72, 208, 248
DirectedMessage 19
EsPoolDictionary 131, 276
EtWindow 133, 136
EtWorkspace 276
EventManager (in VisualSmalltalk) 125, 276
False 164
Float 14, 32, 33
IdentityDictionary 70, 74
Integer 14, 32, 33, 40
Magnitude 14, 15, 16, 61
Message 19
Metaclass 258
Model (in VisualWorks) 125, 276
Number 14, 16
Object 14, 61, 125, 184, 208, 259
OrderedCollection 70, 100, 135
Point 184, 187
Set 70, 208
SmallInteger 32, 40, 70, 73, 276
SortedCollection 70, 71, 135
Stream 70
String 32, 35, 70, 194, 208, 276
Symbol 35, 276

TextWindow (in VisualSmalltalk) 276
Time 14
True 164
View (in VisualWorks) 125
WbApplication 136
WeakDictionary (EsWeakDictionary) 247
WidgetWindow 136
class (in other contexts) 13
class-based language 28
client/server computing 267
CLOS (Common Lisp Object System) 29, 31, 193
CLU 29
Coad, Peter 216
COBOL 29
collection 13, 69
collection-worker pattern 216
Collins, Dave 157
command pattern 217
  as reification 216
comment, Smalltalk 36
common graphics 128
common widgets 128
CommonPoint 254
compiled method 182
composing objects 99
composite pattern 235
composite relationship 21
conceptual model 13, 89, 144, 266
concurrency 10
conformance 202
container 22, 69, 208
containers v. aggregations 78
context (block) 55
contravariance of argument types 204
control flow 42
control object as reification 217
control, user interface 128
controller (in MVC) 117, 217
Cook, William 207
copy constructor, C++ 81
copying objects 79
CORBA 224, 254
coupling and inheritance 102
covariance of return types 204
CRC card 82, 174
Crick, Francis 83
Cunningham, Ward 82, 240
Cw See common widgets
D

data type 13
DB2 (IBM Database 2) 244
dead cycle 189
digger, Smalltalk's 57
Deep Blue 213
deep copy 80
deferred routine or method 64
delegation 28
dependency pattern 120, 228
DeScribe 150
design 88
design templates 240
dictionary 72
dictionary, system 12
Dijkstra, Edsger 9
dispatcher 183
Display menu selection 49
display vs. execute 7, 49
displaying Smalltalk expressions 7
DOS 124
double dispatch pattern 172, 232
doughnut 174
duet pattern 172, 231
dynamic binding 28, 158
  performance of 165
dynamic link library 193
dynamic SQL 244

E

effect 3, 6
Eiffel 23, 29, 168, 192
  conformance in 205
deferred routine 64
polymorphism and 206
  pre- and postconditions in 205
Einstein, Albert 9
Emerald, polymorphism and 206
encapsulation 1
Envy 54, 136
equality 73
equality vs. identity 73
event 138
  handler 137
  notification 121, 125
  trace 114
events and callbacks 137, 140
exception, object-oriented 256, 276
Execute menu selection 49
execute vs. display 7, 49
executing Smalltalk expressions 7

F

factory 11, 13
factory method pattern 219, 220, 246
Feynman, Richard 157
filter (in client/server framework) 250
flow chart 105
FORTRAN 29
foundation classes 81, 212
fragmentation 192
framework 242
function, C++ 20

G

Gamma, Erich 214, 242
garbage collection 28, 187
  incremental 190
GemStone 224
generation scavenging garbage collector 191
getter method 95, 109
ghost pattern 226
Goldberg, Adele 240
graphical user interface See GUI
graphics context 138
GUI (graphical user interface) 125, 127
  builder 267
  See also UI

H

Hadamard, Jacques 9
handle-body 224
has-a relationship 21
hash 63, 75, 184
heap memory 192
Helm, Richard 214
heterogeneous vs. homogeneous containers 70
heuristic 213
Hollywood Principle 242, 252, 253
homogeneous vs. heterogeneous containers 70
homunculus 2
hook method 66, 252

I

IBM Smalltalk 19, 26, 30, 70, 125, 127, 128, 131, 136, 137, 182, 184, 209, 210, 233, 275
identity management 243, 246
identity vs. equality 73
identity, object See object identity
image, Smalltalk's 9, 12, 44, 181
immediate object 194
immutable object 5, 35
implementation 88
implementation inheritance 199
implementedBySubclass method 64
implicit polymorphism 211
inherit *vs.* buy 99, 255
inheritance 13, 28
  essential 200
  incidental 200
  invisible 200
  multiple 99, 103
  private (C++) 104, 207
  repeated 104
  single 99
  subclass 200
  subtype 200
  *vs.* subtyping 199
  visible 200
inspector, Smalltalk's 51
instance 18
interaction diagram 106, 114
interface of an object 19
interface, Java 207
interpreter 182
Interviews 125
isomorphism 154, 155
iterative development 89

J

Jacobson, Ivar 105, 114
Java 23, 29, 168, 193
  abstract method 64, 68
  polymorphism in 206
Johnson, Ralph 214, 241

K

Kasparov, Gary 213
Kay, Alan 9, 10, 158, 240
Klondike solitaire 149

L

late binding 28
*See also* dynamic binding
lawyer pattern 123, 233
lazy initialization 225
link attribute 217
Linné, Carl von (Linnaeus) 14, 30
literal
  array 276
  object 35
  string 276

M

MacApp 125, 254
Macintosh 124, 150
Macintosh trash can 149
magic 10, 148
main window, Motif 129
many-to-many relationship 217
mark-and-sweep garbage collector 188
materialization 243, 244
  framework 253
mediator pattern 234
mega-scroll 250
member data (C++) 19
memory of an object 19
message 2, 18, 20
  binary 33
  flow diagram 114
  handler 183
  keyword 33
  unary 34
metaclass 43, 257
metaphor 2, 8, 9, 146
method 18, 20
  dispatch (lookup) 183
  lookup (dispatch) 161, 183
method, class 41, 43, 259
method, design 82
method, instance 41
methodology, design 82
MFW (materialization framework) 253
mix-ins 99
modal user interface 140
model in MVC 116
model-pane-dispatcher See MPD
model-view See MV
model-view-controller See MVC
Modula-2 3, 27, 29
Modula-3 168
  polymorphism and 206
module, Modula-2 3
Morgan, Tom 8
Motif 127, 182
MPD (model-pane-dispatcher) 124
multi-method 170, 204, 231
multiple inheritance 28
mutable object 5
MV (model-view) 125, 228
MVC (model-view-controller) 115, 125, 242, 254
N

Network OLE 254
new, method 257, 259

O

object 1
database 254
clementary 32
handler pattern 233
identity 246
is, variable 20
object identity 35, 73
Object Pascal 23
object-based language 28
Objective-C 23, 29
object-oriented language 28
objects from records pattern 220, 244, 251
ObjectStore 224
Objectworks 30
observer pattern 228
OMT (Object Modeling Technique) 214
one-to-one relationship 233, 235
OS/2 127, 131
shredder 149
overloading 158
overriding equality 75

P

package, Ada 3
PARC (Palo Alto Research Center) 9, 30, 124, 182, 240, 242
part-of relationship 21
pas de deux pattern 172, 232
Pascal 27, 29, 182
performance 165, 186
design and 266
memory fragmentation and 192
method dispatch and 184, 186
period as separator 37
Personal Information Manager See PIM
philosophy as a conceptual model 157
PIM (Personal Information Manager) 151
Plato 30
pluggable view 140, 256
polymorphism 103, 158, 161, 176, 178, 255
ad hoc 169
apparent 169
in C++ 167, 168
example of 163, 166, 169, 171, 180, 231, 236

implicit 169
inclusion 169
multiple 172
signature-based 169
substitutability and 200

pool dictionary 131, 276
POOL-I and polymorphism 206
POSIX 182
postcondition 205
postponement as computing trend 158
precedence of messages 34
precondition 205
Presentation Manager 108, 124
primitive method 193
private members in C++ 207
private method 94
Prolog 29
protocol of an object 19
proxy pattern 224, 226
public member functions in C++ 19
public method 89, 94
publish-subscribe pattern 228
pure virtual 64, 243

R

record as object 222
record, traditional 220
recursive descent parsing 237
Reenskaug, Trygve 124
reference semantics 80
reference-counting garbage collector 188
reflection or reflectiveness 181, 187
reification 216, 250
begets polymorphism 217
relational database 220, 244
renaming, Eiffel 104
resources, widget 130
responsibility-driven design 90
return 3, 7
reuse of knowledge 14
reuse of software 265
RISC computers 160
Rolodex 152
run-time type testing in C++ 169, 172

S

script for message flows 114
search (in client/server framework) 243, 248
search as reification 216
selector 20
self (special variable) 37, 54
SELF language 22, 28
semi-space 190
services of an object 19
set 13
setter method 95
shallow copy 80
shell 129
signature, C++ 20
Simula-67 23, 29, 31
singleton pattern 230
Sketchpad 31
Smalltalk and polymorphism 206
Smalltalk/V 30, 108, 124, 125, 275
Smalltalk-72 30
Smalltalk-80 30, 31, 124, 140, 182, 183, 242, 275
smart container pattern 79, 213, 215
solitaire pattern 40, 230, 245
specialization 13
specification inheritance 200
spiral development 89
SQL (Structured Query Language) 244
broker 245, 254
state of an object 19
static SQL 244
stream 77
strong reference 247
Structured Query Language See SQL
subclass 13
subclass inheritance (subclassing) 200
subclassing vs. subtyping 200
subclassResponsibility method 64, 176, 214, 243, 276
substitutability and subtyping 200
subtype inheritance (subtyping) 200
subtyping vs. subclassing 199
super (special variable) 54
superclass 13
Sutherland, Ivan 31

T

taxonomy 13
telegram (message) 2
telephone book 152
template method 68
template, C++ 81
Tensegrity 224
tenured area (in garbage collection) 191

timing diagram 114
tombstone 190
toolkit 128
transaction broker 245, 254
translation between people 7, 89, 99, 273
type 13
type hierarchy 199
type-checking 166

U

UI (user interface) 96, 115, 142
undo 150, 176
UNIX 127
unnamed instance variable 86
update (in client/server framework) 243, 251
use case 105
user exit 66
user interface See UI

V

value semantics 81
variable 11
class 39, 54
class instance 40, 231, 259, 275
formal argument 39
global 39, 48
instance 18, 39, 54
local or temporary 37, 39, 49
vs. object 20
Versant 224
version (in Envy) 54
view in MVC 116
virtual base class, C++ 104
virtual function table, C++ 185
virtual function, C++ 185
virtual list 250
virtual machine 181
VisiCalc 148, 149
visitor pattern 236
visual programming 137
VisualAge 26, 30, 120, 127, 137, 141, 150, 217, 261, 275
VisualSmalltalk 30, 141, 233, 275
VisualWorks 30, 117, 124, 125, 127, 183, 217, 233, 275
Vlissides, John 214
v-table See virtual function table, C++
W

walkback 33, 57
waterfall development 89
weak reference 247, 276
Wegner, Peter 27
white-box reuse 103, 250, 253, 255
whole-part relationship 21
widget 128
window handle 129
WindowBuilder Pro 127, 136, 137, 150
Windows 124, 127, 150
  Klondike solitaire in 149
Windows95 150
Wirfs-Brock, Rebecca 89
Wolf, Kirk 68
Word, Microsoft 150

X

X event 137
X server 137
X/Motif 125
Xlib 128
xm (X/Motif) 128
Xt Intrinsics 128
X-Windows 124, 128

Y

yourself method 52
yo-yo method 68

Z

"zero, one, infinity" rule 150