Programação com Objectos/Teste de 2012/01/30

From Wiki**3

< Programação com Objectos

Parte 1

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?

  • Separação entre interface e implementação
  • Isolamento de responsabilidades e de consequências
  • Esconder a implementação de módulos e os seus dados (objectos)
  • Java: palavras chave de controlo de acesso
  • Java: explicitação do conceito de interface e de classe abstracta

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?

  • Cliente e objectos do estado
  • Delegação de funcionalidade no objecto de estado actual
  • Comutação entre objectos de estado opaca para o cliente
  • Simplicidade de estruturação do esquema de transições
  • Explicitação da máquina de estados
  • Remoção de código de verificação de condições no cliente

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.

  • Superclasse (possivelmente, mas não necessariamente) abstracta define algoritmo
  • Superclasse especifica passos do algoritmo (métodos, possivelmente abstractos, mas não necessariamente)
  • Subclasses definem os métodos que correspondem aos passos do algoritmo
  • Inversão de controlo: controlo a partir da superclasse (princípio de Hollywood - "don't call us, we'll call you")
  • No processo de herança, as subclasses chamam o código da superclasses e, de um modo geral, pelo mecanismo de redefinição detêm o controlo da execução e da definição dos métodos

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.

  • Cliente é definido em termos de conceitos gerais, tando relativamente à fábrica, como aos tipos (concretos) de objectos construídos
  • A fábrica relaciona implicitamente os tipos de objectos contruídos num todo coerente (têm sentido no mesmo contexto)
  • Cliente é "inicializado" com fábrica concreta
  • Cliente usa interface relativa à criação de objectos "gerais", mas a fábrica produz os "concretos"
  • Exemplo: escola com salas, professores, alunos, disciplinas, com variação de matérias ensinadas

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

Parte 2 (resposta múltipla)

Figura 1 (todos os métodos estão implementados)
2.1. Considere o diagrama UML da figura 1 (à direita). Qual das seguintes afirmações está correcta?
  1. doIt pode ser directamente invocado através de referências para I
  2. doThat não está definido para B
  3. B implementa a interface I (através de C)
  4. C implementa a interface I
  5. A implementa a interface I

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?

  1. Strategy
  2. Builder
  3. Visitor
  4. Template Method
  5. Abstract Factory

2.3. O padrão de desenho Composite tem por objectivo...

  1. criar objectos complexos a partir de pequenos objectos diferentes
  2. adicionar funcionalidade a um objecto adaptando a sua interface
  3. que o comportamento de um objecto mude quando o seu estado muda
  4. que os clientes tratem os objectos individuais e composições de objectos de forma uniforme
  5. estabelecer o esqueleto de um algoritmo

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?

  1. Builder
  2. Visitor
  3. Observer
  4. Abstract Factory
  5. Adapter

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?

  1. definir a classe como final
  2. definir a classe como static
  3. aplicar o padrão de desenho Proxy
  4. aplicar o padrão de desenho Singleton
  5. utilizar uma variável global, definida através da palavra reservada global

2.6. Qual das seguintes frases está correcta, relativamente a uma instância (designada por inst) de uma classe interna não static?

  1. não pode aceder aos atributos static da classe envolvente
  2. só pode invocar métodos não-static da classe envolvente
  3. não pode ter métodos que lancem excepções (iriam corromper o objecto da classe envolvente)
  4. pode aceder a qualquer atributo (privado ou não) do objecto da classe envolvente
  5. todas frases anteriores são falsas

2.7. Quais são as características que todos os objectos possuem?

  1. apenas identidade, estado e comportamento
  2. apenas estado e comportamento
  3. apenas comportamento
  4. existência
  5. dimensão e peso

2.8. Em Java, o fragmento de código catch(Exception e) { /* … */ }

  1. apanha todos os objectos que forem atirados por um throw anterior
  2. é inútil desde que exista um qualquer catch anterior
  3. o seu bloco pode lançar, ele próprio, uma excepção
  4. volta a apanhar todos os objectos, mesmo os que já tenham sido apanhados por um catch anterior
  5. não apanha nunca nenhum objecto

2.9. Em Java, o método main é especial porque...

  1. é o único método que pode criar objectos
  2. o interpretador começa sempre a execução da aplicação invocando o método main de uma determinada classe
  3. todas as classes têm de ter um método main
  4. é o único método static que uma classe pode ter
  5. só uma classe da aplicação pode ter o método main

2.10. Em Java, quando um método atribui um valor a um atributo de um objecto passado como seu argumento, esse objecto...

  1. não é alterado, porque o método recebe uma cópia do objecto
  2. não é alterado, porque essa operação nunca é permitida
  3. é alterado imediatamente
  4. é alterado, mas a alteração só é visível quando o método termina
  5. é alterado, mas só se o método não for private