Where challenges have solutions in code, this book uses Java. But many of the challenges ask you to draw a diagram of how classes, packages, and other elements relate. You can use any notation you like, but this book uses Unified Modeling Language (UML) notation. Even if you are familiar with UML, it is a good idea to have a reference handy. Two good choices are The UML User Guide (Booch, Rumbaugh, and Jacobson 1999), and UML Distilled (Fowler with Scott 2000). The bare minimum of UML knowledge you need for this book is provided in Appendix C, UML at a Glance, page 441.