Este exercício saiu no teste de 2013/01/17.
Considere o seguinte programa em Java:
public abstract class Animal {
private String _name;
protected Animal(String name) { _name = name; }
public final void processFood(Food food) {
eat(food);
digest(food);
}
public void eat(Food food) { System.out.println(_name + " ate " + food); }
public abstract void digest(Food food);
}
public class Cow extends Animal {
public Cow(String name) { super(name); }
public void digest(Food food) {
System.out.println("Using chambers 1 and 2");
System.out.println("Using chambers 3 and 4");
}
}
public class Cat extends Animal {
public Cat(String name) { super(name); }
public void eat(Food food) {
super.eat(food);
System.out.println("Ate some fur!");
}
public void digest(Food food) {
System.out.println("Using stomach on " + food);
System.out.println("Expelling fur ball");
}
}
public class Food {
public String toString() { return "some food"; }
}
public class App {
public static void main(String args[]) {
Animal cow = new Cow("Daisy");
Animal cat = new Cat("Puss");
cow.processFood(new Food());
cat.processFood(new Food());
}
}
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).