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

From Wiki**3

< Introdução à Modelação com UML
Revision as of 22:02, 4 November 2013 by Root (talk | contribs) (Problema)

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

Problema

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

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