Este exercício saiu no teste de 2013/02/04.
Considere o seguinte programa em Java:
abstract class Thing {
public abstract String doIt();
public String toString() { return doIt(); }
}
class Blob extends Thing {
public String doIt() { return "a blob"; }
}
class Something {
public String doSomething() { return "something"; }
}
class Piece extends Thing {
Something _else;
public Piece(Something something) { _else = something; }
public String doIt() { return _else.doSomething(); }
}
class Box {
private Thing _thing;
public Box(Thing t) { _thing = t; }
public void open() {
System.out.println("The box contains " + this);
}
public String toString() { return _thing.toString(); }
}
public class App {
public static void main(String args[]) {
Box b1 = new Box(new Blob());
Box b2 = new Box(new Piece(new Something()));
b1.open();
b2.open();
}
}
Desenhe o diagrama de sequência UML correspondente à execução do programa, incluindo as etapas de criação dos objectos. O diagrama de sequência deve conter os nomes das mensagens trocadas (não é necessário representar os argumentos dessas mensagens nem as de retorno; represente todas as chamadas ao método println).