Java the UML Way: Integrating Object-Oriented Design and Programming