Using UML: Software Engineering with Objects and Components (2nd Edition)