|
|
(2 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é 2017/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]]
| |