added abstract shape class and inheritance