1. Thinking Object-Orineted.
Why is OOP Popular?
Language and Thought.
A New Paradigm.
A Way of Viewing the World.
Computation as Simulation.
A Brief History.
2. Layers of Abstraction.
Layers of Abstraction.
Other Forms of Abstraction.
A Short History of Abstraction Mechanisms.
3. Object-Oriented Design.
Responsibility Implies Noninterference.
Programming in the Small and in the Large.
Why Begin with Behavior.
A Case Study in RDD.
CRC Cards-Recording Responsibility.
Components and Behavior.
Software Components.
Formalize the Interface.
Designing the Representation.
Implementing Components.
Integration of Components.
Maintenance and Evolution.
4. Classes and Methods.
Encapsulation.
Class Definitions.
Methods.
Variations on Class Themes.
5. Messages, Instances, and Initialization.
Message-Passing Syntax.
Accessing the Receiver from Within a Method.
Object Creation.
Pointers.
Memory Recovery.
Constructors.
Constant Values.
Destructors and Finalizers.
Metaclasses in Smalltalk.
6. A Case Study: The Eight Queens Puzzle.
The Eight-Queens Puzzle.
Using Generators.
The Eight-Queens Puzzle in Each Language.
7. A Case Study: A Billiards Game.
The Elements of Billiards.
Graphical Objects.
The Main Program.
Using Inheritance.
8. Inheritance and Substitution.
An Intuitive Description of Inheritance.
Subclass, Subtype, and Substitution.
Interfaces.
Forms of Inheritance.
Inheritance in Various Languages.
Inheritance and Constructors.
The Benefits of Inheritance.
The Costs of Inheritance.
9. Case Study - A Card Game.
The Class Playing Card.
Data and View Classes.
The Game.
Card Piles-Inheritance in Action.
Playing the Polymorphic Game.
The Graphical User Interface.
10. Subclasses and Subtypes.
Substitutability.
Subtypes.
The Substitutability Paradox.
Is This a Problem?
Dynamically Typed Languages.
Pre and Post-conditions.
Scandinavian Semantics.
11. Static and Dynamic Behavior.
Static versus Dynamic Typing.
Static and Dynamic Classes.
Static versus Dynamic Method Binding.
12. Implications of Substitution.
Memory Layout.
Assignment.
Copies and Clones.
Equality.
13. Multiple Inheritance.
Inheritance as Categorization.
Problems Arising from Multiple Inheritance.
Multiple Inheritance of Interfaces.
Inheritance from Common Ancestors.
Inner Classes.
14. Polymorphism and Software Reuse.
Polymorphism in Programming Languages.
Mechanisms for Software Reuse.
Efficiency and Polymorphism.
Will Widespread Software Reuse Become Reality.
15. Overloading.
Type Signature and Scopes.
Overloading Based on Scopes.
Overloading Based on Type Signatures.
Redefinition.
Polyadicity.
Multi-Methods.
16. Overriding.
Notating Overriding.
Replacement versus Refinement.
Deferred Methods.
Overriding versus Shadowing.
Covariance and Contravariance.
Variations on Overriding.
17. The Polymorphic Variable.
Simple Polymorphic Variables.
The Receiver Variable.
Downcasting.
Pure Polymorphism.
18. Generics.
Template Functions.
Template Classes.
Inheritance in Template Arguments.
Case Study-Combining Separate Classes.
19. Container Classes.
Containers in Dynamically Typed Languages.
Containers in Statically-Typed Languages.
Restricting Element Types.
Iteration.
20. A Case Study: The STL.
Iterators.
Function Objects.
Example Program-An Inventory System.
Example Program-Graphs.
A Concordance.
The Future of OOP.
21. Frameworks.
Reuse and Specialization.
Example Frameworks.
22. An Example Framework: TheAWT and Swing.
The AWT Class Hierarchy.
The Layout Manager.
Listeners.
User Interface Components.
Case Study: A Color Display.
The Swing component Library.
23. Object Interconnections.
Coupling and Cohesion.
Subclass Clients and User Clients.
Control of Access and Visibility.
Intentional Dependency.
24. Design Patterns.
Controlling Information Flow.
Describing Patterns.
Iterator.
Software Factory.
Strategy.
Singleton.
Composite.
Decorator.
The Double-Dispatching Pattern.
Flyweight.
Proxy.
Façade.
Observer.
25. Reflection and Introspection.
Mechanisms for Understanding.
Methods of Objects.
Mechanisms for Modification.
Metaclasses.
26. Network Programming.
Addresses, Ports, and Sockets.
A Simple Client/Server Program.
Multiple Clients.
Transmitting Objects over a Network.
Providing More Complexity.
27. Implementation.
Compilers and Interpreters.
The Receiver as Argument.
Inherited Methods.
Overridden Methods.
Name Encoding.
Dispatch Tables.
Bytecode Interpreters.
Just-in-Time Compilation.
A. Source for the Eight-Queens Puzzle.
Eight-Queens in Apple Object Pascal.
Eight-Queens in C++.
Eight-Queens in Java.
Eight-Queens in Objective C.
Eight-Queens in Smalltalk.
B. Source for the Billiards Game.
The Version without Inheritance.
The Verstion with Inheritance.
C. Source for the Solitaire Game. Glossary.