OOP Lab

1. Indicate which variant of foo will be called or write "error."

class AAA {
   void foo(int x, boolean y) { ... } //v1
   void foo(double y) { ... } // v2
}

class BBB extends AAA {
   void foo(boolean x, int y) { ... } // v3
   void foo(double z) { ... } // v4
   public static void main(String[] args) {
      AAA x = new AAA();
      AAA y = new BBB();
      BBB z = new BBB();

      x.foo(3, false);
      x.foo(10);

      y.foo(3, false);
      y.foo(true, 2);
      y.foo(10);

      z.foo(3, false);
      z.foo(true, 2);
      z.foo(10);
   }
}

2. An observation has a time and an observed value. Time and value are real numbers. Two observations are equal if they have the same time and value. Here's an example of creating and displaying a set of observations:

Set<Observation> experiment = new HashSet<Observation>();
experiment.add(new Observation(98.6, 30));
experiment.add(new Observation(98.6, 40));
experiment.add(new Observation(98.6, 40));
System.out.println(experiment);

The output produced is:

 [98.6 @ 40.0, 98.6 @ 30.0]

Implement the Observation class. Be sure to include all of the necessary bookkeeping methods and overrides so that the indicated output will be produced.

3. A software company requires each class to have a non-static, parameterless method called test. This method tests the class and returns true if the class passes the test and false otherwise.

Complete the implementation of the following test driver:

class TestDriver {
   public boolean test(Collection<String> classNames) { ??? }
}

TestDriver.test gets a collection of class names as its input. It loads each class and invokes its test method. If all of the tests pass, true is returned, otherwise false is returned. Note: All tests must be run, even if some fail.

 3. A group of monsters attack a hero. They take turns decrementing the hero's health until the hero dies (health == 0). The monsters must not attempt to decrement the hero's health at the exact same time, and the monsters must be cooperative. Here's the implementation of the Warrior class:

class Warrior {
   private int health = 100;
   public void addHealth(int amt) { health += amt; }
   public void subHealth(int amt) { health -= amt; }
   public int getHealth() { return health; }
}

Finish the implementation of Monster:

class Monster extends Thread {
   private static Warrior hero = new Warrior();
   // etc.
}

4.  A command is anything that implements the Command interface:

interface Command {
   Object execute(); // returns null or a result
}

There are four types of commands: Condition, Iteration, Expression, and Block. A condition has the form

if (EXPRESSION) COMMAND else COMMAND

An iteration has the form:

while (EXPRESSION) COMMAND

A block is a sequence of one or more commands of the form:

{COMMAND; ...; COMMAND;}

Executing an expression returns a result. For example, executing the expression "3 < 2" returns the result false; executing all other types of commands returns null.

A. Draw a UML class diagram showing how the concepts mentioned are related.

B. Implement the Block class.