import java.io.Serializable; import java.awt.Point; import java.awt.Rectangle; public abstract class Shape implements GraphicsObject, Serializable { final static int HORIZONTAL = 0; final static int VERTICAL = 1; final static int BOTH = 2; protected Point corner_point; protected Point center_point; protected Rectangle bounding_box; protected Shape( ) { corner_point = new Point( ); center_point = new Point( ); bounding_box = new Rectangle( ); } public abstract void initialize(Object[] args); public void move(Point point) { move(point.x, point.y); } public void move(int x, int y) { int x_pt = corner_point.x + (x - center_point.x); int y_pt = corner_point.y + (y - center_point.y); corner_point.move(x_pt, y_pt); bounding_box.move(x_pt, y_pt); center_point.move(x, y); } public abstract void rotate(double theta); public abstract void reflect(int axis); public Rectangle getBoundingBox( ) { return new Rectangle(bounding_box); } public abstract float getPerimeter( ); public abstract float getArea( ); }