Table of Contents
Preface
1 Abstract Data Types — Information Hiding
1.1 Data Types
1.2 Abstract Data Types
1.3 An Example — Set
1.4 Memory Management
1.5 Object
1.6 An Application
1.7 An Implementation — Set
1.8 Another Implementation — Bag
1.9 Summary
1.10 Exercises
2 Dynamic Linkage — Generic Functions
2.1 Constructors and Destructors
2.2 Methods, Messages, Classes and Objects
2.3 Selectors, Dynamic Linkage, and Polymorphisms
2.4 An Application
2.5 An Implementation — String
2.6 Another Implementation — Atom
2.7 Summary
2.8 Exercises
3 Programming Savvy — Arithmetic Expressions
3.1 The Main Loop
3.2 The Scanner
3.3 The Recognizer
3.4 The Processor
3.5 Information Hiding
3.6 Dynamic Linkage
3.7 A Postfix Writer
3.8 Arithmetic
3.9 Infix Output
3.10 Summary
4 Inheritance — Code Reuse and Refinement
4.1 A Superclass — Point
4.2 Superclass Implementation — Point
4.3 Inheritance — Circle
4.4 Linkage and Inheritance
4.5 Static and Dynamic Linkage
4.6 Visibility and Access Functions
4.7 Subclass Implementation — Circle
4.8 Summary
4.9 Is It or Has It? — Inheritance vs. Aggregates
4.10 Multiple Inheritance
4.11 Exercises
5 Programming Savvy — Symbol Table
5.1 Scanning Identifiers
5.2 Using Variables
5.3 The Screener — Name
5.4 Superclass Implementation — Name
5.5 Subclass Implementation — Var
5.6 Assignment
5.7 Another Subclass — Constants
5.8 Mathematical Functions — Math
5.9 Summary
5.10 Exercises
6 Class Hierarchy — Maintainability
6.1 Requirements
6.2 Metaclasses
6.3 Roots — Object and Class
6.4 Subclassing — Any
6.5 Implementation — Object
6.6 Implementation — Class
6.7 Initialization
6.8 Selectors
6.9 Superclass Selectors
6.10 A New Metaclass — PointClass
6.11 Summary
7 The ooc Preprocessor — Enforcing a Coding Standard
7.1 Point Revisited
7.2 Design
7.3 Preprocessing
7.4 Implementation Strategy
7.5 Object Revisited
7.6 Discussion
7.7 An Example — List, Queue, and Stack
7.8 Exercises
8 Dynamic Type Checking — Defensive Programming
8.1 Technique
8.2 An Example — list
8.3 Implementation
8.4 Coding Standard
8.5 Avoiding Recursion
8.6 Summary
8.7 Exercises
9 Static Construction— Self-Organization
9.1 Initialization
9.2 Initializer Lists — munch
9.3 Functions for Objects
9.4 Implementation
9.5 Summary
9.6 Exercises
10 Delegates — Callback Functions
10.1 Callbacks
10.2 Abstract Base Classes
10.3 Delegates
10.4 An Application Framework — Filter
10.5 The respondsTo Method
10.6 Implementation
10.7 Another application — sort
10.8 Summary
10.9 Exercises
11 Class Methods— Plugging Memory Leaks
11.1 An Example
11.2 Class Methods
11.3 Implementing Class Methods
11.4 Programming Savvy — A Classy Calculator
11.5 Summary
11.6 Exercises
12 Persistent Objects — Storing and Loading Data Structures
12.1 An Example
12.2 Storing Objects — puto()
12.3 Filling Objects — geto()
12.4 Loading Objects — retrieve()
12.5 Attaching Objects — value Revisited
12.6 Summary
12.7 Exercises
13 Exceptions — Disciplined Error Recovery
13.1 Strategy
13.2 Implementation — Exception
13.3 Examples
13.4 Summary
13.5 Exercises
14 Forwarding Messages — A GUI Calculator
14.1 The Idea
14.2 Implementation
14.3 Object-Oriented Design by Example
14.4 Implementation — Ic
14.5 A Character-Based Interface — curses
14.6 A Graphical Interface — Xt
14.7 Summary
14.8 Exercises
A ANSI-C Programming Hints
A.1 Names and Scope
A.2 Functions
A.3 Generic Pointers — void *
A.4 const
A.5 typedef and const
A.6 Structures
A.7 Pointers to Functions
A.8 Preprocessor
A.9 Verification — assert.h
A.10 Global Jumps — setjmp.h
A.11 Variable Argument Lists — stdarg.h
A.12 Data Types — stddef.h
A.13 Memory Management — stdlib.h
A.14 Memory Functions — string.h
B The ooc Preprocessor — Hints on awk Programming
B.1 Architecture
B.2 File Management — io.awk
B.3 Recognition — parse.awk
B.4 The Database
B.5 Report Generation — report.awk
B.6 Line Numbering
B.7 The Main Program — main.awk
B.8 Report Files
B.9 The ooc Command
C Manual
C.1 Commands
C.2 Functions
C.3 Root Classes
C.4 GUI Calculator Classes
Bibliography