# 4  Designing Methods – Part 2

## Methods for Unions and Self-Referential Data

We will focus on geometric shapes - a circle, a square, and a shape that is a combination of two shapes, the top and the bottom one. Recall the data definition as given by the class diagram:

```                        +-------+
| Shape |<--------------------------+
+-------+                           |
+-------+                           |
|                               |
/ \                              |
---                              |
|                               |
---------------------------------------            |
|                  |                  |            |
+--------------+   +--------------+   +--------------+    |
| Square       |   | Circle       |   | Combo        |    |
+--------------+   +--------------+   +--------------+    |
+-| Posn nw      | +-| Posn center  |   | Shape top    |----+
| | int size     | | | int radius   |   | Shape bottom |----+
| | IColor color | | | IColor color |   +--------------+
| +-------------+  | +--------------+
+----+ +-----------+
| |
v v
+-------+
| Posn  |
+-------+
| int x |
| int y |
+-------+
```

1. Design the method `totalArea` that computes the total area of a shape. For the shape that consists of two components add the areas - as if you were measuring how much paint is needed to paint all the components.

You will need to use math functions, such as square root. The following example shows how you can use the math function, and how to test `double`s for equality. (You can only make sure they are different only within some given tolerance.)