Objects first with Java :a practical introduction using BlueJ.