Este exercício saiu no teste de 2013/02/04.
Considere o seguinte programa em Java:
<java5> 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(); }
} </java5>
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).