Object-Oriented Software Engineering: Practical Software Development Using UML and Java