Practical Object-Oriented Design With Uml by Mark Priestley