Understanding UML: The Developer's Guide (The Morgan Kaufmann Series in Software Engineering and Programming)