1.124J | Fall 2000 | Graduate

Foundations of Software Engineering

Lecture Notes

Shape Example

Topics

  1. Point.java
  2. Shape.java
  3. Circle.java
  4. Square.java
  5. Main.java

1. Point.java

public class Point
{
private float mfX, mfY;

public Point() {
mfX = mfY = 0.0f;
}

public Point(float fX, float fY) {
mfX = fX;
mfY = fY;
}

public Point(Point p) {
mfX = p.mfX;
mfY = p.mfY;
}

// You will generally not need to write a finalizer. Member variables that
// are of reference type will be automatically garbage collected once they
// are no longer in use. Finalizers are only for cleaning up system resources,
// e.g. closing files.
protected void finalize() throws Throwable {
System.out.print(“In Point finalizer: “);
print();
super.finalize();  // If you have to write a finalizer, be sure to do this.
}

public void print() {
System.out.println(“Point print: (” + mfX + “,” + mfY + “)”);
}
}

2. Shape.java

public abstract class Shape
{
private Point mCenter;
protected static int miCount = 0;  // An example of a static member variable.

public Shape() {
mCenter = new Point();
}

public Shape(Point p) {
mCenter = new Point(p);
}

// You will generally not need to write a finalizer. Member variables that
// are of reference type (i.e. mCenter) will be automatically garbage collected
// once they are no longer in use. Finalizers are only for cleaning up system
// resources, e.g. closing files.
protected void finalize() throws Throwable {
System.out.print(“In Shape finalizer: “);
print();
super.finalize();  // If you have to write a finalizer, be sure to do this.
}

public void print() {
System.out.print(“Shape print: mCenter = “);
mCenter.print();
}

// An example of a static member function.
public static int getCount() {
return miCount;  // Can only access static members in static functions.
}
}

3. Circle.java

public class Circle extends Shape
{
private float mfRadius;

public Circle() {
super();  // Call the base class constructer.
mfRadius = 0.0f;
miCount++;  // Can access this because it is protected in base class.
}

public Circle(float fX, float fY, float fRadius) {
super(new Point(fX, fY));  // Call the base class constructer.
mfRadius = fRadius;
miCount++;
}

public Circle(Point p, float fRadius) {
super(p);  // Call the base class constructer.
mfRadius = fRadius;
miCount++;
}

// You will generally not need to write a finalizer. Member variables that
// are of reference type (i.e. mCenter) will be automatically garbage collected
// once they are no longer in use. Finalizers are only for cleaning up system
// resources, e.g. closing files.
protected void finalize() throws Throwable {
System.out.print(“In Circle finalizer: “);
print();
super.finalize();  // If you have to write a finalizer, be sure to do this.
}

public void print() {
System.out.print(“Circle print: mfRadius = " + mfRadius + " “);
super.print();
}
}

4. Square.java

public class Square extends Shape
{
private float mfLength;

public Square() {
super();  // Call the base class constructer.
mfLength = 0.0f;
miCount++;  // Can access this because it is protected in base class.
}

public Square(float fX, float fY, float fLength) {
super(new Point(fX, fY));  // Call the base class constructer.
mfLength = fLength;
miCount++;
}

public Square(Point p, float fLength) {
super(p);  // Call the base class constructer.
mfLength = fLength;
miCount++;
}

// You will generally not need to write a finalizer. Member variables that
// are of reference type (i.e. mCenter) will be automatically garbage collected
// once they are no longer in use. Finalizers are only for cleaning up system
// resources, e.g. closing files.
protected void finalize() throws Throwable {
System.out.print(“In Square finalizer: “);
print();
super.finalize();  // If you have to write a finalizer, be sure to do this.
}

public void print() {
System.out.print(“Square print: mfLength = " + mfLength + " “);
super.print();
}
}

5. Main.java

public class Main
{
final static int MAX = 3;  // An example of a constant class member variable.

public static void main(String[] args)
{
// Create some Point objects.
Point a;
a = new Point();
a.print();

Point b;
b = new Point(2,3);
b.print();

Point c = new Point(b);
c.print();

// Print out the total number of Shapes created so far. At this point,
// no Shapes have been created, however, we can still access static member
// function Shape.getCount().
System.out.println(“Total number of Shapes = " + Shape.getCount());

// Create a Circle object and hold on to it using a Shape reference.
Shape s;
s = new Circle(a,1);
s.print(); // This will call the print method in Circle.

// Create an array of Shapes.
Shape[] shapeArray;
shapeArray = new Shape[MAX];  // An array of Shape references.

shapeArray[0] = new Square();
shapeArray[1] = new Circle(4,5,2);
shapeArray[2] = new Square(3,3,1);

// Print out the array of Shapes. The length member gives the array size.
for (int i = 0; i < shapeArray.length; i++) {
shapeArray[i].print();
}

// Print out the total number of Shapes created so far. At this point,
// 4 Shapes have been created.
System.out.println(“Total number of Shapes = " + Shape.getCount());

// We can mark the objects for destruction by removing all references to
// them. Normally, we do not need to call the garbage collector explicitly.
// Note: here we have not provided a way to decrement the Shape counter.
a = b = c = null;
s = null;
for (int i = 0; i < shapeArray.length; i++) {
shapeArray[i] = null;
}
shapeArray = null;
}
}

Course Info

Learning Resource Types
Exams with Solutions
Presentation Assignments
Programming Assignments with Examples
Written Assignments