abstract shape class