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.