OCSADV-196: Changed to case class, removed interfaces other than Shape, removed some apply methods, removed unnecessary path variable, and made members private.