* `marries`: is the message selector

* `thatPerson` is the argument

As with every message expression it returns a result, which is what is saved into the variable `newStatus`.

### 34.3.4 Message types

There are a number of different types of message. These are:

* **Unary Message** have no arguments.
  `anArray size. theta sin. 4 even.`
  the message selector (i.e. size) can be any simple identifier.

* **Keyword Messages** have one (or more) keywords, each with an argument.

```
index max: limit
anArray at: first put: 'John'
```

In the above examples `max:` and `at:put:` are the keywords (termed selectors). This means that the name of a message selector is spread amongst the arguments. These can be any simple identifier with a trailing colon. The argument can be an expression representing any object.

* **Binary Messages** have one argument, and the selector is one or two non-`-alphabetic` symbols. For example:

`3 > 4. 100 / 17. oldIndex + 1.`

The second character in a binary message selector *cannot* be a minus sign.

### 34.3.5 Parsing rules

The parsing rules of Smalltalk can be summarized in the following points:

* Multiple expressions are separated by full stops.

* Unary expressions parse left to right.

* Binary expressions parse left to right.

* Unary expressions take precedence over binary expressions.

* Parenthesized expressions (using round brackets) take precedence over unary expressions.

To summarize then the precedence order is unary `-binary-keyword` (plus take into account round brackets).

## 34.4 Blocks

A block is a sequence of statements whose execution is deferred. They are evaluated in the context in which they were defined. Each block is an object of class `Context`. The statements are enclosed in square brackets e.g. `[]`. The block will be executed when it is sent the message `"value"`. The result of the last message sent is returned as the value of the block. For example:

```
| temp |
temp := [Transcript show: 'Hello John'.].
Transcript show: 'Hello World'.
temp value.
```

Blocks are most commonly used with control structures such as:

```
anObject
    ifTrue: [Transcript show: 'Hello Out There'.].
```

They may also be used in iteration statements, for example:

```
[x > 0]
whileTrue: [...].
```
This repeatedly evaluates the Smalltalk code in the second block while the result of the first block evaluates to true. Note that `whileTrue:` is a message to the first block, it is therefore a method defined in class Context. Other control structures which use blocks include repetition e.g. `timesRepeat:` and `do:`.

## 34.5 Class Boolean

Class `Boolean`, although not exactly part of the Smalltalk syntax, is important enough to be considered here. It may at first seem confusing that class `Boolean` is not part of the language and is in fact a class with methods defined which provide the usual logical operations. However, given Smalltalk's commitment to the philosophy of object orientation, it is perhaps not that surprising that facilities such as `Boolean` are actually provided by a class definition.

Once you get used to the idea it is not that strange and most of the time you do not need to worry about the fact. Indeed, as long as you learn the "syntax" of boolean operators you need never actually know that they are not part of the basic language.

The class `Boolean` defines the whole protocol for boolean operations. This class has two subclasses `True` and `False` which determine what should happen when different messages are sent to them. Thus the equivalent of C's `if` statement in Smalltalk is:

```
anObject
    ifTrue: [some code].
```

There is also the equivalent of the `unless` statement in some languages:

```
anObject
    ifFalse: [some code].
```

These can be combined to form an `if-then-else` construct.

```
anObject
    ifTrue: [some code]
    ifFalse: [some other code].
```

Note the period is only placed after the last line. The message selector used here is actually `ifTrue:ifFalse:.`.

The usual range of boolean functions have been defined such as (`&`) and (`|`) or as well as specialized versions such as `and:` and `or:` which only evaluate the second operator if necessary. For example:

<table><tr><td>(a &lt; 2) &amp; (b &gt; 2)</td><td>And</td></tr><tr><td>(a &lt; 2) | (b &gt; 2)</td><td>Or</td></tr><tr><td>(a &gt; 0) and: [b &gt; (6 / a)]</td><td>And where the second expression is only evaluated if the first expression evaluates to true. As here, this construct may be used as a check to ensure that erroneous operations are not performed.</td></tr><tr><td>(a &gt; 0) or: [B &gt; 0]</td><td>Or where the second expression will only be executed if the first evaluates to false.</td></tr></table>

## 34.6 Collections

As with class `Boolean`, collections are not strictly part of the Smalltalk language, however they are so important that they will be mentioned here.

Collections are the elements used to construct data structures in Smalltalk. They allow any object to be grouped together and manipulated. Complex data structures can be built up by combining collections together. Abstract Data Types (ADT's) can be instantiated by subclasses the default collection classes. They therefore provide a very powerful data construction mechanism.

The most commonly used collection classes are:

<table><tr><td>Set</td><td>A collection of objects in any order. No duplicates are allowed.</td></tr><tr><td>Bag</td><td>A collection of objects in any order; duplicates are allowed.</td></tr></table>
<table><tr><td>Array</td><td>Like an array in Pascal, has a fixed size (which can be grown) and accessed by explicit position references.</td></tr><tr><td>OrderedCollection</td><td>A bit like a linked list in Pascal or C. Elements are added to specific locations specified either as first, last or relative to another object.</td></tr><tr><td>SortedCollection</td><td>A collection whose order is determined by a sort block. This block is a piece of code which returns true or false depending upon the test performed.</td></tr><tr><td>Dictionary</td><td>Rather like a hash table. Objects are stored with a key and accessed by a key. Dictionaries are therefore a set of key -> value associations</td></tr></table>

Elements in collections are in general accessed by the `at:` and added by the `at:put:` or `add:` messages. It is possible to iterate over the elements of a collection using the `do:` construct.
Bibliography

[Acron and Walden 1992] T. L. Acron and S. H. Walden, SMART: Support Management Automated Reasoning Technology for Compaq Customer Service, pp 3 - 17, *Innovative Applications of Artificial Intelligence 4*, Ed. A. Carlisle Scott and Philip Klahr, (1992).

[Alexander et al 1977] C. Alexander, S. Ishikawa and M. Silverstein with M. Jacobson, I. Fiksdahl-King and S. Angel, *A Pattern Language*, Oxford University Press, 1977.

[Alexander 1979] C. Alexander, *The Timeless Way of Building*, Oxford University Press, 1979.

[Barbey and Strohmeier 1994] Stephane Barbey and Alfred Strohmeier, The Problematics of Testing Object-Oriented Software, in *SQM'94 Second Conference on Software Quality Management*, Vol 2, M. Ross, C. A. Brebbia, G. Staples and J. Stapleton (eds), pages 411-426, July 26-28, 1994.

[Barbey, Amman and Strohmeier 1994] Stephane Barbey, Manuel M. Ammann and Alfred Strohmeier, *Open Issues in Testing Object-Oriented Software*, in *ECSQ'94, European Conference on Software Quality*, Basil Switzerland, Oct. 17-20, 1994.

[Beck 1994] K. Beck, Simple Smalltalk testing, *The Smalltalk Report*, Vol 4, No. 2, pp 16-18, October 1994.

[Beck and Johnson 1994] K. Beck and R. Johnson, Patterns Generate Architectures, Proc. *Eccop'94*, pp. 139-149, 1994.

[Ben-Natan 1995] R. Ben-Natan, *CORBA: A Guide to Common Object Request Broker Architecture*, McGraw-Hill, ISBN 0-07-005427, 1995.

[Beizer 1990] B. Beizer, *Software Testing Techniques*, Van Nostrand Reinhold, New York, 1990.

[Binder 1994] Robert V. Binder, Guest Editor, *Special Issue of Communications of the ACM, Object Oriented Software Testing*, Vol. 37, No 9, 1994. ACM Press.

[Binder 1994b] Robert V. Binder, Design for Testability in Object-Oriented Systems, in *Special Issue of Communications of the ACM, Object Oriented Software Testing*, Vol. 37, No 9, pp. 87-101, 1994.

[Birrer and Eggenschmiler 1993] Andreas Birrer and Thom as Eggenschwiler, " Frameworks in the Financial Engineering Domain: An Experience Report, ECOOP'93, pp 21-35.

[Boehm 1988] B. W. Boehm, A spiral model of software development and enhancement, *IEEE Computer*, pp 61-72, May 1988.

[Booch et al 1996] G. Booch, I. Jacobson and J. Rumbaugh, *The Unified Modeling Language for Object Oriented Development*, Documentation Set, Version 0.91 Addendum, UML Update, Rational Software Corporation, (available on the web http://www.rational.com/otuml.html), 1996.

[Booch 1996] Grady Booch, *Object Solutions: Managing the Object-Oriented Project*, Pub. Addison-Wesley, Menlo Park, ISBN 0-8053-0594-7, (1996).

[Booch and Rumbaugh 1995] Grady Booch and James Rumbaugh, *The Unified Method Documentation Set*, Version 0.8, Rational Software Corporation, (available on the web http://www.rational.com/otuml.html), 1995.

[Booch 1994] Grady Booch, *Object-Oriented Analysis and Design with Applications*, 2nd Edition, Benjamin Cummings, Redwood City, California, (1994).

[Booch 1991] Grady Booch, *Object-Oriented Design with Applications*, Benjamin Cummings, (1991).

[Booch 1987] Grady Booch, *Software Components with Ada*, Benjamin Cummings, Menlo Park, California, 1987.

[Booch 1986] Grady Booch, *Object Oriented Development*, *IEEE Transactions on Software Engineering*, 12 (2), pp 211-221, February 1986.

[Brooks 1987] Fred Brooks, No Silver Bullet: Essence and Accidents of Software Engineering, *IEEE Computer*, April 1987.

[Brown 1989] A. L. Brown, *Persistent Object Stores*, Ph.D. Thesis, University of St. Andrews, 1989.

[Budd 1991] T. Budd, *An Introduction to Object Oriented Programming*, Pub. Addison-Wesley, ISBN 0-201-54709-0, (1991).

[Budinsky et al 1996] F. J. Budinsky, M. A. Finnie, J. M. Vlissides and P. S. Yu, Automatic code generation from design patterns, *IBM Systems Journal*, Vol. 35, No. 2, 1996.

[Coad and Yourdon 1991] P. Coad and E. Yourdon, *Object-Oriented Analysis*, Yourdon Press, Englewood Cliffs, NJ, (1991).
[Coleman et al 1994] D. Coleman, P. Arnold, S. Bodoff, C. Dollin, H. Gilchrist, F. Hayes and P. Jeremes, *Object Oriented Development: The Fusion Method*, Prentice Hall International, ISBN 0-13-101040-9, 1994.

[Cook and Daniels 1994] S. Cook and J. Daniels, *Designing Object Oriented Systems: Object-oriented modelling with Syntropy*, New York, Prentice Hall, 0-13-203860-9, 1994.

[Cox 1990] Brad J. Cox, There *Is* a Silver Bullet, *BYTE*, October 1990, pp 209-218.

[Cox and Novobilski 1991] Brad J. Cox and Andrew Novobilski, *Object-Oriented Programming: An Evolutionary Approach (2nd edition)*, Pub. Addison Wesley, ISBN 0-201-54834-8.

[Derr 1995] K. W. Derr, *Applying OMT: A Practical step-by-step guide to using the Object Modeling Technique*, Prentice Hall, 0-13-231390-1, 1995.

[Deutsch 1989] L. Peter Deutsch, The Past, Present and Future of Smalltalk, *Proc. ECOOP'89, Third European Conference on Object Oriented Programming*, pp 73-87, (1989).

[Feigenbaum 1995] Barry Alan Feigenbaum, Smalltalk/2: An enhanced Smalltalk, *Journal of Object Oriented Programming*, Vol. 8, No 7, pp. 50-56, 1995.

[Freedman 1991] R. S. Freedman, Testability of software components, *IEEE Trans. Softw. Eng.* 17 (6), pp. 553-564, June 1991.

[Gamma et al, 1995] E. Gamma, R. Helm, R. Johnson and J. Vlissades, *Design Patterns: Elements of Reusable Object-Oriented Software*, Addison-Wesley, 1995.

[Gamma et al 1993] E. Gamma, R. Helm, R. Johnson and J. Vlissades, Design patterns: Abstraction and reuse of object-oriented design, in *ECOOP'93 (Lecture Notes in Computer Science 707)*, pp. 406-431, Springer-Verlag, 1993.

[Goldberg and Robson 1983] A. Goldbe rg and D. Robson, *Smalltalk-80: The Language and its Implementation*, Addison-Wesley, 1983.

[Goldberg and Robson 1989] A. Goldberg and D. Robson, *Smalltalk-80: The Language*, Pub. Addison-Wesley, ISBN 0-201-13688-0, (1989).

[Goldberg 1984] A. Goldberg, *Smalltalk-80: The Interactive Programming Environment*, Addison-Wesley, 1984.

[Harel et al 1987] D. Harel, A. Pnueli, J. P. Schmidt and R. Sherman, 1987. On the formal semantics of Statecharts, *Proc. 2nd IEEE Sump. on Logic in Computer Science*, pp 54-64.

[Harel 1988] D. Harel, On visual formalisms, 1988. *Communications of the ACM*, Vol 31, No. 5., pp 514-530.

[Harmon and Taylor 1993] P. Harmon and D. Taylor, *Objects in Action: Commercial Applications of Object-Oriented Technologies*, Pub. Addison-Wesley: Massachusetts, (1993).

[Harrold, McGregor and Fitzpatrick 1992] Mary Jean Harrold, John D. McGregor and Kevin J. Fitzpatrick, Incremental testing of object-oriented class structures, in *Proc. of the 14th International Conference on Software Engineering*, pages 68-79, May 11-15, 1992. ACM Press.

[Hoffman and Strooper 1995] Daniel Hoffman and Paul Strooper, The testgraph methodology: Automated testing of collection classes, *Journal of Object Oriented Programming*, Vol. 8, No 7, pp. 35-41, 1995.

[Hopkins and Horan 1995] T revor Hopkins and Bernard Horan, *Smalltalk: An Introduction to Application Development Using VisualWorks*, Pub. Prentice Hall, ISBN 0-13-318387-4, 1995.

[Hopkins and Wolczko 1989] T. P. Hopkins and M. I. Wolczko, Writing Concurrent Object-Oriented Programs using Smalltalk-80, in *The Computer Journal*, 32 (4), Oct. 1989, pp 341-350.

[Hunt 1995] Neil Hunt, Automatically tracking test case execution, *Journal of Object Oriented Programming*, Vol. 8, No 7, pp. 22-27, 1995.

[Jacobson 1992] I. Jacobson, M. Christers on, P. Jonsson and G. Overgaard, *Object-Oriented Software Engineering: A Use Case Driven Approach*, Addison-Wesley, Reading, MA, ISBN 0-201-54435-0, 1992.

[Johnson 1992] Ralph. E. Johnson, Documenting Frameworks with Patterns , *Proc. OOPSLA'92, SIGPLAN Notices* 27(10), pp. 63-76, 1992.

[Jorgensen and Erickson 1994] P. C. Jorgensen and C. Erickson, Object-Oriented Integration Testing, in *Special Issue of Communications of the ACM, Object Oriented Software Testing*, Vol. 37, No 9, pp. 30-38, 1994.

[Kemerer 1987] Chris F. Kemerer, An Empirical Validation of Software Cost Estimation Models, *Communications of the ACM*, Vol. 30, No. 5, May 1987, pp 416-429.

[Krasner 1983] G. Krasner (ed.), *Smalltalk-80: Bits of History, Words of Advice*, Addison-Wesley, 1983.
[Krasner and Pope 1988] G. E. Krasner and S. T. Pope, *A Cookbook for Using the Model Controller User Interface Paradigm in Smalltalk-80*, JOOP 1(3), pp. 26-49, 1988.

[Kuhn 1962] Thomas Kuhn, *The Structure of Scientific Revolutions*, The University of Chicago Press, 1962.

[Lalonde 1994] W. Lalonde, Discovering Smalltalk, Benjamin/Cummings Pub. Co. Inc. ISBN 0-8053-27207, 1994.

[LaLonde and Pugh 1993] W. LaLonde and J. Pugh, Idle time computing with futures, *Journal of Object Oriented Programming*, Vol 6 (6), pp 69-76, 1993.

[Lalonde and Pugh 1991] W. Lalonde and J. Pugh, *Inside Smalltalk Volume I*, Pub. Prentice Hall, ISBN 0-13-468414-1, (1991).

[Lalonde and Pugh 1991b] W. Lalonde and J. Pugh, *Inside Smalltalk Volume II*, Pub. Prentice Hall, ISBN 0-13-465964-3, (1991).

[Lalonde and Pugh 1991] Wilf Lalonde and John Pugh, Subclassing / = subtyping / = Is -a, *Journal of Object Oriented Programming*, Janurary 1991, pp 57-62.

[Lewis 1995] Simon Lewis, *The Art and Science of Smalltalk: An Introduction to Object Oriented Programming* Using VisualWorks, Hewlett-Packard Professional Books: Prentice Hall, Pub 1995. ISBN 0-13-371345-8.

[Love 1993] T. Love, *Object Lessons: Lessons Learned in Object-Oriented Development Projects*, SIGSBooks: New York, (1993).

[Meyer and Nerson 1993] B. Meyer and J. Nerson, *Object-Oriented Applications*, Prentice-Hall: New Jersey, (1993).

[Meyer 1988] B. Meyer, *Object-Oriented Software Construction*, Prentice Hall International, Englewood Cliffs, NJ, (1988).

[Moser and Nierstrasz 1996] S. Moser and O. Nierstrasz, The Effect of Object-Oriented Frameworks on Developer Productivity, pp 45-51, *IEEE Computer*, Sept. 1996.

[Myers 1979] G. J. Myers, *The Art of Software Testing*, Business Data Processing: a Wiley Series, John Wiley and Sons, 1979.

[Orfali et al 1995] R. Orfali, D. Harkey and J. Edwards, *The Essential Distributed Objects Survival Guide*, John Wiley & Sons, ISBN 0-471-12993-3, 1995.

[Ousterhout 1994] John K. Ousterhout, *TCL and the TK Toolkit*, Pub. Addison-Wesley Professional Computing Series, ISBN 0-201-63337-X, 1994.

[Perry and Kaiser 1990] D. E. Perry and G. E. Kaiser, Adequate testing and object oriented programming, *Journal of Object Oriented Programming*, 2 (5), pages 13-19, January 1990.

[Pyle 1991] I. C. Pyle, *Developing Safety Systems: A Guide Using Ada*, pp. 177-195, Pub. Prentice Hall, 1991.

[Rational 1996] *Unified Modeling Language for Real-Time Systems Design*, Rational Software Corporation, (available at http://www.rational.com/ot/uml.html), 1996.

[Rumbaugh et al 1991] J. Rumbaugh, M. Blaha, W. Pe'rmerlani, F. Eddi and W. Lorensen, *Object-oriented modeling and design*, Prentice Hall, 1991.

[Shan 1995] Y-P Shan, Smalltalk on the Rise, *Communications of the ACM*, Vol. 38, No. 10, pp 103-104, October 1995.

[Siepman and Newton 1994] E. Siepmann and A. R. Newton, *TOBAC: A Test Case Browser for Testing of Object-Oriented Software*, *Proc. of the International Symposium on Software Testing and Analysis (ISSTA)*, ACM 1994.

[Skublics et al 1996] Suzanne Skublics, Edward J. Klimas and David A. Thomas, *Smalltalk with Style*, Prentice Hall, ISBN 0-13-165549-3, 1996.

[Smith 1994] David N. Smith, *IBM Smalltalk: The Language*. Benjamin/Cummings Pub. Co. Inc. ISBN 0-8053-0908-X, 1994.

[Sparks, Benner and Faris, 1996] S. Sparks, K. Benner and C. Faris, Managing Object-Oriented Framework Reuse, pp 52-61, *IEEE Computer*, Sept. 1996.

[Taylor 1992] D. A. Taylor, *Object-Oriented Information Systems: Planning and Implementation*. John Wiley, N.Y. 1992.

[van der Linden 1996] P. van der Linden, *Just JAVA*, SunSoft Press, A Prentice Hall Title, ISBN 0-13-565839-X, 1996.

[Wirfs-Brock et al 1990] R. Wirfs-Brock, B. Wilkerson, L. Wiener, *Designing Object Oriented Software*, Pub. Prentice Hall, ISBN 0-13-629825-7, (1990).

[Yourdon 1994] E. Yourdon, *Object-Oriented Systems Design*, Prentice Hall: New Jersey, (1994).
OOPSLA/ECOOP'90, Joint Conference on Object-Oriented Programming: Systems, Languages and Applications, Ed. Norman Meyrowitz, Pub Addison Wesley, ISBN 0-0201-52430-X, (1990).

OOPSLA '91, Conference on Object-Oriented Programming Systems, Languages and Applications, Ed. Andreas Paepcke, Pub Addison Wesley, ISBN 0-0201-55417-8, (also as ACM SIGPLAN Notices Vol 26, No. 11), (1991).

OOPSLA '92, Seventh Annual Conference on Object-Oriented Programming Systems, Languages and Applications, Ed. Andreas Paepcke, Pub Addison Wesley, ISBN 0-201-53372-3, (also as ACM SIG PLAN NOTICES Vol 27, No. 10, (1992).

OOPSLA '93. OOPSLA'93 Conference Proceedings, ACM/SIGPLAN, Pub. Addison Wesley, ISBN 0-201-58895-1, 1993.

ECOOP '89, Third European Cnnferenc e on Object -Oriented Programming, Ed. Stephen Cook, Pub.
Cambridge University Press, (in the British Computer Society Workshop Series), ISBN 0-521-38232-7, (1989)

ECOOP '92, European Conference on Object Oriented Programming, Ed. O. Lehrmann Madsen, Pub.
Springer-Verlag, ISBN 0-387-55668-0, (Published in the Lecture Notes in Computer Science
series), (1992).

ECOOP '93. European Conference on Object Oriented Programming, Pub. Springer -Verlag, Lecture Notes in Computer Science Vol 707, 1993.

ECOOP '94, Europe an Conference on Object Oriented Programming, Pub. Springer -Verlag, Lecture Notes in Computer Science Vol 821, 1994.

ECOOP '95, Ninth European Conference on Object -Oriented Programming, Lecture Notes in Computer Science, Vol. 952, Springer Verlag, 1995.

[ISO 1993]. *Information technology, software packages, quality requirements and testing*, ISO Draft International Standard, ISO/IEC DIS 12119. 1993.

*Workshop on Testing Smalltalk Applications*, held at the OOPSLA '95 Conference, Monday October 16, 1995. For more information contact Barbara Yates, OOPSLA Workshop, 2002 Parkside Court, West Linn, Oregon, 97068-2767, USA (Email: barbarabytesmiths@acm.org).
# Index

;

: 81

^

^ 67

## A

<table><tr><td>Abstract<br>classes</td><td>21</td></tr></table>

<table><tr><td><strong>Abstraction</strong></td><td>19</td></tr></table>

<table><tr><td>accept</td><td>47</td></tr></table>

<table><tr><td>accessing</td><td>78</td></tr></table>

<table><tr><td>accessor</td><td>67, 78</td></tr></table>

<table><tr><td>Account</td><td>199</td></tr></table>

<table><tr><td>Ada</td><td>16, 17</td></tr></table>

<table><tr><td><strong>add</strong></td><td>89, 96</td></tr><tr><td style="padding-left: 2em;">all</td><td>89</td></tr><tr><td style="padding-left: 2em;">first</td><td>96</td></tr><tr><td style="padding-left: 2em;">last</td><td>93</td></tr><tr><td style="padding-left: 2em;">after</td><td>91, 96</td></tr><tr><td style="padding-left: 2em;">before</td><td>91, 96</td></tr></table>

<table><tr><td>add</td><td>56</td></tr></table>

<table><tr><td><strong>addDependent</strong></td><td>208</td></tr></table>

<table><tr><td>Analysis phase</td><td>133, 134</td></tr></table>

<table><tr><td>ANSI X3J20</td><td>47</td></tr></table>

<table><tr><td>ApplicationModel</td><td>223, 228, 236</td></tr></table>

<table><tr><td style="padding-left: 2em;">Initialization</td><td>229</td></tr></table>

<table><tr><td>Arithmetic operators</td><td>70</td></tr></table>

<table><tr><td>Array</td><td>97, 98, 122</td></tr><tr><td style="padding-left: 2em;">Multi dimensional arrays</td><td>97</td></tr><tr><td style="padding-left: 2em;">TwoDList</td><td>98</td></tr></table>

<table><tr><td>asBag</td><td>102</td></tr></table>

<table><tr><td>aslowerCase</td><td>99</td></tr></table>

<table><tr><td>asOrderedCollection</td><td>102</td></tr></table>

<table><tr><td>asSet</td><td>102</td></tr></table>

<table><tr><td>Assignment</td><td>68, 71</td></tr></table>

<table><tr><td>asSortedCollection</td><td>103</td></tr></table>

<table><tr><td style="padding-left: 2em;">asSortedCollection: aSortBlock</td><td>103</td></tr></table>

<table><tr><td>asUppercase</td><td>99</td></tr></table>

<table><tr><td>asValue</td><td>232</td></tr></table>

<table><tr><td>at</td><td>97</td></tr></table>

<table><tr><td><strong>at:put</strong></td><td>97, 98</td></tr></table>

<table><tr><td>atPoint</td><td>98</td></tr></table>

<table><tr><td><strong>atPoint:put</strong></td><td>98</td></tr></table>

## B

<table><tr><td>Bag</td><td>89</td></tr><tr><td style="padding-left: 2em;">removeAllOccurrencesOf</td><td>90</td></tr></table>

<table><tr><td>binary message</td><td>73</td></tr></table>

<table><tr><td>Block</td><td>81</td></tr></table>

<table><tr><td style="padding-left: 2em;">Block parameters</td><td>82</td></tr></table>

<table><tr><td style="padding-left: 2em;">Block temporary variables</td><td>83</td></tr></table>

<table><tr><td style="padding-left: 2em;">BlockClosure</td><td>81</td></tr></table>

<table><tr><td style="padding-left: 2em;">Typical block usage</td><td>83</td></tr></table>

<table><tr><td>value</td><td>82</td></tr></table>

<table><tr><td style="padding-left: 2em;">value:</td><td>82</td></tr></table>

<table><tr><td>Booch</td><td>132</td></tr></table>

<table><tr><td>Boolean</td><td>61, 73, 83</td></tr></table>

<table><tr><td style="padding-left: 2em;">ifTrue:ifFalse:</td><td>83</td></tr></table>

<table><tr><td>BOSS</td><td>114</td></tr></table>

<table><tr><td>Breakpoints</td><td>122</td></tr></table>

<table><tr><td>Browser</td><td>46, 50, 51</td></tr></table>

## C

<table><tr><td>C++</td><td>17, 21, 22</td></tr></table>

<table><tr><td>Canvas</td><td>224, 225</td></tr></table>

<table><tr><td>Cascading</td><td>81</td></tr></table>

<table><tr><td>category</td><td>27, 51</td></tr></table>

<table><tr><td><strong>Category</strong></td><td>203</td></tr></table>

<table><tr><td>changed</td><td>72</td></tr></table>

### Changes

<table><tr><td style="padding-left: 2em;">Change List</td><td>125</td></tr></table>

<table><tr><td style="padding-left: 2em;">changes file</td><td>125</td></tr></table>

<table><tr><td style="padding-left: 2em;">Project</td><td>127</td></tr></table>

<table><tr><td style="padding-left: 2em;">changes file</td><td>48</td></tr></table>

<table><tr><td>Character</td><td>70, 120</td></tr></table>

<table><tr><td>Class</td><td>17, 21, 25, 27</td></tr></table>

<table><tr><td style="padding-left: 2em;">class</td><td>62</td></tr></table>

<table><tr><td style="padding-left: 2em;">Class definitions</td><td>63</td></tr></table>

<table><tr><td style="padding-left: 2em;">Person</td><td>76</td></tr></table>

<table><tr><td style="padding-left: 2em;">class instance variable</td><td>65</td></tr></table>

### Class instance variables

<table><tr><td><strong>role</strong></td><td>196</td></tr></table>

<table><tr><td>Class names</td><td>51</td></tr></table>

<table><tr><td style="padding-left: 2em;">class variable</td><td>25, 54, 63, 76</td></tr></table>

### Class variables

<table><tr><td><strong>role</strong></td><td>196</td></tr></table>

<table><tr><td>collect</td><td>101</td></tr></table>

<table><tr><td>Collection</td><td>87, 88</td></tr></table>

<table><tr><td style="padding-left: 2em;">add</td><td>89</td></tr></table>

<table><tr><td style="padding-left: 2em;">copyEmpty</td><td>89</td></tr></table>

<table><tr><td style="padding-left: 2em;">do:</td><td>89</td></tr></table>

<table><tr><td style="padding-left: 2em;">includes</td><td>89</td></tr></table>

<table><tr><td style="padding-left: 2em;">empty</td><td>89</td></tr></table>

<table><tr><td style="padding-left: 2em;">remove</td><td>89</td></tr></table>

<table><tr><td style="padding-left: 2em;">Selecting which Collection</td><td>88</td></tr></table>

<table><tr><td style="padding-left: 2em;">size</td><td>89</td></tr></table>

<table><tr><td>comment</td><td>66, 67</td></tr></table>

<table><tr><td>Concurrency</td><td>261</td></tr></table>

<table><tr><td style="padding-left: 2em;">Example</td><td>264</td></tr></table>

<table><tr><td>Controller</td><td>46, 213, 214, 217, 221</td></tr></table>

<table><tr><td>CORBA</td><td>279</td></tr></table>

<table><tr><td>Cursor</td><td>114, 178, 253</td></tr></table>

## D

<table><tr><td>Date</td><td>119</td></tr></table>

<table><tr><td>debugger</td><td>53</td></tr></table>

<table><tr><td>Dependency</td><td>206</td></tr></table>

<table><tr><td>dependents</td><td>96, 207, 208, 209, 217</td></tr></table>

<table><tr><td>Design patterns</td><td>173</td></tr></table>
<table><tr><td>detect</td><td>101</td></tr><tr><td>Dialog</td><td>91</td></tr><tr><td>Dictionary</td><td>98</td></tr><tr><td>displayOn:</td><td>246, 249, 252, 253</td></tr><tr><td>do it</td><td>50</td></tr><tr><td>do:</td><td>59</td></tr><tr><td>do:</td><td>84, 96, 100</td></tr><tr><td>doesNotUnderstand:</td><td>64</td></tr></table>

E

<table><tr><td>Encapsulation</td><td>18, 19</td></tr><tr><td>error</td><td>15, 55, 67, 122</td></tr><tr><td>Exceptions</td><td>55, 123</td></tr></table>

F

<table><tr><td>false</td><td>45, 73</td></tr><tr><td>False</td><td>61, 73</td></tr><tr><td>file in</td><td>124</td></tr><tr><td>file out</td><td>123</td></tr><tr><td>Filename</td><td>112</td></tr><tr><td>FinancialManager</td><td>109, 116, 212, 243</td></tr><tr><td>Float</td><td>69</td></tr><tr><td>frameworks</td><td>171</td></tr><tr><td>Full Browser</td><td>51</td></tr><tr><td>Fusion</td><td>136</td></tr></table>

G

<table><tr><td>Garbage Collection</td><td>258</td></tr><tr><td>global variables</td><td>53, 72</td></tr></table>

H

<table><tr><td>halt</td><td>55, 123</td></tr><tr><td>hello World</td><td>61</td></tr><tr><td>hierarchy</td><td>18, 26</td></tr><tr><td>Hierarchy</td><td></td></tr><tr><td>is-a</td><td>26</td></tr><tr><td>part-of</td><td>26</td></tr><tr><td>HotDraw</td><td>174</td></tr><tr><td>BoxDraw</td><td>176</td></tr><tr><td>ftp</td><td>175</td></tr></table>

I

<table><tr><td>IdentityDictionary</td><td>99</td></tr><tr><td>IdentitySet</td><td>91</td></tr><tr><td>ifFalse</td><td>61</td></tr><tr><td>If-then expression</td><td>83</td></tr><tr><td>ifTrue</td><td>61</td></tr><tr><td>image</td><td>47, 57</td></tr><tr><td>inheritance</td><td>64</td></tr><tr><td>Inheritance</td><td>18, 20</td></tr><tr><td>testing</td><td>184</td></tr><tr><td>inject</td><td>101</td></tr><tr><td>inspect</td><td>53, 54</td></tr><tr><td>inspector</td><td>53, 54</td></tr><tr><td>Instance</td><td>25</td></tr><tr><td>Instance creation</td><td>65</td></tr><tr><td>Instance variable</td><td>25</td></tr><tr><td>instance variables</td><td>63</td></tr><tr><td>Instance variables</td><td></td></tr></table>

<table><tr><td>role</td><td>196</td></tr><tr><td>Instances</td><td>63</td></tr><tr><td>Interval</td><td>96</td></tr><tr><td>iterative</td><td>45</td></tr><tr><td>iterators</td><td>149</td></tr></table>

J

<table><tr><td>Java</td><td>17, 22, 167, 169, 182, 191, 279, 281</td></tr><tr><td>JigSaw</td><td>47</td></tr></table>

K

<table><tr><td>keys</td><td>98</td></tr><tr><td>keyword message</td><td>73</td></tr></table>

L

<table><tr><td>last</td><td>93</td></tr><tr><td>Launcher</td><td>49</td></tr><tr><td>List</td><td>96</td></tr><tr><td>sort</td><td>96</td></tr></table>

M

<table><tr><td>Magnitude</td><td>118</td></tr><tr><td>match:</td><td>99</td></tr><tr><td>Memory compaction</td><td>259</td></tr><tr><td>Memory management</td><td>257</td></tr><tr><td>Message</td><td>26, 51, 73</td></tr><tr><td>Message expressions</td><td>73</td></tr><tr><td>message passing mechanism</td><td>62</td></tr><tr><td>Message selector</td><td>74</td></tr><tr><td>Message types</td><td>73</td></tr><tr><td>Method</td><td>25</td></tr><tr><td>role</td><td>200</td></tr><tr><td>method definition</td><td>66</td></tr><tr><td>Model</td><td>46, 213, 214, 215</td></tr><tr><td>Model View Controller</td><td>46, 213, 214, 231</td></tr><tr><td>Multiple inheritance</td><td>21, 26</td></tr></table>

N

<table><tr><td>Netscape</td><td>281</td></tr><tr><td>nil</td><td>67, 73</td></tr><tr><td>Notifiers</td><td>54</td></tr><tr><td>Number</td><td>96</td></tr></table>

O

<table><tr><td>Object</td><td>16, 25, 45</td></tr><tr><td>History</td><td>17</td></tr><tr><td>hybrid</td><td>17</td></tr><tr><td>Terminology</td><td>25</td></tr><tr><td>Object Engine</td><td>48</td></tr><tr><td>Object Management Group</td><td>153, 281</td></tr><tr><td>Object Management Technique</td><td>182</td></tr><tr><td>Object model</td><td>135</td></tr><tr><td>Object Modeling Technique</td><td>133</td></tr><tr><td>Object Oriented Analysis</td><td>132</td></tr><tr><td>Object oriented Application Development Environments</td><td>280</td></tr><tr><td>Object oriented database</td><td>281</td></tr><tr><td>Object oriented design</td><td>131</td></tr><tr><td>Objectory</td><td>134</td></tr></table>
<table><tbody><tr><td>OLE</td><td>279</td></tr><tr><td>OMT</td><td>133</td></tr><tr><td>methodology</td><td>154</td></tr><tr><td>onChangeSend</td><td>232</td></tr><tr><td>OO CASE</td><td>280</td></tr><tr><td>OOA</td><td>132</td></tr><tr><td>OOD</td><td></td></tr><tr><td>Booch</td><td>132</td></tr><tr><td>Dynamic model</td><td>133</td></tr><tr><td>Functional model</td><td>134</td></tr><tr><td>Fusion</td><td>136</td></tr><tr><td>Object model</td><td>133</td></tr><tr><td>Objectory</td><td>134</td></tr><tr><td>OMT</td><td>133</td></tr><tr><td>OpenDoc</td><td>279</td></tr><tr><td>OrderedCollection</td><td>91</td></tr><tr><td>Organiser</td><td>104, 105, 109, 236</td></tr><tr><td>Overloading</td><td>23</td></tr><tr><td>Overriding</td><td>23</td></tr></tbody></table>

P

<table><tbody><tr><td>parameters</td><td>62, 73</td></tr><tr><td>PARC</td><td>45</td></tr><tr><td>ParcPlace</td><td>46</td></tr><tr><td>Parsing rules</td><td>75</td></tr><tr><td>Patterns</td><td>173</td></tr><tr><td>Perform</td><td>205</td></tr><tr><td>changed</td><td>210</td></tr><tr><td>update</td><td>210</td></tr><tr><td>perform:</td><td>205</td></tr><tr><td>Polymorphism</td><td>19, 22</td></tr><tr><td>precedence</td><td>73</td></tr><tr><td>print it</td><td>53</td></tr><tr><td>printString</td><td>50</td></tr><tr><td>Processes</td><td>262</td></tr><tr><td>priority</td><td>262</td></tr><tr><td>resume</td><td>262</td></tr><tr><td>suspend</td><td>262</td></tr><tr><td>ProcessorScheduler</td><td>262, 265</td></tr><tr><td>Project</td><td>126</td></tr><tr><td>changes</td><td>127</td></tr><tr><td>new</td><td>126</td></tr><tr><td>protocol</td><td>51</td></tr><tr><td>Protocol</td><td>203</td></tr><tr><td>Protocols</td><td></td></tr><tr><td>accessing protocol</td><td>107</td></tr><tr><td>initialize-release</td><td>105</td></tr><tr><td>instance creation</td><td>106</td></tr><tr><td>private-accessing</td><td>107</td></tr><tr><td>Pseudo variables</td><td>72</td></tr></tbody></table>

Q

<table><tbody><tr><td>Queue</td><td>93</td></tr></tbody></table>

R

<table><tbody><tr><td>receiver</td><td>54, 62, 73</td></tr><tr><td>reject</td><td>101</td></tr><tr><td>remove</td><td>89</td></tr><tr><td>removeLast</td><td>93, 96</td></tr></tbody></table>

<table><tbody><tr><td>removeDependent</td><td>208</td></tr><tr><td>removeFirst</td><td>93</td></tr><tr><td>reuse</td><td>19, 29, 61</td></tr><tr><td>Reuse</td><td></td></tr><tr><td>visual</td><td>233</td></tr><tr><td>Run time errors</td><td>55, 122</td></tr></tbody></table>

S

<table><tbody><tr><td>select</td><td>100</td></tr><tr><td>self</td><td>26, 39, 72</td></tr><tr><td>Semaphore</td><td>263</td></tr><tr><td>sender</td><td>62</td></tr><tr><td>Set</td><td>90</td></tr><tr><td>SharedQueue</td><td>263</td></tr><tr><td>show</td><td>50</td></tr><tr><td>Single inheritance</td><td>26</td></tr><tr><td>SmallDraw</td><td>244</td></tr><tr><td>Smalltalk</td><td>44</td></tr><tr><td>future</td><td>278</td></tr><tr><td>VisualWave</td><td>281</td></tr><tr><td>Smalltalk-80</td><td>46</td></tr><tr><td>Software crisis</td><td>15, 28</td></tr><tr><td>Sort Block</td><td>95</td></tr><tr><td>SortedCollection</td><td>95</td></tr><tr><td>sources</td><td>48</td></tr><tr><td>Spiral life cycle model</td><td>131</td></tr><tr><td>Stack</td><td>92</td></tr><tr><td>Statecharts</td><td>133, 150</td></tr><tr><td>Streams</td><td></td></tr><tr><td>ReadStream</td><td>111</td></tr><tr><td>WriteStream</td><td>111</td></tr><tr><td>String</td><td>61, 70, 99</td></tr><tr><td>string conversion</td><td>99</td></tr><tr><td>Strings</td><td></td></tr><tr><td>pattern matching</td><td>99</td></tr><tr><td>sameAs</td><td>99</td></tr><tr><td>Style</td><td>195</td></tr><tr><td>subclass</td><td>19, 20, 21, 25</td></tr><tr><td>Subclass responsibility</td><td>22</td></tr><tr><td>subclassResponsibility</td><td>56, 254</td></tr><tr><td>super</td><td>64, 72</td></tr><tr><td>Superclass</td><td>25</td></tr><tr><td>System Browser</td><td>50, 51</td></tr></tbody></table>

T

<table><tbody><tr><td>temporary variables</td><td>56, 72</td></tr><tr><td>Testing</td><td>182</td></tr><tr><td>Encapsulation</td><td>185</td></tr><tr><td>halt message</td><td>186</td></tr><tr><td>Incremental testing</td><td>185</td></tr><tr><td>methods</td><td>190</td></tr><tr><td>object state</td><td>191</td></tr><tr><td>perform</td><td>189</td></tr><tr><td>Polymorphism</td><td>187</td></tr><tr><td>Text</td><td>241</td></tr><tr><td>Time</td><td>73, 119, 120</td></tr><tr><td>timesRepeat</td><td>84</td></tr><tr><td>Transcript</td><td>49, 50</td></tr><tr><td>true</td><td>45, 73</td></tr></tbody></table>
True.................................................. 61, 73

U

UML .................................................. 147
State diagrams.................................... 150
unary .................................................. 73
Unified Modeling Language .................. 131, 147
update:............................................ 217, 253
updating ............................................ 79
Use case model .................................... 135
User Interface Builder.......................... 223
  Canvas............................................ 225
  Canvas tool...................................... 225
  Definer ............................................ 229
  Palette .......................................... 225

V

ValueHolder.................................. 223, 231, 232
valueNowOrOnUnwindDo.................. 114, 115
values............................................ 98
Variables........................................... 71
View............................................ 46, 213, 214, 215, 216

Views
  subviews........................................ 220
Virtual Machine.................................... 47
VisualWorks.................................... 44, 46, 47
  memory management.......................... 258

W

while loop............................................ 85
whileFalse:........................................ 85
whileFalse:........................................ 84
whileTrue:............................................ 85
whileTrue:............................................ 84
Workspaces........................................ 53
World wide web .................................... 281

X

X3J20.................................................. 278

Y

yourself............................................ 197
Yo-Yo problem .................................... 65