|
|
Line 1: |
Line 1: |
| Este exercício saiu no teste de 2010/01/21.
| | #REDIRECT [[ist:Introdução à Modelação com UML/Ghost in the Shell -- tick-tock]] |
| | |
| == Problema ==
| |
| | |
| Considere o seguinte programa em Java:
| |
| <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();
| |
| //!DIAG
| |
| shell.tick(); shell.tock(); shell.tick();
| |
| }
| |
| }
| |
| </java5>
| |
| | |
| Desenhe o diagrama de sequência UML correspondente à execução do programa acima, incluindo as etapas de criação dos objectos (ignore as linhas do programa assinaladas com //!DIAG). O diagrama de sequência deve conter os nomes das mensagens trocadas (não é necessário representar os argumentos dessas mensagens nem as de retorno).
| |
| | |
| == Solução ==
| |
| | |
| Note-se que alguns objectos não indicam variáveis associadas (os resultados da criação desses objectos são imediatamente passados como argumentos de outros métodos).
| |
| | |
| [[Image:PO-20100121-seq.png]]
| |
| | |
| [[category:Ensino]]
| |
| [[category:PO]]
| |
| [[category:PO Exemplos]]
| |
| [[category:Java]]
| |
| [[category:UML]]
| |