Introdução à Modelação com UML/Ghost in the Shell

From Wiki**3

< Introdução à Modelação com UML
Revision as of 21:54, 4 November 2013 by Root (talk | contribs) (Created page with "Este exercício saiu no teste de 2011/01/10. == Problema == Considere o seguinte programa em Java: <java5> public abstract class Shell { protected Ghost _ghost; protected ...")

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Este exercício saiu no teste de 2011/01/10.

Problema

Considere o seguinte programa em Java:

<java5> public abstract class Shell {

 protected Ghost _ghost;
 protected Shell(Ghost ghost) { 
   _ghost = ghost;
   System.out.println(getClass().getName());
 }
 public abstract boolean isOperational();
 public abstract void powerOn();

}

public class Virtual extends Shell {

 public Virtual(Ghost ghost) { super(ghost); }
 public boolean isOperational() { return _ghost.isHappy(); }
 public void powerOn() { System.out.println("always on: nothing to do"); }

}

public class Physical extends Shell {

 private boolean _poweredOn = false;
 public Physical(Ghost ghost) { super(ghost); powerOn(); }
 public boolean isOperational() { return _poweredOn && _ghost.isHappy(); }
 public void powerOn() { _poweredOn = true; }

}

public class NotReadyException extends Exception {}

public class ShellTester {

 public void assertOperational(Shell shell) throws NotReadyException {
   if (!shell.isOperational()) {
     throw new NotReadyException();
   }
 }

}

public class Ghost {

 String _name;
 public Ghost(String name) { _name = name; }
 public boolean isHappy() { return true; /* ghosts are happy */ }

}

public class Application {

 public static void main(String args[]) {
   Shell kusanagi = new Virtual(new Ghost("草薙素子"));
   Shell batou = new Physical(new Ghost("バトー"));
   ShellTester tester = new ShellTester();
   try { tester.assertOperational(kusanagi); }
   catch (NotReadyException e) { System.out.println("Kusanagi not ready!"); }
   try { tester.assertOperational(batou); }
   catch (NotReadyException e) { System.out.println("Batou not ready!"); }
 }

} </java5>

Desenhe o diagrama de sequência UML correspondente à execução do programa, 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 de retorno; não é necessário explicitar o construtor de Shell).

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

PO-20110110-seq.png