Difference between revisions of "Programação com Objectos/Aula Prática 13"

From Wiki**3

< Programação com Objectos
(Exercício 2)
(Tópicos)
 
(12 intermediate revisions by the same user not shown)
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, em papel A4 manuscrito, na recepção do INESC ID, ao cuidado de David Matos, até 5ª feira, 2019/12/19 12:00 (ou em qualquer horário de dúvidas ou aula dessa semana antes desta data). A revisão de provas deste exercício realiza-se 6ª feira, 2019/12/20, 09:00-10:00, no INESC-ID.'''-->
  
 
== Exercício 1 ==
 
== Exercício 1 ==
Line 7: Line 8:
 
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).
 
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>
+
<source lang="java">
 
import java.util.ArrayList;
 
import java.util.ArrayList;
 
abstract class Printable {
 
abstract class Printable {
Line 42: Line 43:
 
     book.add(page1);
 
     book.add(page1);
 
     book.add(page2);
 
     book.add(page2);
     System.out.println(book.show());  
+
     System.out.println(book.show());
 
   }
 
   }
 
}
 
}
</java5>
+
</source>
  
 
* [[Programação_com_Objectos/Teste_de_2009/01/24#2.7. Diagrama de sequência (UML)|resolução]] (parcial) - procurar resolver antes de consultar
 
* [[Programação_com_Objectos/Teste_de_2009/01/24#2.7. Diagrama de sequência (UML)|resolução]] (parcial) - procurar resolver antes de consultar
Line 53: Line 54:
 
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).
 
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>
+
<source lang="java">
 
public abstract class Ghost {
 
public abstract class Ghost {
 
   public Ghost() { System.out.println(getClass().getName()); }
 
   public Ghost() { System.out.println(getClass().getName()); }
Line 85: Line 86:
 
   }
 
   }
 
}
 
}
</java5>
+
</source>
  
 
* [[Programação_com_Objectos/Teste_de_2010/01/21#2.7. Diagrama de sequência (UML)|resolução]] (parcial) - procurar resolver antes de consultar
 
* [[Programação_com_Objectos/Teste_de_2010/01/21#2.7. Diagrama de sequência (UML)|resolução]] (parcial) - procurar resolver antes de consultar

Latest revision as of 18:21, 28 September 2020

Tópicos

  • Diagramas de sequência UML

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

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

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();
   }
}
  • resolução (parcial) - procurar resolver antes de consultar