Algorithms and OOD (CSC 207 2014F) : Labs

Laboratory: Polymorphism in Java


Summary: In today's laboratory, you will explore issues of polymorphism in Java.

Preparation

a. Fork and clone the repository at https://github.com/Grinnell-CSC207/lab-polymorphism.

b. Import that repository into Eclipse.

Exercises

Exercise 1: Square Roots

a. Scan through MathUtils.java and verify that the square root method has the form described in the reading.

b. Run the main method of MathExpt to see that it behaves as expected.

c. Add lines to the main method of MathExpt so that it computes the square root of an Integer, a Float, a Double, a BigInteger, a BigDecimal, and a double.

Exercise 2: Simple Lines

As a first step in understanding the layout methods, add code to the main method of TBExpt.java so that it uses TBUtils.print to print a simple block. I would suggest something like the following.

    TextBlock block = new TextLine("This is a test.");
    TBUtils.print(pen,block);

Exercise 3: Boxed Text

The reading claims that it is possible to combine text blocks together by using one as a parameter to the constructor of another. (In fact, that seems to be the only way to create a BoxedBlock.) Try creating and printing out each of the following:

  • a boxed line (of your choice);
  • a boxed boxed line (of your choice); and
  • a boxed empty line.

Exercise 4: Composing Text

The classes HComposition and VComposition permit you to compose pairs of text blocks horizontally and vertically. For example, new HComposition(tb1,tb2) makes a text block by putting tb1 and tb2 side-by-side, and new VComposition(tb1,tb2) makes a text block by putting tb1 on top of tb2.

a. Using VComposition, TextLine, and BoxedBlock, build the following text block:

+-------+
|Hello  |
|Goodbye|
+-------+

b. Using VComposition, TextLine, and BoxedBlock, build the following text block:

+-----+
|Hello|
+-----+
+-------+
|Goodbye|
+-------+

c. Using HComposition, TextLine, and BoxedBlock, build the following block:

+-----+Goodbye
|Hello|
+-----+

d. Using HComposition, TextLine, and BoxedBlock, build the following block:

Goodbye+-----+
       |Hello|
       +-----+

Exercise 5: Writing HComposition

Assume that HComposition has two fields,

  TextBlock left;
  TextBlock right;

a. Sketch how you might write

  • String row(int rownum),
  • int width(), and
  • int height().

You can look at the source code of BoxedBlock for ideas, but please do not look at the source code of HComposition.

b. Compare your answer to the source code of HComposition.

Exercise 6: Writing VComposition

Assume that VComposition has two fields,

  TextBlock top;
  TextBlock bottom;

a. Sketch how you might write

  • String row(int rownum),
  • int width(), and
  • int height().

You can look at the source code of BoxedBlock and HComposition for ideas, but please do not look at the source code of VComposition.

b. Compare your answer to the source code of VComposition.

For Those With Extra Time

If you find that you have extra time, do one or both of the following.

Extra 1: Create Compositions

Use the various implementations of TextBlock to make an “interesting” textual composition.

Extra 2: New Compound Blocks

Develop a new class that, like BoxedBlock or HComposition, represents a new block based on one or more previously defined blocks.

Acknowledgments

Thanks to LBB and TD for pointing out typos.