by Sandeep Desai (http://www.thedesai.net/)
The Unified Modeling language (UML) is a family of graphical notations, backed by a single meta-model, that help in describing and designing software systems. See the Object Oriented Analysis and Design document on how UML should be used
UML Distilled 3rd Edition by Martin Folwer
Applying UML and Patterns by Craig Larman
Free
Commercial
UML Resources