Preface.
1. Roadmap.
Overview. Section 1: Smells within Classes. Section 2: Smells between Classes. Section 3: Programs to Refactor. A Word on the Challenges.
I. SMELLS WITHIN CLASSES.
2. The Refactoring Cycle.
What Is Refactoring? Smells Are Problems. The Refactoring Cycle. When Are We Done? Inside a Refactoring. Challenges. Conclusion.
3. Measured Smells.
Smells Covered. Comments. Long Method. Large Class. Long Parameter List. More Challenges. Conclusion.
Interlude 1. Smells and Refactorings.
4. Names.
Smells Covered. Type Embedded in Name (Including Hungarian). Uncommunicative Name. Inconsistent Names.
5. Unnecessary Complexity.
Smells Covered. Dead Code. Speculative Generality.
Interlude 2. Inverses.
6. Duplication.
Smells Covered. Magic Number. Duplicated Code. Alternative Classes with Different Interfaces. Challenges.
7. Conditional Logic.
Smells Covered. Null Check. Complicated Boolean Expression. Special Case. Simulated Inheritance (Switch Statement).
Interlude 3. Design Patterns.
II. SMELLS BETWEEN CLASSES.
8. Data.
Smells Covered. Primitive Obsession. Data Class. Data Clump. Temporary Field.
9. Inheritance.
Smells Covered. Refused Bequest. Inappropriate Intimacy (Subclass Form). Lazy Class.
10. Responsibility.
Smells Covered. Feature Envy. Inappropriate Intimacy (General Form). Message Chains. Middle Man. Challenges.
11. Accommodating Change.
Smells Covered. Divergent Change. Shotgun Surgery. Parallel Inheritance Hierarchies. Combinatorial Explosion.
12. Library Classes.
Smells Covered. Incomplete Library Class. Challenges.
Interlude 4. Gen-A-Refactoring.
III. PROGRAMS TO REFACTOR.
13. A Database Example.
Course.java (Online at www.xp123.com/rwb). Offering.java. Schedule.java. Report.java. TestSchedule.java. TestReport.java.
14. A Simple Game.
Development Episodes.
15. Catalog.
Introduction. Path 1: Catalog.itemsMatching(query). Path 2: Query.matchesIn(catalog). Path 3: Process(catalog.data, query.data). Conclusion.
16. Planning Game Simulator.
Part 1: Original Code. Part 2: Redistributing Features. Removing Duplication, Selection Troubles, and a Few Burrs. Part 3: Pushing the Code Further.
17. Where to Go from Here.
Books. Admonitions. Exercises to Try. Web Sites.
IV. APPENDIXES.
A: Answers to Selected Questions.
B: Java Refactoring Tools.
C: Inverses for Refactorings.
D: Key Refactorings.
Bibliography.
Index.