Programação com Objectos/Aula Prática 13: Difference between revisions
From Wiki**3
< Programação com Objectos
| No edit summary | No edit summary | ||
| Line 2: | Line 2: | ||
| * Diagramas de sequência UML | * 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é  | * [[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é 2018/12/21 12:00 (ou em qualquer aula prática da última semana)''' | ||
| == Exercício 1 == | == Exercício 1 == | ||
Revision as of 13:24, 5 September 2018
Tópicos
- Diagramas de sequência UML
- Exercício C++ (semana 13) -- entregar na recepção do INESC ID, ao cuidado de David Matos, até 2018/12/21 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>
- 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>
- resolução (parcial) - procurar resolver antes de consultar