In: Computer Science
(The Colorable interface) Design an interface named Colorable with a void method named howToColor(). Every class of a colorable object must implement the Colorable interface. Design a class named Square that extends GeometricObject and implements Colorable. Design another class named Triangle that extends GeometricObject and implements Colorable. Implement howToColor in Square to display the message Color all four sides. Implement howToColor in Triangle to display the message Color all three sides.
Draw a UML diagram that involves Colorable, Square, Triangle, and GeometricObject.
Write a test program that creates an array of five GeometricObjects. For each object in the array, display its area and invoke its howToColor method if it is colorable.
Hint: In Java, you can use
if (object instanceof Interface) {
//Do some thing here.
}
to check if object is an instance of a class that implements the Interface https://stackoverflow.com/questions/13487765/how-instanceof-will-work-on-an-interface
Submission:
Print your UML diagram and print out your code.
You should have following source codes:
interface Colorable
{
public void howToColor();
}
abstract class GeometricObject implements Colorable// abstract
base class
{
//abstract methods
abstract public double calculateArea();
abstract public double calculatePerimeter();
abstract public String toString();
}
class Triangle extends GeometricObject
{
private double side1,side2,side3;
public Triangle()
{
side1 = 1.0;
side2 = 1.0;
side3 = 1.0;
}
public Triangle(double side1,double side2,double side3)
{
if ((side1 >= side2 + side3) || (side2 >= side1 +
side3)||(side3 >= side2 + side1))
{
this.side1 = 1.0;
this.side2 = 1.0;
this.side3 = 1.0;
}
else
{
this.side1 = side1;
this.side2 = side2;
this.side3 = side3;
}
}
//The accessor(getters and setters) methods for all three data
fields.
public void setSide1(double side1)
{
this.side1 = side1;
}
public double getSide1()
{
return side1;
}
public void setSide2(double side1)
{
this.side2 = side2;
}
public double getSide2()
{
return side2;
}
public void setSide3(double side3)
{
this.side3 = side3;
}
public double getSide3()
{
return side3;
}
//A method named getArea() that returns the area of this
triangle.
public double calculateArea()
{
double s = (side1 +side2+side3)/2;
double area = Math.sqrt(s*(s-side1)*(s-side2)*(s-side3));
return area;
}
//A method named getPerimeter() that returns the perimeter of this
triangle.
public double calculatePerimeter()
{
return(side1+side2+side3);
}
//A method named toString() that returns a string description for
the triangle.
public String toString()
{
return "Triangle side1 : "+side1 +" side2 : "+side2+" side3 :
"+side3 +" Area : "+calculateArea()+" Perimeter :
"+calculatePerimeter();
}
public void howToColor()
{
System.out.println("Color all three sides");
}
}
class Square extends GeometricObject
{
private double side;
public Square(double side)
{
this.side = side;
}
public String toString()
{
return "Square side : "+side+" Area : "+calculateArea()+" Perimeter
: "+calculatePerimeter();
}
public void howToColor()
{
System.out.println("Color all four sides");
}
public double calculateArea()
{
return side*side;
}
//A method named getPerimeter() that returns the perimeter of this
triangle.
public double calculatePerimeter()
{
return 4*side;
}
}
class TestGeometricObject
{
public static void main (String[] args)
{
GeometricObject[] f = new GeometricObject[5];
f[0] = new Square(20);
f[1] = new Triangle(6.5, 14.9, 11.3);
f[2] = new Square(4.5);
f[3] = new Triangle(3.0,4.0,5.0);
f[4] = new Square(2.5);
for(int i=0;i<f.length;i++)
{
System.out.println(f[i]);
if(f[i] instanceof Colorable)
f[i].howToColor();
}
}
}
Output:
Square side : 20.0 Area : 400.0 Perimeter : 80.0 Color all four sides Triangle side1 : 6.5 side2 : 14.9 side3 : 11.3 Area : 34.340505510985146 Perimeter : 32.7 Color all three sides Square side : 4.5 Area : 20.25 Perimeter : 18.0 Color all four sides Triangle side1 : 3.0 side2 : 4.0 side3 : 5.0 Area : 6.0 Perimeter : 12.0 Color all three sides Square side : 2.5 Area : 6.25 Perimeter : 10.0 Color all four sides
UML
Do ask if any doubt. Please upvote.