added abstract shape class