m (moved Programação com Objectos - Teste de 2012/01/30 to Programação com Objectos/Teste de 2012/01/30) |
|||
(One intermediate revision by the same user not shown) | |||
Line 90: | Line 90: | ||
''Strategy'' | ''Strategy'' | ||
− | '''1.5.3.''' (1.5 val.) | + | '''1.5.3.''' (1.5 val.) [[Introdução à Modelação com UML/Galinha com fome|Galinha com fome]] |
− | + | '''1.6.''' (6.0 val.) [[Introdução à Modelação com UML/Transportadora de animais|Transportadora de animais]] | |
− | |||
− | '''1.6.''' [[Introdução à Modelação com UML/Transportadora de animais|Transportadora de animais]] | ||
== Parte 2 (resposta múltipla) == | == Parte 2 (resposta múltipla) == |
Contents |
1.1. (1.5 val.) Discuta a importância do encapsulamento e relacione-o com os conceitos de interface e implementação. Em que medida contribuem aqueles conceitos para a qualidade da programação. Como estão disponíveis em Java?
1.2. (1.5 val.) O padrão State permite simplificar a programação de máquinas de estados. Explique pormenorizadamente como é realizada a função do padrão pelos seus intervenientes. Quais são as vantagens de utilização do padrão?
1.3. (1.5 val.) O padrão de desenho Template Method permite definir métodos cujas etapas podem não estar definidas (no sentido de não estarem implementadas). Como funciona o padrão? Que significa dizer-se que há inversão de controlo no funcionamento do padrão? Contraste com o processo habitual de redefinição de métodos na presença de herança.
1.4. (1.5 val.) O padrão de desenho Abstract Factory permite abstrair a criação de objectos pertencentes a uma família de conceitos. Explique como estão organizados os conceitos envolvidos no padrão e como é a interacção com o código cliente. Dê um exemplo de aplicação.
1.5. 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>
1.5.1. (1.0 val.) Que resultado se obtém quando se executa o seguinte programa? (represente mudanças de linha com \n)
Hmmm...\nI'm hungry!!\nEating...\nHmmm...\nI'm sleepy!!\nZzZz...\nHmmm...\nI'm hungry!!\nI'm too hungry to sleep!!
1.5.2. (0.5 val.) Que padrão de desenho é usado no programa?
Strategy
1.5.3. (1.5 val.) Galinha com fome
1.6. (6.0 val.) Transportadora de animais
2.2. Que padrão de desenho permite criar famílias de objectos relacionados, de modo que os seus elementos possam ser usados de modo alternativo?
2.3. O padrão de desenho Composite tem por objectivo...
2.4. Qual é o padrão de desenho que tem o objectivo de converter a interface de uma classe numa outra interface (esperada pelos clientes) e permitir que classes possam colaborar, apesar das incompatibilidades das suas interfaces?
2.5. Quando se pretende que todos os clientes de uma classe usem sempre a mesma instância dessa classe, qual é a melhor opção?
2.6. Qual das seguintes frases está correcta, relativamente a uma instância (designada por inst) de uma classe interna não static?
2.7. Quais são as características que todos os objectos possuem?
2.8. Em Java, o fragmento de código catch(Exception e) { /* … */ }
2.9. Em Java, o método main é especial porque...
2.10. Em Java, quando um método atribui um valor a um atributo de um objecto passado como seu argumento, esse objecto...