Ybadoo - Soluções em Software Livre
Turmas
1º Semestre de 2017

Questão 01

(POSCOMP, 2016) Assinale a alternativa correta em relação ao padrão de projeto Singleton, cuja intenção é garantir que uma classe tenha somente uma instância, fornecendo um ponto global de acesso à mesma.

a. possui apenas 2 (duas) classes.

b. é instanciado através da chamada de um método público e estático.

c. possui um membro privado não estático da própria classe.

d. tem que ter o construtor público para funcionar.

e. não é um padrão de criação.

Questão 02

(Brizeno, 2011) O padrão de projeto Composite visa compor objetos numa estrutura de árvore para representar hierarquias do tipo partes-todo, permitindo que os clientes tratem objetos individuais e composições de objetos de maneira uniforme. O padrão de projeto Interpreter define uma representação para a gramática de uma dada linguagem, juntamente com um interpretador que usa tal representação para interpretar sentenças nesta linguagem. Analise as assertivas a seguir, a respeito das semelhanças e diferenças entre os padrões de projeto Composite e Interpreter.

  1. Os padrões de projeto Composite e Interpreter utilizam a ideia de uma árvore, já que existe uma classe folha ou terminal e uma classe nó ou composta em suas estruturas.
  2. O padrão de projeto Interpreter define um algoritmo padrão de interpretação e deixa alguns pontos que deverão ser implementados em suas subclasses, enquanto que no padrão de projeto Composite, as classes folha e nó não devem possuir subclasses.
  3. O padrão de projeto Composite obrigatoriamente define métodos para o gerenciamento da estrutura da árvore, enquanto que no padrão de projeto Interpreter, tais métodos são desnecessários, uma vez que a árvore é utilizada apenas para facilitar a visualização.

Quais das assertivas apresentadas estão corretas?

a. apenas a assertiva I.

b. apenas a assertiva II.

c. apenas as assertivas I e II.

d. apenas as assertivas I e III.

e. apenas as assertivas II e III.

Questão 03

(IF-PE, 2016) Observe as assertivas a seguir:

  1. Com frequência, equipes de desenvolvimento de software escrevem classes que proveem funcionalidades similares às de outras classes já existentes. Esse padrão se aplica a qualquer contexto em que se deseja implementar funcionalidades já implementadas em outra classe, mas com interface diferente da classe já implementada. Esse padrão define uma nova classe de maneira que ela contenha uma instância da classe velha como um atributo privado, e implemente cada método da nova classe usando métodos da classe antiga.
  2. Fornece uma interface unificada para um conjunto de interfaces em um subsistema. Define uma interface de nível mais alto que torna o subsistema mais fácil de ser usado.
  3. Define o esqueleto de um algoritmo em uma operação, postergando alguns passos para as subclasses. Permite que subclasses redefinam certos passos de um algoritmo sem mudar a estrutura do mesmo. Esse padrão pode ser usado para implementar as partes invariantes do algoritmo uma só vez e deixar para as subclasses a implementação do comportamento que pode variar.
  4. Evita o acoplamento do remetente de uma solicitação ao seu receptor ao dar a mais de um objeto a oportunidade de tratar a solicitação. Encadeia os objetos receptores, passando a solicitação ao longo da cadeia até que um objeto a trate. Esse padrão é utilizado quando mais de um objeto pode tratar uma solicitação e o objeto que a tratará não é conhecido a priori. O objeto que trata a solicitação é escolhido automaticamente.
  5. Você começou a trabalhar em um projeto que utiliza tecnologia Java RMI. Nesse projeto, é implementado um padrão de projeto que provê um ponto através do qual um objeto controla o acesso a outro. No projeto em questão, um objeto remoto que contém a implementação real é acessado através de um outro objeto local, de forma que o objeto local controla o acesso ao remoto. Para isso, ambos possuem a mesma interface.

As assertivas acima descrevem, respectivamente, os seguintes padrões de projeto:

a. Adapter, Facade, Template Method, Chain of Responsibility e Proxy.

b. Facade, Adapter, Template Method, Chain of Responsibility e Decorator.

c. Adapter, Facade, Decorator, Command e Proxy.

d. Adapter, Facade, Template Method, Command e Interpreter.

e. Memento, Strategy, Chain of Responsibility, Template Method e Proxy.

Questão 04

(Brizeno, 2011) Uma aplicação de e-commerce precisa se comunicar com vários bancos diferentes para prover aos seus clientes mais possibilidades de pagamento, atingindo assim um número maior de clientes e facilitando suas vidas. Ao modelar uma forma de execução do pagamento, dado que precisamos selecionar um entre vários bancos disponíveis, a primeira ideia que surge é utilizar uma estrutura de decisão para verificar, dado um parâmetro, qual o banco correto deve ser utilizado. Poderíamos utilizar os padrões de projeto Abstract Factory ou Factory Method para gerar o objeto correto para ser utilizado pela aplicação, mas continuaríamos utilizando uma estrutura de decisão. Qual dos padrões de projeto apresentados a seguir poderia ser utilizado na solução do problema proposto, eliminando a necessidade de uma estrutura de decisão para decidir qual banco deve ser utilizado.

a. Bridge - separa uma abstração da sua implementação, de modo que as duas possam variar independentemente.

b. Chain of Responsibility - evita o acoplamento do remetente de uma solicitação ao seu destinatário, dando a mais de um objeto a chance de tratar a solicitação.

c. Mediator - define um objeto que encapsula como um conjunto de objetos interage, promovendo o acoplamento fraco ao evitar que os objetos se refiram explicitamente uns aos outros.

d. Strategy - define uma família de algoritmos, encapsular cada um deles e fazê-los intercambiáveis, permitindo que o algoritmo varie independentemente dos clientes que o utilizam.

e. Template Method - define o esqueleto de um algoritmo em uma operação, postergando a definição de alguns passos para subclasses, permitindo que as subclasses redefinem certos passos de um algoritmo sem mudar sua estrutura.

Questão 05

(UFAL, 2016) A adoção de padrões de projeto proporciona uma reutilização estratégica durante o desenvolvimento de software, uma vez que promove o reuso de soluções previamente validadas e notadamente bem conhecidas. A figura apresenta um diagrama de classes que modela o controlador responsável por controlar o nível de dificuldade de um jogo eletrônico. Vale salientar que o nível de dificuldade pode ser ajustado em tempo de execução, a partir do perfil de cada jogador.

Diagrama de classes
Diagrama de classes

Assinale a alternativa que representa o padrão de projeto que foi utilizado no exemplo apresentado na figura.

a. Observer, uma vez que o controlador precisa monitorar os níveis de dificuldade.

b. State, uma vez que este padrão possui o propósito de facilitar mudanças dinâmicas na execução dos métodos.

c. Composite, pois os diversos níveis de dificuldade estão representados através de uma hierarquia bem definida.

d. Chain of Responsability, uma vez que não se sabe a priori qual o nível de dificuldade que será utilizado, variando no decorrer da execução.

e. Command, uma vez que cada nível de dificuldade representa um comando complementar do jogo, representando, assim, diferentes formas de acionar o jogo.

Questão 06

Um sistema é composto por uma estação meteorológica (EstacaoMeteorologica), responsável por fornecer dados de temperatura, umidade e pressão, e por três entidades de visualização (DadosDisplay, MinimoDisplay e MaximoDisplay), que necessitam dos dados atualizados dessa estação, ou seja, a cada nova atualização na estação essas entidades precisam ser informadas. O código existente do sistema é apresentado a seguir.

public class EstacaoMeteorologica
{
private float temperatura, umidade, pressao;

public void setMedicoes(float temperatura, float umidade, float pressao)
{
this.temperatura = temperatura;
this.umidade = umidade;
this.pressao = pressao;
}
}

public class DadosDisplay
{
private float temperatura, umidade, pressao;

public void display()
{
System.out.println("Temperatura atual: " + temperatura);
System.out.println("Umidade atual: " + umidade);
System.out.println("Pressão atual: " + pressao);
}
}

public class MinimoDisplay
{
private float temperatura, umidade, pressao;

public void display()
{
System.out.println("Temperatura mínima: " + temperatura);
System.out.println("Umidade mínima: " + umidade);
System.out.println("Pressão mínima: " + pressao);
}
}

public class MaximoDisplay
{
private float temperatura, umidade, pressao;

public void display()
{
System.out.println("Temperatura máxima: " + temperatura);
System.out.println("Umidade máxima: " + umidade);
System.out.println("Pressão máxima: " + pressao);
}
}

E agora, como informamos as entidades de display sobre as atualizações em EstacaoMeteorologica. Uma solução possível seria colocar dentro de EstacaoMeteorologica variáveis de instância de cada um dos tipos de display, mas nesse caso, toda vez que fosse criado e/ou removido um novo display, a EstacaoMeteorologica deveria ser modificada, dificultando a atualização do sistema como um todo.

Qual padrão de projeto deveria ser utilizado para solucionar este problema, de modo que a solução proposta permita a inclusão e/ou exclusão de displays de forma fácil e transparente para a EstacaoMeteorologica?

a. Abstract Factory - fornece uma interface para criação de famílias de objetos relacionados ou dependentes sem especificar suas classes concretas.

b. Factory Method - define uma interface para criar um objeto, mas deixa as subclasses decidirem qual classe a ser instanciada.

c. Mediator - define um objeto que encapsula como um conjunto de objetos interage.

d. Observer - define uma dependência um-para-muitos entre objetos, de modo que, quando um objeto muda de estado, todos os seus dependentes são automaticamente notificados e atualizados.

e. Visitor - representa uma operação a ser executada sobre os elementos da estrutura de um objeto.

Questão 07

Apresente o diagrama UML da solução proposta, considerando o padrão de projeto selecionado na questão 06.

Diagrama de classes
Diagrama de classes

Questão 08

Apresente a implementação da classe EstacaoMeteorologica, adotando o padrão de projeto selecionado na questão 06.

public class EstacaoMeteorologica
{
private float temperatura, umidade, pressao;

public float getTemperature()
{
return temperature;
}

public float getUmidadee()
{
return umidade;
}

public float getPressao()
{
return pressao;
}

public void setMedicoes(float temperatura, float umidade, float pressao)
{
this.temperatura = temperatura;
this.umidade = umidade;
this.pressao = pressao;

notify();
}
}