Object-Oriented Reengineering Patterns

こちらも無料。

http://www.iam.unibe.ch/~scg/OORP/

The original edition was published by Morgan Kaufmann in 2003, and is now out-of-print. The copyright has reverted to the authors, and we are now making this volume available under the Creative Commons Attribution-ShareAlike 3.0 license.

this book is a guide on how to reverse engineer legacy systems to understand their problems, and then reengineer those systems to meet new demands. Patterns are used to clarify and explain the process of understanding large code bases, hence transforming them to meet new requirements. The key insight is that the right design and organization of your system is not something that can be evident from the initial requirements alone, but rather as a consequence of understanding how these requirements evolve.