Este exercício saiu no teste de 2009/01/24.
Considere o seguinte programa em Java: <text> import java.util.ArrayList; abstract class Printable {
public abstract String show(); public void add(Printable p) { throw new UnsupportedOperationException(); }
}
class Paragraph extends Printable {
public String show() { return "[paragraph]"; }
}
class Image extends Printable {
public String show() { return "[image]"; }
}
class Album extends Printable {
public ArrayList<Printable> _printables = new ArrayList<Printable>(); public void add(Printable p) { _printables.add(p); } public String show() { String s = "["; for (Printable p: _printables) s += p.show(); s += "]"; return s; }
}
class Page extends Album {} class Book extends Album {}
public class App {
public static void main(String args[]) { Page page1 = new Page(); page1.add(new Paragraph()); page1.add(new Image()); Page page2 = new Page(); //!DIAG page2.add(new Paragraph()); //!DIAG page2.add(new Image()); //!DIAG Book book = new Book(); book.add(page1); book.add(page2); //!DIAG System.out.println(book.show()); }
} </text>
Desenhe o diagrama de sequência UML correspondente à execução do programa acima (excepto as linhas marcadas com //!DIAG), 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 correspondentes ao retorno).
Note-se que alguns objectos não indicam variáveis associadas (os resultados da criação desses objectos são imediatamente passados como argumentos de outros métodos).