An Introduction to Object-Oriented Programming (3rd Edition)