Introdução à Modelação com UML/Galinha com fome
From Wiki**3
< Introdução à Modelação com UML
Este exercício saiu no teste de 2012/01/30.
Problema
Considere o seguinte programa em Java:
<java5> public class Chicken {
private Stomach _stomach = new Hungry(); public void eat() { _stomach.eat(); } public void sleep() { _stomach.sleep(); } public void setMood(Stomach stomach) { _stomach = stomach; }
}
public abstract class Stomach {
protected Stomach() { System.out.println("Hmmm..."); } public void eat() { System.out.println("..."); } public void sleep() { System.out.println("..."); }
}
public class Hungry extends Stomach {
public Hungry() { System.out.println("I'm hungry!!"); } public void eat() { System.out.println("Eating..."); } public void sleep() { System.out.println("I'm too hungry to sleep!!"); }
}
public class Sated extends Stomach {
public Sated() { System.out.println("I'm sleepy!!"); } public void eat() { System.out.println("I'm not hungry..."); } public void sleep() { System.out.println("ZzZz..."); }
}
public class Farm {
public static void main(String args[]) { Chicken chicken = new Chicken(); chicken.eat(); chicken.setMood(new Sated()); chicken.sleep(); chicken.setMood(new Hungry()); chicken.sleep(); }
} </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; represente todas as chamadas ao método println).
Solução
Note-se que alguns objectos (anotados) não definem as variáveis associadas no momento indicado.