programming abstraction in a second cours in computer science - eris roberts (1998)