2.1 Improving readability and maintainability2.1.1 Making code better2.1.2 Maintaining code . . . without changing what it does2.2 Gaining speed, flexibility, and stability2.2.1 Favoring composition over inheritance2.2.2 Changing code by addition rather than modification2.3 Refactoring and your daily work2.3.1 Refactoring as a method for learning2.4 Defining the “domain” in a software contextSummary