Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Programming Smalltalk – Object-Orientation from the Beginnin
Nội dung xem thử
Mô tả chi tiết
Programming Smalltalk –
Object-Orientation from
the Beginning
Johannes Brauer
An introduction to the principles
of programming
Johannes Brauer
Programming Smalltalk –
Object-Orientation
from the Beginning
An introduction to the principles
of programming
Johannes Brauer
NORDAKADEMIE, Hochschule der Wirtschaft
Elmshorn, Germany
1st English edition (based on the 4th revised and expanded German original)
The translation and production of this book was sponsored by Cincom Systems.
ISBN 978-3-658-06822-6 ISBN 978-3-658-06823-3 (eBook)
DOI 10.1007/978-3-658-06823-3
Library of Congress Control Number: 2015931398
Springer Vieweg
© Springer Fachmedien Wiesbaden 2015
This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation, broadcasting,
reproduction on microfilms or in any other physical way, and transmission or information storage and retrieval,
electronic adaptation, computer software, or by similar or dissimilar methodology now known or hereafter developed.
The use of general descriptive names, registered names, trademarks, service marks, etc. in this publication does
not imply, even in the absence of a specific statement, that such names are exempt from the relevant protective
laws and regulations and therefore free for general use.
The publisher, the authors and the editors are safe to assume that the advice and information in this book are
believed to be true and accurate at the date of publication. Neither the publisher nor the authors or the editors
give a warranty, express or implied, with respect to the material contained herein or for any errors or omissions
that may have been made.
Printed on acid-free paper
Springer Fachmedien Wiesbaden GmbH is part of Springer Science+Business Media (www.springer.com)
Foreword
Smalltalk is an outstanding technology. It has been in the forefront of many innovations
that have helped to advance the art of application software development such as GUIs
with overlapping windows, the mouse, handheld devices, web applications, object-oriented
programming, test-driven development and extreme programming, just to name a few.
Smalltalk was at the core of a revolution to enable true personal computing. This revolution would eventually lead to the creation of a generic device that would allow people to
help solve their problems back in the late 1960s and 1970s, an era that knew only large
centralised data centres.
During this same timeframe, in 1968, Cincom Systems was founded with then revolutionary ideas of simplifying the complexity associated with developing business. We saw
that Smalltalk was the next evolution in application development, and that we share the
same philosophy with Smalltalk: to bring value to users by providing simple, yet powerful solutions. Consequently, we bought into this technology in the mid-1990s and have
continued to invest in it ever since.
Advanced application technology is nothing without advanced users. Cincom is convinced that good education is the foundation for a better future. To support this on a
worldwide basis, we established the Cincom Smalltalk Academic Program that allows
academic institutions to use Cincom Smalltalk as part of a teaching curriculum free of
charge. One such institution is the German university “NORDAKADEMIE” where Professor Brauer teaches his students—in a practice-oriented way—how to write software.
Professor Brauer had developed his own introductory course to object-oriented programming using Cincom Smalltalk, and he made the course publicly available through his German textbook “Grundkurs Smalltalk—Objektorientierung von Anfang an”.
It was an honour for us to support Professor Brauer with the translation of his book to
English. Now his excellent course is available to students and teachers all over the world,
nicely complementing the Cincom Smalltalk Academic Program.
We wish all readers a lot of fun and success with Smalltalk!
Brian L. Bish, Managing Director, Cincom Smalltalk
v
Preface
The origins of this book lie in supplementary material for a basic programming course
that is offered in the first two semesters of the commercial IT course of study at the NORDAKADEMIE Business School. Since the winter semester of 1999/2000, object-oriented
programming has been taught using the Smalltalk programming language. It was always
difficult to decide which text books to assign to students, because the many books that were
available to teach object-oriented programming in general and Smalltalk in particular often
presupposed at the very least programming knowledge in a non-object-oriented programming language. Even though the number of beginning students who have such knowledge
continues to increase, it’s not something that one can generally assume to be true. In fact,
when the first edition of this book appeared, texts for beginning programming students
generally did not teach object-oriented programming. In the meantime, even though the
“Objects-First” approach has become increasingly common, it’s still relatively rare to encounter Smalltalk as a first programming language. For that reason, this book continues to
fill a gap. It is intended not just for IT students, but for anyone who seeks a fundamental
entry point for programming, especially object-oriented programming. For example, it can
also be used for advanced IT courses in the later grades of secondary schools.
Choosing Smalltalk is important above all for pedagogical reasons. Smalltalk is a simple, strictly object-oriented language that practically forces one to think in an objectoriented way. In addition, almost all students can be said to suffer the same disadvantage,
that of not knowing this language, which somewhat reduces the problems caused by the
different levels of initial knowledge among the students. And furthermore, a variety of
free development environments are available, which students can easily install on their
own computers.
With regard to its use in the real world of industry, Smalltalk is certainly not as important as, say, Java. On the other hand, so-called dynamic languages like Python and Ruby,
which adapted many of their ideas from Smalltalk, are enjoying increasing popularity and
wider distribution. Smalltalk is becoming increasingly important as an introductory programming language for children in elementary schools. In this context, one can mention
vii
viii Preface
the Etoys and Scratch projects that have both been implemented in the Smalltalk dialect
Squeak. Squeak runs on nearly all available operating systems as well as on the OLPC1
XO computers (“$100 laptops”).
This book, however, is not a programming-language course in a narrow sense. Above
all, it should not be treated as a complete presentation of the extensive Smalltalk class
library. For that, one must consult the relevant documentation for the development environment being used. Nevertheless, it’s also necessary to treat the basic concepts of a
development environment, since Smalltalk programming always occurs within one. For
beginners in particular, this can be an additional impediment. Stated somewhat simply, it
used to be enough to be able to use a text editor and a compiler; now, besides learning
the basics of programming, a student must also learn technical skills for dealing with a
complex development environment.
An introduction to programming must also include fundamental knowledge of how to
construct algorithms—a theme that is usually not dealt with in connection with object orientation. This is necessary because it is only through concerning oneself with the elementary problems of programming that one can develop an understanding for how computers
work.
The first chapter teaches readers enough basic concepts of computer science so that they
can begin to learn programming. Then, in the second chapter, a simple example provides
an initial introduction to the basic construction of algorithms and how to construct them
in a specific programming language (in this case, Smalltalk). Later chapters bring up the
topic of constructing algorithms again and again.
While Chap. 2 ignores typical object-orientation concepts, they form the main topic of
Chap. 3. At the same time, the chapter also introduces the basic elements of the Smalltalk
programming language.
Chapter 4 deals with programming repetitions (“loops”), once again in the context of
algorithms. In addition, important methods available in the Smalltalk language for using
loops are described.
In order to make it easier for readers to perform practical exercises and to understand
the examples provided in the text, Chap. 5 provides instructions for using the VisualWorks
development environment, which is used for the programming examples shown in this
book.
Chapters 6, 7 and 8 centre on classes, which are the central concept of object orientation.
The components of a class definition in Smalltalk are given first, followed by a description
of how to create new classes. This is followed by a description of important basic classes
in a Smalltalk class library. This leads to the introduction of additional basic concepts of
object orientation, such as inheritance and polymorphism.
An entire Chap. 10 is devoted to collection classes, because of their complexity and
importance.
1OLPC means One Laptop per Child.
Preface ix
First though, Chap. 9 summarises information that was already presented in earlier
chapters dealing with error messages in the compiler and the runtime system. If—as is
likely the case—readers have been confronted with error messages as they reviewed examples in earlier chapters or attempted their own exercises, it might be helpful to read this
chapter earlier than its position in this text.
Chapter 11 takes up in a systematic fashion important aspects of object-oriented programming with Smalltalk, some of which, such as blocks and inheritance, already appeared in earlier chapters.
Chapter 12 picks up the principle of recursion, an important aspect of algorithms that
cannot be omitted from an introduction to programming.
Chapter 13 deals briefly with processing sequential internal and external streams. It also
explains how to access files from Smalltalk programs.
Although space considerations prevent discussion in this book of the development of
larger Smalltalk applications, Chap. 14 nevertheless provides a few elementary instructions for how to structure programs. Chapter 17 provides suggestions for sources for this
and other topics. The author’s website (https://brauer.nordakademie.de) also contains additional information to accompany this book.
Before that, though, Chap. 15 deals with writing component tests and their automatic
execution.
The book does not attempt to contrast traditional, procedural development practice with
object orientation. Readers who already have programming experience in procedural programming languages are advised to look at literature concerning the Oberon 2 programming language. Reiser and Wirth (1994), for example, provide an excellent description of
the transition from imperative to object-oriented programming.
It is important to emphasize once again that no previous knowledge of programming is
necessary for successfully working one’s way through this book. It is nevertheless assumed
that readers have basic skills in working with a windows-based operating system, such as
Microsoft Windows or the Apple Mac OS.
A Comment on Notation
Programming text, to the extent that it is not shown as screen captures, appears as a
monospace font. The same is true for various Smalltalk concepts, such as class or
method names.
Names of menus and menu contents are shown in boldface type.
The Development Environment
The Smalltalk system VisualWorks was used to create the examples in this book. This is
a commonly used, professional Smalltalk development environment distributed by Cincom Systems. A fully functional instructional version that runs on many platforms can be
downloaded from Cincom’s website, www.cincomsmalltalk.com. Although it is not essential, it will prove very helpful to readers to have access to this system. Screen captures in
this book were taken from Version 7.6 of VisualWorks.
x Preface
Acknowledgements
First of all, I want to thank the publishing company and especially Dr. Klockenbusch,
whose engagement is responsible for the appearance of the first edition of this Smalltalk
book at a time when the whole world was talking only of a programming language whose
name bears a resemblance to coffee. I owe thanks to Sybille Thelen for her support in the
publication of this third edition.
I want to thank the employees of the Georg Heeg Company for their critical review of
the first draft of this book and for several valuable corrections, suggestions and improvements. I also want to thank my former colleague at the NORDAKADEMIE, Professor
Kleuker. Katrin Schimmeyer and Helmut Guttenberg helped me greatly in my struggles
toward an orthographically and syntactically correct text. I want to thank Jan Bartelsen for
reviewing the third edition.
Elmshorn Johannes Brauer
August 2008
Addendum to the Preface for the Fourth Edition
For this fourth edition, various small changes and corrections were made throughout the
text. In addition, the numerous screen captures for the VisualWorks development environment were updated. For this, I want to thank Cincom Systems, which made Version 7.10
available to me before its release. For her support in this, I want especially to thank Yvonne
Schickel.
The most significant improvement, however, is Chap. 16, which deals with an introduction to the development of Web applications in Smalltalk using the framework system,
Seaside. The motivation for this chapter rests not least in the fact that the bachelor’s degree program for computer science at NORDAKADEMIE is now called “object-oriented
development of Web applications.”
For reviewing this material and for their valuable suggestions, I am especially grateful
to the following people: Stefanie Jasser, Joachim Sauer, Heiko Rehder, Daniel Purrucker
and Carsten Becke.
I also wish to thank Bernd Hansemann of Springer Vieweg for his support in the publication of this fourth edition.
Elmshorn Johannes Brauer
September 2013
xi
Addendum to the Preface for the First English
Edition
George Schober from Cincom Systems translated the original text in just a few months.
He did an excellent job, and I am very grateful to him.
The numerous screen captures for the VisualWorks development environment were updated again, and for this, I want to thank Cincom Systems who made Version 8.0 available
to me prior to its release.
The whole translation project was managed by Yvonne Schickel from Cincom Systems
in a proficient and efficient manner. Without her, there would be no English edition. I am
deeply grateful to her. Additionally, it’s thanks to her, that the book could be extended by
Chap. 18, containing ten reports about Smalltalk applications in industry.
I also wish to thank Sybille Thelen and Bernd Hansemann of Springer Vieweg for their
support in the publication of this English edition.
Elmshorn Johannes Brauer
October 2014
xiii
Contents
1 Basic Concepts of Computer Science .................... 1
2 Designing Algorithms ............................ 7
2.1 Case Study: Currency Conversion ................... 7
2.2 The First Smalltalk Program ...................... 8
2.2.1 Entering Program Text . . . . . . . . . . . . . . . . . . . . . 10
2.2.2 Executing Programs . . . . . . . . . . . . . . . . . . . . . . 11
2.2.3 Adding Flexibility to the Currency Conversion ........ 14
2.3 Case Study: Solving a Quadratic Equation .............. 16
2.3.1 The Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3.2 The Program . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.3.3 Generalising the Solving of Quadratic Equations . . . .... 20
2.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3 Basics of Object-Oriented Programming Using Smalltalk ........ 31
3.1 Objects, Messages, Methods ...................... 32
3.1.1 Messages ............................ 36
3.1.2 Case-by-Case Distinctions . . . . . . . . . . . . . . . . . . . 39
3.1.3 Blocks ............................. 40
3.1.4 Creating Objects—Classes . . . . . . . . . . . . . . . . . . . 40
3.2 Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.3 Variables and Assignments . . . . . . . . . . . . . . . . . . . . . . . 49
3.4 Assignment Semantics . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.4.1 Using Object Explorer . . . . . . . . . . . . . . . . . . . . . 56
4 Repetitions .................................. 59
4.1 Searching for a Maximum Value .................... 60
4.2 Additional Smalltalk Messages for Loops . .............. 73
4.2.1 Count Loops . . ........................ 73
xv
xvi Contents
4.2.2 Interval Run . . . . . . . . . . . . . . . . . . . . . . . . . . 74
4.2.3 Collection Run . . . . . . . . . . . . . . . . . . . . . . . . . 75
5 The VisualWorks Development Environment ............... 77
5.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.2 Starting the Development Environment . . . . . . . . . . . . . . . . 79
5.3 Launcher with Transcript ........................ 80
5.3.1 Creating One’s Own Image . . . . . . . . . . . . . . . . . . 80
5.3.2 Setting System Parameters ................... 81
5.3.3 Using Transcript . . . . . . . . . . . . . . . . . . . . . . . . 83
5.4 Workspace ............................... 85
5.5 Inspector ................................ 86
5.6 The Debugger ............................. 88
5.7 System Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
6 Examining a Sample Class: Circle ..................... 97
6.1 Class Hierarchies and Inheritance ................... 97
6.2 Implementing Methods . ........................ 101
6.3 Alternative Implementation of the Class Circle . . . . . . . . . . . . 108
7 Defining New Classes ............................. 113
7.1 Case Study: Currency Conversion ................... 114
7.1.1 Creating a New Class . . . . . . . . . . . . . . . . . . . . . 115
7.1.2 Individualised Class Methods for Creating Instances . .... 121
7.1.3 Defining Instance Methods ................... 124
7.1.4 Expanding the Converter .................... 128
7.2 Case Study: Cinemas . . ........................ 130
7.2.1 Analysis of the Problem Description . . . . . . . . . . . . . 130
7.2.2 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . 133
7.3 Defining Class Variables ........................ 139
8 Class Hierarchies—Inheritance—Polymorphism ............. 143
8.1 The Smalltalk Class Hierarchy ..................... 144
8.1.1 Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
8.1.2 Smalltalk’s Number Concept . . . .............. 145
8.1.3 The Integer Classes . . . . . . . . . . . . . . . . . . . . . . 150
8.1.4 The Classes Float, Double and Fraction ............ 156
8.1.5 Methods Common to All Number Classes ........... 157
8.1.6 Mixed Expressions . . . . . . . . . . . . . . . . . . . . . . . 161
8.1.7 Truth Values . . . . . . . . . . . . . . . . . . . . . . . . . . 163
8.1.8 Characters and Character Strings . . . . . . . . . . . . . . . 166
8.1.9 Date and Time . . . . . . . . . . . . . . . . . . . . . . . . . 171
8.2 Abstract and Concrete Classes ..................... 174
8.3 Generic Methods ............................ 177
Contents xvii
8.4 Polymorphism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
8.5 Case Study: Quadratic Equations ................... 180
8.5.1 The Class QuadrEquat ................... 182
8.5.2 Classes for Solution Objects . . . . . . . . . . . . . . . . . . 185
8.5.3 The Solution Methods ..................... 189
8.5.4 Examples of Applications . . . . . . . . . . . . . . . . . . . 191
8.5.5 Use of Inheritance and Polymorphism ............. 193
8.5.6 Test Programs as Class Methods . . .............. 193
8.5.7 Error Management ....................... 195
9 Debugging Smalltalk Programs ....................... 199
9.1 Syntax Errors .............................. 199
9.2 Unknown Variables . . . ........................ 200
9.3 Unknown Message Selectors ...................... 201
9.4 Exceptions ............................... 202
9.5 Debugging Methods . . ........................ 203
10 Containers ................................... 211
10.1 Unordered Collections . . . . . . . . . . . . . . . . . . . . . . . . . 213
10.1.1 The Class Set ......................... 213
10.1.2 The Class Bag ......................... 216
10.1.3 The Class Dictionary ................... 217
10.2 Ordered Collections . . . . . . . . . . . . . . . . . . . . . . . . . . 223
10.2.1 The Class Array ....................... 226
10.2.2 The Class OrderedCollection .............. 227
10.2.3 The Class SortedCollection ............... 230
10.2.4 The Class Interval ..................... 232
10.2.5 The Class String ....................... 234
10.2.6 The Class Symbol ....................... 234
10.3 Transforming Collections . . . . . . . . . . . . . . . . . . . . . . . 234
10.4 Case Study: Cinemas . . ........................ 235
10.4.1 Assignment: Display all Cinemas in Transcript . . . . . . . . 236
10.4.2 Assignment: Display the Profits of a Specific Cinema .... 243
10.4.3 Assignment: Display all Cinemas Arranged by Size . .... 246
11 Additional Smalltalk Basics ......................... 249
11.1 Blocks ................................. 249
11.1.1 Blocks as Objects ....................... 249
11.1.2 Blocks with Parameters .................... 251
11.1.3 Applications . . . . . . . . . . . . . . . . . . . . . . . . . . 253
11.1.4 Case Study of a Finite-State Automaton . . . . . . . . . . . . 255
11.2 Inheritance—Method Search ...................... 264
11.2.1 Rules for the Method Search .................. 267
11.2.2 The Meaning of the Pseudo-variables self and super ... 267
xviii Contents
11.3 Metaclasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
11.4 Object Identity ............................. 272
11.4.1 Equality Versus Identity .................... 273
11.4.2 Equality of Objects of Self-Defined Classes .......... 277
11.4.3 Object Copies . . . . . . . . . . . . . . . . . . . . . . . . . 279
12 Algorithmic Excursus: Recursion ...................... 285
12.1 Recursive Algorithms . ........................ 286
12.2 Correctness of Recursive Algorithms . . . .............. 293
12.3 Recursive Thinking . . . ........................ 295
12.4 Infinite Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
13 Streams and Files ............................... 299
13.1 Sequential Access to Ordered Collections . .............. 300
13.2 Sequential Access to Files ....................... 303
14 Structure of Smalltalk Programs ...................... 307
14.1 Standard Method Protocols ...................... 308
14.2 The printOn: Framework . . . . . . . . . . . . . . . . . . . . . . 311
14.3 Transferring Partial Algorithms to Independent Methods . . . .... 315
14.4 User Interfaces—The Model-View-Controller Paradigm . . . .... 321
14.5 Relationships Among Classes . . . . . . . . . . . . . . . . . . . . . 324
14.5.1 Inheritance . . . ........................ 324
14.5.2 Association . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
14.5.3 Aggregation . . . . . . . . . . . . . . . . . . . . . . . . . . 329
15 Systematic Testing .............................. 333
15.1 Component Tests ............................ 334
15.2 Test Automation Using the SUnit . . . . . . . . . . . . . . . . . . . 335
15.2.1 Test Case: Cinemas . . . . . . . . . . . . . . . . . . . . . . 335
15.2.2 Additional TestCase Messages . .............. 339
15.2.3 An Additional Test for the Class Expenses ......... 340
15.3 Test-Driven Development . . . . . . . . . . . . . . . . . . . . . . . 341
16 Developing Web Applications ........................ 343
16.1 Case Study: Currency Converter .................... 344
16.1.1 Objective . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
16.1.2 The Model for the Currency Converter ............ 346
16.1.3 A First Glance at Seaside ................... 349
16.1.4 Realising the Web Interface . . . . . . . . . . . . . . . . . . 350
16.1.5 Implementing the Functionality . . .............. 363
16.1.6 Shortcomings in the First Version . .............. 366
16.1.7 Refactoring the Method renderFormOn: .......... 366
16.2 Improving the Usability of the Currency Converter .......... 368
16.2.1 Selection Lists in Seaside ................... 370