(→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). | ||
− | < | + | <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()); |
} | } | ||
} | } | ||
− | </ | + | </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). | ||
− | < | + | <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: | ||
} | } | ||
} | } | ||
− | </ | + | </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 |
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());
}
}
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();
}
}