Home > Store

Program Development in Java: Abstraction, Specification, and Object-Oriented Design

Register your product to gain access to bonus material or receive a coupon.

Program Development in Java: Abstraction, Specification, and Object-Oriented Design

Book

  • Sorry, this book is no longer in print.
Not for Sale

eBook (Watermarked)

  • Your Price: $46.74
  • List Price: $54.99
  • About Watermarked eBooks
  • This PDF will be accessible from your Account page after purchase and requires PDF reading software, such as Acrobat® Reader®.

    The eBook requires no passwords or activation to read. We customize your eBook by discreetly watermarking it with your name, making it uniquely yours.

    Watermarked eBook FAQ

Description

  • Copyright 2001
  • Dimensions: 7-3/8" x 9-1/4"
  • Pages: 464
  • Edition: 1st
  • Book
  • ISBN-10: 0-201-65768-6
  • ISBN-13: 978-0-201-65768-5
  • eBook (Watermarked)
  • ISBN-10: 0-7686-8469-2
  • ISBN-13: 978-0-7686-8469-8

Written by a world-renowned expert on programming methodology, and the winner of the 2008 Turing Award, this book shows how to build production-quality programs--programs that are reliable, easy to maintain, and quick to modify. Its emphasis is on modular program construction: how to get the modules right and how to organize a program as a collection of modules. The book presents a methodology effective for either an individual programmer, who may be writing a small program or a single module in a larger one; or a software engineer, who may be part of a team developing a complex program comprised of many modules. Both audiences will acquire a solid foundation for object-oriented program design and component-based software development from this methodology.

Because each module in a program corresponds to an abstraction, such as a collection of documents or a routine to search the collection for documents of interest, the book first explains the kinds of abstractions most useful to programmers: procedures; iteration abstractions; and, most critically, data abstractions. Indeed, the author treats data abstraction as the central paradigm in object-oriented program design and implementation. The author also shows, with numerous examples, how to develop informal specifications that define these abstractions--specifications that describe what the modules do--and then discusses how to implement the modules so that they do what they are supposed to do with acceptable performance.

Other topics discussed include:

  • Encapsulation and the need for an implementation to provide the behavior defined by the specification
  • Tradeoffs between simplicity and performance
  • Techniques to help readers of code understand and reason about it, focusing on such properties as rep invariants and abstraction functions
  • Type hierarchy and its use in defining families of related data abstractions
  • Debugging, testing, and requirements analysis
  • Program design as a top-down, iterative process, and design patterns

The Java programming language is used for the book's examples. However, the techniques presented are language independent, and an introduction to key Java concepts is included for programmers who may not be familiar with the language.

Downloads

Supplements

Click below for Supplements related to this title:
Supplements

Sample Content

Table of Contents



1. Introduction.

Decomposition and Abstraction.

Abstraction.

Abstraction by Parameterization.

Abstraction by Specification.

Kinds of Abstractions.

The Remainder of the Book.

Exercises.



2. Understanding Objects in Java.

Program Structure.

Packages.

Objects and Variables.

Mutability.

Method Call Semantics.

Type Checking.

Type Hierarchy.

Conversions and Overloading.

Dispatching.

Types.

Primitive Object Types.

Vectors.

Stream Input/Output.

Java Applications.

Exercises.



3. Procedural Abstraction.

The Benefits of Abstraction.

Specifications.

Specifications of Procedural Abstractions.

Implementing Procedures.

Designing Procedural Abstractions.

Summary.

Exercises.



4. Exceptions.

Specifications.

The Java Exception Mechanism.

Exception Types.

Defining Exception Types.

Throwing Exceptions.

Handling Exceptions.

Coping with Unchecked Exceptions.

Programming with Exceptions.

Reflecting and Masking.

Design Issues.

When to Use Exceptions.

Checked versus Unchecked Exceptions.

Defensive Programming.

Summary.

Exercises.



5. Data Abstraction.

Specifications for Data Abstractions.

Specification of IntSet.

The Poly Abstraction.

Using Data Abstractions.

Implementing Data Abstractions.

Implementing Data Abstractions in Java.

Implementation of IntSet.

Implementation of Poly.

Records.

Additional Methods.

Aids to Understanding Implementations.

The Abstraction Function.

The Representation Invariant.

Implementing the Abstraction Function and Rep Invariant.

Discussion.

Properties of Data Abstraction Implementations.

Benevolent Side Effects.

Exposing the Rep.

Reasoning about Data Abstractions.

Preserving the Rep Invariant.

Reasoning about Operations.

Reasoning at the Abstract Level.

Design Issues.

Mutability.

Operation Categories.

Adequacy.

Locality and Modifiability.

Summary.

Exercises.



6. Iteration Abstraction.

Iteration in Java.

Specifying Iterators.

Using Iterators.

Implementing Iterators.

Rep Invariants and Abstraction Functions for Generators.

Ordered Lists.

Design Issues.

Summary.

Exercises.



7. Type Hierarchy.

Assignment and Dispatching.

Assignment.

Dispatching.

Defining a Type Hierarchy.

Defining Hierarchies in Java.

A Simple Example.

Exception Types.

Abstract Classes.

Interfaces.

Multiple Implementations.

Lists.

Polynomials.

The Meaning of Subtypes.

The Methods Rule.

The Properties Rule.

Equality.

Discussion of Type Hierarchy.

Summary.

Exercises.



8. Polymorphic Abstractions.

Polymorphic Data Abstractions.

Using Polymorphic Data Abstractions.

Equality Revisited.

Additional Methods.

More Flexibility.

Polymorphic Procedures.

Summary.

Exercises.



9. Specifications.

Specifications and Specificand Sets.

Some Criteria for Specifications.

Restrictiveness.

Generality.

Clarity.

Why Specifications?

Summary.

Exercises.



10. Testing and Debugging.

Testing

Black-Box Testing.

Glass-Box Testing.

Testing Procedures.

Testing Iterators.

Testing Data Abstractions.

Testing Polymorphic Abstractions.

Testing a Type Hierarchy.

Unit and Integration Testing.

Tools for Testing.

Debugging.

Defensive Programming.

Summary.

Exercises.



11. Requirements Analysis.

The Software Life Cycle.

Requirements Analysis Overview.

The Stock Tracker.

Summary.

Exercises.



12. Requirements Specifications.

Data Models.

Subsets.

Relations.

Textual Information.

Requirements Specifications.

Requirements Specification for Stock Tracker.

The Data Model.

Stock Tracker Specification.

Requirements Specification for a Search Engine.

Summary.

Exercises.



13. Design.

An Overview of the Design Process.

The Design Notebook.

The Introductory Section.

The Abstraction Sections.

The Structure of Interactive Programs.

Starting the Design.

Discussion of the Method.

Continuing the Design.

The Query Abstraction.

The WorldTable Abstraction.

Finishing Up.

Interaction between FP and UI.

Module Dependency Diagrams versus Data Models.

Review and Discussion.

Inventing Helpers.

Specifying Helpers.

Continuing the Design.

The Design Notebook.

Top-Down Design.

Summary.

Exercises.



14. Between Design and Implementation.

Evaluating a Design.

Correctness and Performance.

Structure.

Ordering the Program Development Process.

Summary.

Exercises.



15. Design Patterns.

Hiding Object Creation.

Neat Hacks.

Flyweights.

Singletons.

The State Pattern.

The Bridge Pattern.

Procedures Should Be Objects Too.

Composites.

Traversing the Tree.

The Power of Indirection.

Publish/Subscribe.

Abstracting Control.

Summary.

Exercises.



Glossary.


Index. 0201657686T04062001

Preface

Constructing production-quality programs--programs that are used over an extended period of time--is well known to be extremely difficult. The goal of this book is to improve the effectiveness of programmers in carrying out this task. I hope the reader will become a better programmer as a result of reading the book. I believe the book succeeds at improving programming skills because my students tell me that it happens for them.

What makes a good programmer? It is a matter of efficiency over the entire production of a program. The key is to reduce wasted effort at each stage. Things that can help include thinking through your implementation before you start coding, coding in a way that eliminates errors before you test, doing rigorous testing so that errors are found early, and paying careful attention to modularity so that when errors are discovered, they can be corrected with minimal impact on the program as a whole. This book covers techniques in all these areas.

Modularity is the key to writing good programs. It is essential to break up a program into small modules, each of which interacts with the others through a narrow, well-defined interface. With modularity, an error in one part of a program can be corrected without having to consider all the rest of the code, and a part of the program can be understood without having to understand the entire thing. Without modularity, a program is a large collection of intricately interrelated parts. It is difficult to comprehend and to modify such a program, and also difficult to get it to work correctly.

The focus of this book therefore is on modular program construction: how to organize a program as a collection of well-chosen modules. The book relates modularity to abstraction. Each module corresponds to an abstraction, such as an index that keeps track of interesting words in a large collection of documents or a procedure that uses the index to find documents that match a particular query. Particular emphasis is placed on object-oriented programming--the use of data abstraction and objects in developing programs.

The book uses Java for its programming examples. Familiarity with Java is not assumed. It is worth noting, however, that the concepts in this book are language independent and can be used to write programs in any programming language.

How Can the Book Be Used?

Program Development in Java can be used in two ways. The first is as the text for a course that focuses on an object-oriented methodology for the design and implementation of complex systems. The second is use by computing professionals who want to improve their programming skills and their knowledge of modular, object-oriented design.

When used as a text, the book is intended for a second or third programming course; we have used the book for many years in the second programming course at MIT, which is taken by sophomores and juniors. At this stage, students already know how to write small programs. The course builds on this material in two ways: by getting them to think more carefully about small programs, and by teaching them how to construct large programs using smaller ones as components. This book could also be used later in the curriculum, for example, in a software engineering course.

A course based on the book is suitable for all computer science majors. Even though many students will never be designers of truly large programs, they may work at development organizations where they will be responsible for the design and implementation of subsystems that must fit into the overall structure. The material on modular design is central to this kind of a task. It is equally important for those who take on larger design tasks.

What Is This Book About?

Roughly two-thirds of the book is devoted to the issues that arise in building individual program modules. The remainder of the book is concerned with how to use these modules to construct large programs.

Program Modules

This part of the book focuses on abstraction mechanisms. It discusses procedures and exceptions, data abstraction, iteration abstraction, families of data abstractions, and polymorphic abstractions.

Three activities are emphasized in the discussion of abstractions. The first is deciding on exactly what the abstraction is: what behavior it is providing to its users. Inventing abstractions is a key part of design, and the book discusses how to choose among possible alternatives and what goes into inventing good abstractions.

The second activity is capturing the meaning of an abstraction by giving a specification for it. Without some description, an abstraction is too vague to be useful. The specification provides the needed description. This book defines a format for specifications, discusses the properties of a good specification, and provides many examples.

The third activity is implementing abstractions. The book discusses how to design an implementation and the trade-off between simplicity and performance. It emphasizes encapsulation and the need for an implementation to provide the behavior defined by the specification. It also presents techniques--in particular, the use of representation invariants and abstraction functions--that help readers of code to understand and reason about it. Both rep invariants and abstraction functions are implemented to the extent possible, which is useful for debugging and testing.

The material on type hierarchy focuses on its use as an abstraction technique--a way of grouping related data abstractions into families. An important issue here is whether it is appropriate to define one type to be a subtype of another. The book defines the {substitution principle}--a methodical way for deciding whether the subtype relation holds by examining the specifications of the subtype and the supertype.

This book also covers debugging and testing. It discusses how to come up with a sufficient number of test cases for thorough black box and glass box tests, and it emphasizes the importance of regression testing.

Programming in the Large

The latter part of Program Development in Java is concerned with how to design and implement large programs in a modular way. It builds on the material about abstractions and specifications covered in the earlier part of the book.

The material on programming in the large covers four main topics. The first concerns requirements analysis--how to develop an understanding of what is wanted of the program. The book discusses how to carry out requirements analysis and also describes a way of writing the resulting requirements specification, by making use of a {data model} that describes the abstract state of the program. Using the model leads to a more precise specification, and it also makes the requirements analysis more rigorous, resulting in a better understanding of the requirements.

The second programming in the large topic is program design, which is treated as an iterative process. The design process is organized around discovering useful abstractions, ones that can serve as desirable building blocks within the program as a whole. These abstractions are carefully specified during design so that when the program is implemented, the modules that implement the abstractions can be developed independently. The design is documented by a design notebook, which includes a module dependency diagram that describes the program structure.

The third topic is implementation and testing. The book discusses the need for design analysis prior to implementation and how design reviews can be carried out. It also discusses implementation and testing order. This section compares top-down and bottom-up organizations, discusses the use of drivers and stubs, and emphasizes the need to develop an ordering strategy prior to implementation that meets the needs of the development organization and its clients.

This book concludes with a chapter on design patterns. Some patterns are introduced in earlier chapters; for example, iteration abstraction is a major component of the methodology. The final chapter discusses patterns not covered earlier. It is intended as an introduction to this material. The interested reader can then go on to read more complete discussions contained in other books.

Barbara Liskov



0201657686P04062001

Updates

Submit Errata

More Information

InformIT Promotional Mailings & Special Offers

I would like to receive exclusive offers and hear about products from InformIT and its family of brands. I can unsubscribe at any time.

Overview


Pearson Education, Inc., 221 River Street, Hoboken, New Jersey 07030, (Pearson) presents this site to provide information about products and services that can be purchased through this site.

This privacy notice provides an overview of our commitment to privacy and describes how we collect, protect, use and share personal information collected through this site. Please note that other Pearson websites and online products and services have their own separate privacy policies.

Collection and Use of Information


To conduct business and deliver products and services, Pearson collects and uses personal information in several ways in connection with this site, including:

Questions and Inquiries

For inquiries and questions, we collect the inquiry or question, together with name, contact details (email address, phone number and mailing address) and any other additional information voluntarily submitted to us through a Contact Us form or an email. We use this information to address the inquiry and respond to the question.

Online Store

For orders and purchases placed through our online store on this site, we collect order details, name, institution name and address (if applicable), email address, phone number, shipping and billing addresses, credit/debit card information, shipping options and any instructions. We use this information to complete transactions, fulfill orders, communicate with individuals placing orders or visiting the online store, and for related purposes.

Surveys

Pearson may offer opportunities to provide feedback or participate in surveys, including surveys evaluating Pearson products, services or sites. Participation is voluntary. Pearson collects information requested in the survey questions and uses the information to evaluate, support, maintain and improve products, services or sites, develop new products and services, conduct educational research and for other purposes specified in the survey.

Contests and Drawings

Occasionally, we may sponsor a contest or drawing. Participation is optional. Pearson collects name, contact information and other information specified on the entry form for the contest or drawing to conduct the contest or drawing. Pearson may collect additional personal information from the winners of a contest or drawing in order to award the prize and for tax reporting purposes, as required by law.

Newsletters

If you have elected to receive email newsletters or promotional mailings and special offers but want to unsubscribe, simply email information@informit.com.

Service Announcements

On rare occasions it is necessary to send out a strictly service related announcement. For instance, if our service is temporarily suspended for maintenance we might send users an email. Generally, users may not opt-out of these communications, though they can deactivate their account information. However, these communications are not promotional in nature.

Customer Service

We communicate with users on a regular basis to provide requested services and in regard to issues relating to their account we reply via email or phone in accordance with the users' wishes when a user submits their information through our Contact Us form.

Other Collection and Use of Information


Application and System Logs

Pearson automatically collects log data to help ensure the delivery, availability and security of this site. Log data may include technical information about how a user or visitor connected to this site, such as browser type, type of computer/device, operating system, internet service provider and IP address. We use this information for support purposes and to monitor the health of the site, identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents and appropriately scale computing resources.

Web Analytics

Pearson may use third party web trend analytical services, including Google Analytics, to collect visitor information, such as IP addresses, browser types, referring pages, pages visited and time spent on a particular site. While these analytical services collect and report information on an anonymous basis, they may use cookies to gather web trend information. The information gathered may enable Pearson (but not the third party web trend services) to link information with application and system log data. Pearson uses this information for system administration and to identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents, appropriately scale computing resources and otherwise support and deliver this site and its services.

Cookies and Related Technologies

This site uses cookies and similar technologies to personalize content, measure traffic patterns, control security, track use and access of information on this site, and provide interest-based messages and advertising. Users can manage and block the use of cookies through their browser. Disabling or blocking certain cookies may limit the functionality of this site.

Do Not Track

This site currently does not respond to Do Not Track signals.

Security


Pearson uses appropriate physical, administrative and technical security measures to protect personal information from unauthorized access, use and disclosure.

Children


This site is not directed to children under the age of 13.

Marketing


Pearson may send or direct marketing communications to users, provided that

  • Pearson will not use personal information collected or processed as a K-12 school service provider for the purpose of directed or targeted advertising.
  • Such marketing is consistent with applicable law and Pearson's legal obligations.
  • Pearson will not knowingly direct or send marketing communications to an individual who has expressed a preference not to receive marketing.
  • Where required by applicable law, express or implied consent to marketing exists and has not been withdrawn.

Pearson may provide personal information to a third party service provider on a restricted basis to provide marketing solely on behalf of Pearson or an affiliate or customer for whom Pearson is a service provider. Marketing preferences may be changed at any time.

Correcting/Updating Personal Information


If a user's personally identifiable information changes (such as your postal address or email address), we provide a way to correct or update that user's personal data provided to us. This can be done on the Account page. If a user no longer desires our service and desires to delete his or her account, please contact us at customer-service@informit.com and we will process the deletion of a user's account.

Choice/Opt-out


Users can always make an informed choice as to whether they should proceed with certain services offered by InformIT. If you choose to remove yourself from our mailing list(s) simply visit the following page and uncheck any communication you no longer want to receive: www.informit.com/u.aspx.

Sale of Personal Information


Pearson does not rent or sell personal information in exchange for any payment of money.

While Pearson does not sell personal information, as defined in Nevada law, Nevada residents may email a request for no sale of their personal information to NevadaDesignatedRequest@pearson.com.

Supplemental Privacy Statement for California Residents


California residents should read our Supplemental privacy statement for California residents in conjunction with this Privacy Notice. The Supplemental privacy statement for California residents explains Pearson's commitment to comply with California law and applies to personal information of California residents collected in connection with this site and the Services.

Sharing and Disclosure


Pearson may disclose personal information, as follows:

  • As required by law.
  • With the consent of the individual (or their parent, if the individual is a minor)
  • In response to a subpoena, court order or legal process, to the extent permitted or required by law
  • To protect the security and safety of individuals, data, assets and systems, consistent with applicable law
  • In connection the sale, joint venture or other transfer of some or all of its company or assets, subject to the provisions of this Privacy Notice
  • To investigate or address actual or suspected fraud or other illegal activities
  • To exercise its legal rights, including enforcement of the Terms of Use for this site or another contract
  • To affiliated Pearson companies and other companies and organizations who perform work for Pearson and are obligated to protect the privacy of personal information consistent with this Privacy Notice
  • To a school, organization, company or government agency, where Pearson collects or processes the personal information in a school setting or on behalf of such organization, company or government agency.

Links


This web site contains links to other sites. Please be aware that we are not responsible for the privacy practices of such other sites. We encourage our users to be aware when they leave our site and to read the privacy statements of each and every web site that collects Personal Information. This privacy statement applies solely to information collected by this web site.

Requests and Contact


Please contact us about this Privacy Notice or if you have any requests or questions relating to the privacy of your personal information.

Changes to this Privacy Notice


We may revise this Privacy Notice through an updated posting. We will identify the effective date of the revision in the posting. Often, updates are made to provide greater clarity or to comply with changes in regulatory requirements. If the updates involve material changes to the collection, protection, use or disclosure of Personal Information, Pearson will provide notice of the change through a conspicuous notice on this site or other appropriate way. Continued use of the site after the effective date of a posted revision evidences acceptance. Please contact us if you have questions or concerns about the Privacy Notice or any objection to any revisions.

Last Update: November 17, 2020