ADT Specification, Implementation, and Testing
CS2 Course Summary Slide 9

Abstract data types, their specification, implementation, and testing are discussed. For concreteness, three Java interfaces are presented for implementation. These interfaces and their implementations as Java classes constitute a Java package relating to shapes, clay.shapes of a ClayPackage Project. An implementation and test program for the Circle ADT (interface) is provided.

Students are then asked write the classes and test programs for the Square and Rectangle ADTs, working by analogy.


Code

package clay.shapes;

public interface ClayCircleADT {
    public double radius();
    public double area();
    public double perimeter();
    public void expand(double amount);
    public void shrink(double amount);
    public String toString();
}


package clay.shapes;

public interface ClaySquareADT {
    public double side();
    public double area();
    public double perimeter();
    public void expand(double amount);
    public void shrink(double amount);
    public String toString();
}


package clay.shapes;

public interface ClayRectangleADT {
    public double height();
    public double width();
    public double area();
    public double perimeter();
    public void expand(double h, double w);
    public void shrink(double h, double w);
    public String toString();
}


package clay.shapes;

public class ClayCircle implements ClayCircleADT {
    
    private double radius;

    public ClayCircle(double radius) {
        this.radius = radius;
    }
   
    public double radius() {
        return radius;
    }
        
    public double area() {
        return Math.PI * Math.pow(radius,2);
    }

    public double perimeter() {
        return Math.PI * diameter();
    }

    private double diameter() {
        return radius*2;
    }

    public void expand(double amount) {
        radius = radius + amount;
    }

    public void shrink(double amount) {
        radius = radius - amount;
    }
    
    public String toString() {
        return "<Circle: radius=" + radius + ">";
    }

}


package testers;

import clay.shapes.ClayCircle;

public class ClayCircleTest {
    
    public ClayCircleTest() {
    }
    
    public static void main(String[] args) {
        System.out.println("Testing the functionality of the ClayCircle class ...");
        ClayCircle c = new ClayCircle(10);
        System.out.println(c.toString());
        System.out.println("radius = " + c.radius());
        System.out.println("area = " + c.area());
        System.out.println("perimeter = " + c.perimeter());
        c.expand(5);
        System.out.println(c.toString());
        c.shrink(10);
        System.out.println(c.toString());
    }
    
}