Objects First with Java: A Practical Introduction using BlueJ