Introdução à Modelação com UML/Livros, Imagens, etc.

From Wiki**3

< Introdução à Modelação com UML

Este exercício saiu no teste de 2009/01/24.

Problema

Considere o seguinte programa em Java:

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());
  }
}

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).

Solução

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).

PO-Janeiro2009-seq.png