Home | Book Information | Third Edition Guide

Third Edition Guide

This document is intended to help those familiar with the second edition of Java Software Solutions understand the changes that were made to create the third edition. If you are new to the book in general, you may want to begin with an overview and a scan of the Table of Contents.

In preparing for the third edition of the book, we had many discussions with instructors using the book to find out what they liked and what they didn't like about the second edition. Addison-Wesley executed a sweeping user survey with this goal as well. We want to thank everyone who provided feedback in any form. Our goal is ongoing improvement.

After carefully reviewing your input, our overall philosophy became "don't fix it if it isn't broke." Your feedback made it very clear that you liked the overall flow of topics in the book, the tone of the writing, the nature of the examples, the use of the Keyboard class, and the issues covered. Thus, our changes did not affect these key areas much.

We begin this document with a discussion of the general changes that affect the whole book, as well as the few significant topic modifications. The remainder of this document details the changes made to individual chapters and the appendices. Page references are from the third edition. You can jump to a particular chapter with the following links.

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Appendices


General Changes

The following general changes were made for the third edition:

The book is now published in full color. This is one of the first CS1 textbooks to do this. We made sure to use color to a pedagogical advantage. One aspect of this is the syntax coloring of the source code. We made sure to avoid the "alphabet soup" coloring schemes you sometimes see and kept things fairly simple: comments in green, reserved words in blue, the rest in black. Reserved words are in blue in the regular flow of the text as well.
We've added examples throughout the book. These include some additional full listing programs as well as many more code fragments interspersed among the discussions.
We performed a sweeping review of all of the writing to create improved topic discussions throughout the book, even in areas where significant changes were not made.
Another important change was the increased and improved end-of-chapter problem sets. There was over a 56% increase in self-review questions, exercises, and programming projects. The problem set revision details provides a numeric chapter by chapter breakdown.
The book now covers UML diagrams and uses them to illustrate program designs. We focus on class and object diagrams, specifically avoiding getting bogged down in the plethora of detail in the UML world, much of which is not relevant to CS1 students.
The most significant topic revision for the third edition is the modified and additional coverage of GUIs. The graphics track sections in Chapters 5 through 9 were completely overhauled to present a far more intuitive, comprehensive coverage of topics related to the development of Grahical User Interfaces.
The details underlying the Keyboard class are now covered earlier (Chapter 5). The book examples still use the Keyboard class throughout, which simplifies the code and offers a wonderful example of abstraction. But now the unadorned Java I/O issues can be explored earlier if desired.
The topic of object serialization, briefly introduced in the second edition, is discussed in far more detail now, with examples.
         
Chapter 1 - Computing Systems

Chapter 1 remains an overview of computing systems including hardware, networks, and the Web. These issues establish some important groundwork and terminology, but could be skimmed, skipped, or left for reading as desired. The introduction to programming languages in this chapter, however, is fundamental to the rest of the book.

Some specific changes made in Chapter 1 include:

The hardware specification in Figure 1.8 was updated. (p. 11)
A discussion of CD and DVD technologies was added. (p. 16-17)
The list of Java reserved words in Figure 1.19 was updated. Several that were held in reserve are no longer, and strictfp was added. (p. 35)
The editing-translating-executing process is explained in more detail. (p. 41-42)
An overview of the Java 2 Platform editions (standard, enterprise, and micro) was added. (p. 46)
      
Chapter 2 - Objects and Primitive Data

Chapter 2 discusses basic issues related to the management and use of objects and data. Now the discussions stress object-speak even more, making sure even simple examples are discussed with respect to an object-oriented approach.

Some specific changes made in Chapter 2 include:

A brief overview of OO issues (classes, objects, and inheritance) was added to the beginning of the chapter to establish some terminology. (p. 62-63)
Specific examples of primitive type declarations were added. (p. 78-80)
The syntax diagram of the import statement now indicates that the package name is required. As of version 1.4, classes cannot be imported from the "unnamed name space."
The random number generation examples now rely largely on the nextInt(n) method of the Random class. The emphasis is therefore shifted away from scaling the random results. (p. 95-98)
The quadratic formula is presented in equation form to help explain the Quadratic program example. (p. 102)
      
Chapter 3 - Program Statements

Chapter 3 explores key programming statements, mainly conditionals and loops, and introduces the need for a careful development process. The statements covered in this chapter allow the classes written in the Chapter 4 to be realistic and comprehensive.

Some specific changes made in Chapter 3 include:

The stages of program development are now presented at the beginning of the chapter to set the stage. (p. 130-132) The ExamGrades example that formally follows these stages is still presented toward the end of the chapter.
Many additional code fragment examples are included in the discussions of conditionals and loops throughout the chapter.
In the discussion of the switch statement, we clarified that only int and char types are valid for the switch expression (p. 145)
The details of comparing characters and strings (lexicographic ordering) are now explained in more detail. (p. 151-152)
The issues related to the palindrome testing example have been refined. (p. 166-169)
The StringTokenizer class is now introduced in Chapter 3 (in the second edition it was somewhat buried in Chapter 4). The class is presented with a new example, stressing its natural relationship to loop processing. (p. 169-173)
In the three applets presented at the end of the chapter, the constants were moved into the paint method because declaring class level data is not covered until Chapter 4. (p. 188-195)
      
Chapter 4 - Writing Classes

Chapter 4 remains an introduction to writing programs with multiple classes and methods. Note that we never present a program that consists of a single class with multiple methods (which would be a purely procedural approach). Once a program design is worthy of multiple methods, it is worthy of multiple classes. This philosophy was evident in the second edition, and has not changed.

Some specific changes made in Chapter 4 include:

Import statements that import a single class from the default package, such as 'import Coin', were removed from all examples in the book. As of version 1.4, classes cannot be imported from the "unnamed name space."
The option of having multiple classes in one file, with one public class, is now discussed (p. 215)
A discussion of the automatic initialization of variables declared at the class level was added. (p. 218)
An introduction to UML diagrams was added (p. 218-220). UML diagrams are used from here on to illustrate program designs, and some are left as exercises.
Figure 4.7 was added to drive home the purpose of visiblity modifiers on both variables and methods. (p. 222)
The section called Object Relationships was moved after the sections Method Overloading and Method Decomposition.
The introduction to the StringTokenizer class that used to be part of the Method Decomposition section (p. 235) was moved to Chapter 3.
The proper term for character combinations such as 'th' and 'cr' is consonant blend. The discussion and code of the Pig Latin example were changed accordingly. (p. 235-242)
The list of consonant blends processed by the PigLatinTranslator class were refined. (p. 241)
The section on Object Relationships was refined and an example for the aggregation relationship was added. (p. 243-254)
      
Chapter 5 - Enhancing Classes

Chapter 5 remains a collection of issues related to the design of classes. It is not nearly as linear as other chapters, and therefore you have even more freedom to pick the topics of interest.

Some specific changes made in Chapter 5 include:

The discussions of the null and this references were expanded (p. 270-272)
The program example of static methods and variables was made a bit more interesting (p. 284-285)
A discussion of wrapper classes was added (p. 283-287)
A section discussing the inner workings of the Keyboard class was added to provide an earlier introduction to Java I/O issues. An example presenting a non-Keyboard version of the Wages program from Chapter 3 is presented. (p. 287-290)
An example demonstrating the access issues related to inner classes was added (p. 291-293)
The second edition example demonstrating interface declaration and use was replaced with one that is more realistic. (p. 294-298)
The discussion of polymorphism via interfaces is now deferred to Chapter 7 where it can be compared and contrasted with polymorphism via inheritance.
A section describing dialog boxes and their use was added. (p. 301-303)
The second edition graphics track coverage in Chapter 5 was replaced by a more natural introduction into GUI development. Mouse and key events are deferred until later chapters. Chapter 5 now covers push buttons, text fields, and action listeners.
The coverage of animations is now deferred to Chapter 8.
      
Chapter 6 - Arrays

Chapter 6 remains an introduction to arrays and array processing.

Some specific changes made in Chapter 6 include:

The second edition program example called ReverseNumbers is now called ReverseOrder to distinguish it from the Chapter 3 example called ReverseNumber. (p. 324-325)
The name of the second edition section called 'Creating Object-Array Elements' was changed to the more intuitive 'Filling Arrays of Objects.' (p. 333)
The CDCollection class now uses collection.length instead of a separate integer variable. (p. 337-338)
The discussion of the Vector class was replaced by a discussion of the ArrayList class. (p. 355-358)
A section describing check boxes and radio buttons was added. The Quotes example from Chapter 9 of the second edition was simplifed and separated into two programs, which are now presented here. (p. 363-371)
      
Chapter 7 - Inheritance

Chapter 7 is an overview of inheritance and related issues. As a primary concept in the object-oriented paradigm, we wanted to make sure this chapter retained its status and thereforeresisted suggestions to push it further back in the book.

Some specific changes made in Chapter 7 include:

UML diagrams that depict inheritance relationships and abstract classes and methods are presented throughout the chapter.
The coverage of indirect use of class members was moved before the discussion of polymorphism. (p. 402-406)
The book's discussion of polymorphism is now collected here rather than being split between Chapters 5 and 7.
The new (UML) diagram in Figure 7.8 for the Firm example shows abstract classes and methods, overriding, and the infrastructure that supports polymorphism. (p. 409)
The graphics track sections were reworked. (p. 422-438) Mouse events are now covered in this chapter.
      
Chapter 8 - Exceptions and I/O Streams

Chapter 8 continues to cover two somewhat related topics, exceptions and I/O. The discussions of these issues benefit from being covered after inheritance has been established, though it isn't absolutely necessary.

Some specific changes made in Chapter 8 include:

The syntax diagram for the try statement was modified to reflect the need for exactly one "parameter" in a catch clause.
The discussion of the Keyboard class was modified to reflect the earlier discussion that now occurs in Chapter 5. (p. 465-466)
The discussion of object serialization was augmented significantly, including two new full program examples. (p. 747-480)
A new graphics track section was added covering file choosers, color choosers, image icons, and key events. These discussions include severl new and revised examples. (p. 480-494)
The discussion of animations, which was covered in Chapter 5 in the second edition, was moved here. (p. 494-499)
      
Chapter 9 - Graphical User Interfaces

Chapter 9 was the single most modified chapter in the third edition. Given the revised coverage of GUI issues in the graphics track sections of previous chapters, and our desire to add a large amount of material on this topic, this chapter required a significant overhaul.

Some specific changes made in Chapter 9 include:

We added a review of the GUI issues covered thus far in earlier chapters. (p. 508-509)
The discussion of general GUI design was brought to the front of this chapter. (p. 509-510)
Layout managers are demonstrated with a new example. The discussion of specific layout managers now includes flow, border, grid, and box layouts. (p. 510-526)
The discussion of GUI containment hierarchies has been augmented and includes a visual example. (p. 526-528)
The coverage of various special features has been expanded, including two new full program examples. (p. 528-539)
A new section on additional components was added, including coverage of scroll panes, split panes, lists, combo boxes, and sliders. Three new full program examples are included in this section, plus a revised version of the Java Jukebox example from the second edition. (p. 539-559)
A section providing an overview of events has been added, including a chart mapping components to the events they generate.
A final section describing some additional GUI components and issues was added, prompting readers to continue there pursuit of this huge area.
      
Chapter 10 - Software Engineering

Chapter 10 remains an overview of software engineering issues with an emphasis on development process models. A major part of this chapter is the use of an evolutionary design model to develop a much larger project than they otherwise see in the book -- the PaintBox project. Most of the changes in this chapter reflect a new version of the PaintBox software. The code for two refinements of this project are available for anyone to download. The remaining refinements, which are assigned as Programming Projects, are available only to instructors.

Some specific changes made in Chapter 10 include:

The section discussing testing was moved before the section on prototypes. (p. 576-579)
The discussoin of the PaintBox project was generally revised to reflect the new version of the software. (p. 586-597)
Figure 10.9 was added to provide a fairly specific description of the scope for each of the seven identified refinements for the PaintBox project. (p. 591)
New (UML) diagrams in Figures 10.10 (p. 592) and 10.12 (p. 595) help illustrate design decisions in the PaintBox project.
Screen shots of the PaintBox program demonstrate its functionality after refinement #1 (p. 593), refinement #2 (p. 596), and refinement #7 (p. 597).
      
Chapter 11 - Recursion

Chapter 11 remains an introduction to recursive thinking and programming. Very few changes were made to this chapter.

Some specific changes made in Chapter 11 include:

The example called MirroredPictures in the second edition is now called TiledPictures in the third. This was done in an effort to better describe the visual effect that the program creates. (p. 621-623)
      
Chapter 12 - Data Structures

Chapter 12 is an introduction to the world of data structures and their representations. This chapter is not intended to serve as a comprehensive discussion of this very large topic, but rather provide a glimpse into issues that someone pursuing the study of computing and programming further will likely encounter.

Some specific changes made in Chapter 12 include:

The domain of the library books example was changed to a magazine rack to distinguish it from the book example used in Chapter 7. (p. 641-644)
A brief introduction to trees and graphs was added to the section on classic data structures. (p. 650-653)
      
Appendices

The appendices are designed to make the book a valuable reference as well as a pedagogical tool. The set of appendices (their order and general content) stayed the same from the second to third editions.

Some specific changes made in the Appendices include:

The Glossary entries were updated and augmented. (p. 661-680)
A brief introduction to Appendix L (Java Syntax) was added. (p. 747)
Several syntax diagrams in Appendix L were modified to fix errors or clarify processing. (p. 747-759)
Many irrelevant and/or deprecated classes were removed from Appendix M. (p. 762-906)
Many classes (mostly Swing classes) were added to Appendix M. (p. 762-906)