Program development in Java
Subtitle: abstraction, specification, and object-oriented design
By: Barbara Liskov with John Guttag..
Contributors: Guttag, John.
Publisher: Addison-Wesley
Published: 2001
Place of publication: Boston
Language: eng
Number of pages: 443
Subjects: Java (Computer program language); Object-oriented programming (Computer science)
Notes: Includes index.
Table of contents: title: Preface
pagenum: xv; title: Acknowledgments
pagenum: xix; label: 1
title: Introduction
pagenum: 1; label: 1.1
title: Decomposition and Abstraction
pagenum: 2; label: 1.2
title: Abstraction
pagenum: 4; label: 1.2.1
title: Abstraction by Parameterization
pagenum: 7; label: 1.2.2
title: Abstraction by Specification
pagenum: 8; label: 1.2.3
title: Kinds of Abstractions
pagenum: 10; label: 1.3
title: The Remainder of the Book
pagenum: 12; title: Exercises
pagenum: 13; label: 2
title: Understanding Objects in Java
pagenum: 15; label: 2.1
title: Program Structure
pagenum: 15; label: 2.2
title: Packages
pagenum: 17; label: 2.3
title: Objects and Variables
pagenum: 18; label: 2.3.1
title: Mutability
pagenum: 21; label: 2.3.2
title: Method Call Semantics
pagenum: 22; label: 2.4
title: Type Checking
pagenum: 24; label: 2.4.1
title: Type Hierarchy
pagenum: 24; label: 2.4.2
title: Conversions and Overloading
pagenum: 27; label: 2.5
title: Dispatching
pagenum: 29; label: 2.6
title: Types
pagenum: 30; label: 2.6.1
title: Primitive Object Types
pagenum: 30; label: 2.6.2
title: Vectors
pagenum: 31; label: 2.7
title: Stream Input/Output
pagenum: 32; label: 2.8
title: Java Applications
pagenum: 33; title: Exercises
pagenum: 35; label: 3
title: Procedural Abstraction
pagenum: 39; label: 3.1
title: The Benefits of Abstraction
pagenum: 40; label: 3.2
title: Specifications
pagenum: 42; label: 3.3
title: Specifications of Procedural Abstractions
pagenum: 43; label: 3.4
title: Implementing Procedures
pagenum: 47; label: 3.5
title: Designing Procedural Abstractions
pagenum: 50; label: 3.6
title: Summary
pagenum: 55; title: Exercises
pagenum: 56; label: 4
title: Exceptions
pagenum: 57; label: 4.1
title: Specifications
pagenum: 59; label: 4.2
title: The Java Exception Mechanism
pagenum: 61; label: 4.2.1
title: Exception Types
pagenum: 61; label: 4.2.2
title: Defining Exception Types
pagenum: 62; label: 4.2.3
title: Throwing Exceptions
pagenum: 64; label: 4.2.4
title: Handling Exceptions
pagenum: 65; label: 4.2.5
title: Coping with Unchecked Exceptions
pagenum: 66; label: 4.3
title: Programming with Exceptions
pagenum: 67; label: 4.3.1
title: Reflecting and Masking
pagenum: 67; label: 4.4
title: Design Issues
pagenum: 68; label: 4.4.1
title: When to Use Exceptions
pagenum: 70; label: 4.4.2
title: Checked versus Unchecked Exceptions
pagenum: 70; label: 4.5
title: Defensive Programming
pagenum: 72; label: 4.6
title: Summary
pagenum: 74; title: Exercises
pagenum: 75; label: 5
title: Data Abstraction
pagenum: 77; label: 5.1
title: Specifications for Data Abstractions
pagenum: 79; label: 5.1.1
title: Specification of IntSet
pagenum: 80; label: 5.1.2
title: The Poly Abstraction
pagenum: 83; label: 5.2
title: Using Data Abstractions
pagenum: 85; label: 5.3
title: Implementing Data Abstractions
pagenum: 86; label: 5.3.1
title: Implementing Data Abstractions in Java
pagenum: 87; label: 5.3.2
title: Implementation of IntSet
pagenum: 87; label: 5.3.3
title: Implementation of Poly
pagenum: 89; label: 5.3.4
title: Records
pagenum: 90; label: 5.4
title: Additional Methods
pagenum: 94; label: 5.5
title: Aids to Understanding Implementations
pagenum: 98; label: 5.5.1
title: The Abstraction Function
pagenum: 99; label: 5.5.2
title: The Representation Invariant
pagenum: 102; label: 5.5.3
title: Implementing the Abstraction Function and Rep Invariant
pagenum: 105; label: 5.5.4
title: Discussion
pagenum: 107; label: 5.6
title: Properties of Data Abstraction Implementations
pagenum: 108; label: 5.6.1
title: Benevolent Side Effects
pagenum: 108; label: 5.6.2
title: Exposing the Rep
pagenum: 111; label: 5.7
title: Reasoning about Data Abstractions
pagenum: 112; label: 5.7.1
title: Preserving the Rep Invariant
pagenum: 113; label: 5.7.2
title: Reasoning about Operations
pagenum: 114; label: 5.7.3
title: Reasoning at the Abstract Level
pagenum: 115; label: 5.8
title: Design Issues
pagenum: 116; label: 5.8.1
title: Mutability
pagenum: 116; label: 5.8.2
title: Operation Categories
pagenum: 117; label: 5.8.3
title: Adequacy
pagenum: 118; label: 5.9
title: Locality and Modifiability
pagenum: 120; label: 5.10
title: Summary
pagenum: 121; title: Exercises
pagenum: 121; label: 6
title: Iteration Abstraction
pagenum: 125; label: 6.1
title: Iteration in Java
pagenum: 128; label: 6.2
title: Specifying Iterators
pagenum: 130; label: 6.3
title: Using Iterators
pagenum: 132; label: 6.4
title: Implementing Iterators
pagenum: 134; label: 6.5
title: Rep Invariants and Abstraction Functions for Generators
pagenum: 137; label: 6.6
title: Ordered Lists
pagenum: 138; label: 6.7
title: Design Issues
pagenum: 143; label: 6.8
title: Summary
pagenum: 144; title: Exercises
pagenum: 144; label: 7
title: Type Hierarchy
pagenum: 147; label: 7.1
title: Assignment and Dispatching
pagenum: 149; label: 7.1.1
title: Assignment
pagenum: 149; label: 7.1.2
title: Dispatching
pagenum: 150; label: 7.2
title: Defining a Type Hierarchy
pagenum: 152; label: 7.3
title: Defining Hierarchies in Java
pagenum: 152; label: 7.4
title: A Simple Example
pagenum: 154; label: 7.5
title: Exception Types
pagenum: 161; label: 7.6
title: Abstract Classes
pagenum: 161; label: 7.7
title: Interfaces
pagenum: 166; label: 7.8
title: Multiple Implementations
pagenum: 167; label: 7.8.1
title: Lists
pagenum: 168; label: 7.8.2
title: Polynomials
pagenum: 171; label: 7.9
title: The Meaning of Subtypes
pagenum: 174; label: 7.9.1
title: The Methods Rule
pagenum: 176; label: 7.9.2
title: The Properties Rule
pagenum: 179; label: 7.9.3
title: Equality
pagenum: 182; label: 7.10
title: Discussion of Type Hierarchy
pagenum: 183; label: 7.11
title: Summary
pagenum: 184; title: Exercises
pagenum: 186; label: 8
title: Polymorphic Abstractions
pagenum: 189; label: 8.1
title: Polymorphic Data Abstractions
pagenum: 190; label: 8.2
title: Using Polymorphic Data Abstractions
pagenum: 193; label: 8.3
title: Equality Revisited
pagenum: 193; label: 8.4
title: Additional Methods
pagenum: 195; label: 8.5
title: More Flexibility
pagenum: 198; label: 8.6
title: Polymorphic Procedures
pagenum: 202; label: 8.7
title: Summary
pagenum: 202; title: Exercises
pagenum: 204; label: 9
title: Specifications
pagenum: 207; label: 9.1
title: Specifications and Specificand Sets
pagenum: 207; label: 9.2
title: Some Criteria for Specifications
pagenum: 208; label: 9.2.1
title: Restrictiveness
pagenum: 208; label: 9.2.2
title: Generality
pagenum: 211; label: 9.2.3
title: Clarity
pagenum: 212; label: 9.3
title: Why Specifications?
pagenum: 215; label: 9.4
title: Summary
pagenum: 217; title: Exercises
pagenum: 219; label: 10
title: Testing and Debugging
pagenum: 221; label: 10.1
title: Testing
pagenum: 222; label: 10.1.1
title: Black-Box Testing
pagenum: 223; label: 10.1.2
title: Glass-Box Testing
pagenum: 227; label: 10.2
title: Testing Procedures
pagenum: 230; label: 10.3
title: Testing Iterators
pagenum: 231; label: 10.4
title: Testing Data Abstractions
pagenum: 232; label: 10.5
title: Testing Polymorphic Abstractions
pagenum: 235; label: 10.6
title: Testing a Type Hierarchy
pagenum: 235; label: 10.7
title: Unit and Integration Testing
pagenum: 237; label: 10.8
title: Tools for Testing
pagenum: 239; label: 10.9
title: Debugging
pagenum: 242; label: 10.10
title: Defensive Programming
pagenum: 249; label: 10.11
title: Summary
pagenum: 251; title: Exercises
pagenum: 252; label: 11
title: Requirements Analysis
pagenum: 255; label: 11.1
title: The Software Life Cycle
pagenum: 255; label: 11.2
title: Requirements Analysis Overview
pagenum: 259; label: 11.3
title: The Stock Tracker
pagenum: 264; label: 11.4
title: Summary
pagenum: 269; title: Exercises
pagenum: 270; label: 12
title: Requirements Specifications
pagenum: 271; label: 12.1
title: Data Models
pagenum: 272; label: 12.1.1
title: Subsets
pagenum: 273; label: 12.1.2
title: Relations
pagenum: 274; label: 12.1.3
title: Textual Information
pagenum: 278; label: 12.2
title: Requirements Specifications
pagenum: 282; label: 12.3
title: Requirements Specification for Stock Tracker
pagenum: 286; label: 12.3.1
title: The Data Model
pagenum: 286; label: 12.3.2
title: Stock Tracker Specification
pagenum: 289; label: 12.4
title: Requirements Specification for a Search Engine
pagenum: 291; label: 12.5
title: Summary
pagenum: 298; title: Exercises
pagenum: 298; label: 13
title: Design
pagenum: 301; label: 13.1
title: An Overview of the Design Process
pagenum: 301; label: 13.2
title: The Design Notebook
pagenum: 304; label: 13.2.1
title: The Introductory Section
pagenum: 304; label: 13.2.2
title: The Abstraction Sections
pagenum: 308; label: 13.3
title: The Structure of Interactive Programs
pagenum: 310; label: 13.4
title: Starting the Design
pagenum: 315; label: 13.5
title: Discussion of the Method
pagenum: 323; label: 13.6
title: Continuing the Design
pagenum: 324; label: 13.7
title: The Query Abstraction
pagenum: 326; label: 13.8
title: The WordTable Abstraction
pagenum: 332; label: 13.9
title: Finishing Up
pagenum: 333; label: 13.10
title: Interaction between FP and UI
pagenum: 334; label: 13.11
title: Module Dependency Diagrams versus Data Models
pagenum: 336; label: 13.12
title: Review and Discussion
pagenum: 338; label: 13.12.1
title: Inventing Helpers
pagenum: 339; label: 13.12.2
title: Specifying Helpers
pagenum: 340; label: 13.12.3
title: Continuing the Design
pagenum: 341; label: 13.12.4
title: The Design Notebook
pagenum: 342; label: 13.13
title: Top-Down Design
pagenum: 343; label: 13.14
title: Summary
pagenum: 344; title: Exercises
pagenum: 345; label: 14
title: Between Design and Implementation
pagenum: 347; label: 14.1
title: Evaluating a Design
pagenum: 347; label: 14.1.1
title: Correctness and Performance
pagenum: 348; label: 14.1.2
title: Structure
pagenum: 353; label: 14.2
title: Ordering the Program Development Process
pagenum: 360; label: 14.3
title: Summary
pagenum: 366; title: Exercises
pagenum: 367; label: 15
title: Design Patterns
pagenum: 369; label: 15.1
title: Hiding Object Creation
pagenum: 371; label: 15.2
title: Neat Hacks
pagenum: 375; label: 15.2.1
title: Flyweights
pagenum: 375; label: 15.2.2
title: Singletons
pagenum: 378; label: 15.2.3
title: The State Pattern
pagenum: 382; label: 15.3
title: The Bridge Pattern
pagenum: 385; label: 15.4
title: Procedures Should Be Objects Too
pagenum: 386; label: 15.5
title: Composites
pagenum: 390; label: 15.5.1
title: Traversing the Tree
pagenum: 393; label: 15.6
title: The Power of Indirection
pagenum: 399; label: 15.7
title: Publish/Subscribe
pagenum: 402; label: 15.7.1
title: Abstracting Control
pagenum: 403; label: 15.8
title: Summary
pagenum: 406; title: Exercises
pagenum: 407; title: Glossary
pagenum: 409; title: Index
pagenum: 427