added many classes from section 1.2 dealing with data abstracton