|  |     | 
| (3 intermediate revisions by the same user not shown) | 
| Line 1: | Line 1: | 
|  | == Tópicos ==
 |  | #REDIRECT [[ist:Programação com Objectos/Aula Prática 13]] | 
|  |   |  | 
|  | * Diagramas de sequência UML
 |  | 
|  | * [[Programação com Objectos/Aula Prática 13/Exercício de C++|Exercício C++ (semana 13)]] -- '''entregar na recepção do INESC ID, ao cuidado de David Matos, até 2016/12/22 12:00 (ou em qualquer aula prática da última semana)'''
 |  | 
|  |   |  | 
|  | == Exercício 1 ==
 |  | 
|  |   |  | 
|  | Desenhe o diagrama de sequência UML correspondente à execução do programa abaixo, 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).
 |  | 
|  |   |  | 
|  | <java5>
 |  | 
|  | 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();
 |  | 
|  |     page2.add(new Paragraph());
 |  | 
|  |     page2.add(new Image());
 |  | 
|  |     Book book = new Book();
 |  | 
|  |     book.add(page1);
 |  | 
|  |     book.add(page2);
 |  | 
|  |     System.out.println(book.show()); 
 |  | 
|  |   }
 |  | 
|  | }
 |  | 
|  | </java5>
 |  | 
|  |   |  | 
|  | * [[Programação_com_Objectos/Teste_de_2009/01/24#2.7. Diagrama de sequência (UML)|resolução]] (parcial) - procurar resolver antes de consultar
 |  | 
|  |   |  | 
|  | == Exercício 2 ==
 |  | 
|  |   |  | 
|  | Desenhe o diagrama de sequência UML correspondente à execução do programa abaixo, 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).
 |  | 
|  |   |  | 
|  | <java5>
 |  | 
|  | public abstract class Ghost {
 |  | 
|  |    public Ghost() { System.out.println(getClass().getName()); }
 |  | 
|  |    public abstract void tick(Shell shell);
 |  | 
|  |    public void tock(Shell shell) {}
 |  | 
|  | }
 |  | 
|  | public class A extends Ghost {
 |  | 
|  |    public void tick(Shell shell) { shell.use( new C()); }
 |  | 
|  | }
 |  | 
|  | public class B extends Ghost {
 |  | 
|  |    public void tick(Shell shell) { shell.use( new A()); }
 |  | 
|  |    public void tock(Shell shell) { shell.use( new A()); }
 |  | 
|  | }
 |  | 
|  | public class C extends Ghost {
 |  | 
|  |    public void tick(Shell shell) { shell.use( new B()); }
 |  | 
|  |    public void tock(Shell shell) { shell.use( new A()); }
 |  | 
|  | }
 |  | 
|  | public class Shell {
 |  | 
|  |    Ghost _ghost = new A();
 |  | 
|  |    public void tick() { _ghost.tick( this); }
 |  | 
|  |    public void tock() { _ghost.tock( this); }
 |  | 
|  |    public void use(Ghost ghost) { _ghost = ghost; }
 |  | 
|  | }
 |  | 
|  | public class GhostInTheShell {
 |  | 
|  |    public static void main(String args[]) {
 |  | 
|  |      Shell shell = new Shell();
 |  | 
|  |      shell.tick();
 |  | 
|  |      shell.tick();
 |  | 
|  |      shell.tock();
 |  | 
|  |      shell.tick();
 |  | 
|  |    }
 |  | 
|  | }
 |  | 
|  | </java5>
 |  | 
|  |   |  | 
|  | * [[Programação_com_Objectos/Teste_de_2010/01/21#2.7. Diagrama de sequência (UML)|resolução]] (parcial) - procurar resolver antes de consultar
 |  | 
|  |   |  | 
|  | [[category:Ensino]]
 |  | 
|  | [[category:PO]]
 |  | 
|  | [[category:Aulas Práticas de PO]]
 |  |