Um design pattern descreve uma solução geral comprovada e re...

Próximas questões
Com base no mesmo assunto
Ano: 2013 Banca: FCC Órgão: DPE-SP Prova: FCC - 2013 - DPE-SP - Programador de computador |
Q304606 Arquitetura de Software
Um design pattern descreve uma solução geral comprovada e reutilizável para um problema recorrente no desenvolvimento de sistemas de software orientados a objetos. Padrões de projeto ajudam a reconhecer e implementar boas soluções para problemas comuns. Dois dos principais design patterns utilizados atualmente são descritos a seguir:

I. Visa garantir que uma classe só tenha uma única instância e prover um ponto de acesso global a ela.

II. Visa definir uma dependência um-para-muitos entre objetos para que quando um objeto mudar de estado os seus dependentes sejam notificados e atualizados automaticamente.

Os design patterns descritos em I e II são, respectivamente:
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

A alternativa correta é a Alternativa A - Singleton e Observer.

Vamos analisar cada um dos padrões de projeto descritos na questão:

Descrição I: "Visa garantir que uma classe só tenha uma única instância e prover um ponto de acesso global a ela."

Este enunciado refere-se ao padrão de projeto Singleton. O Singleton é utilizado para garantir que uma classe tenha apenas uma instância durante toda a execução do programa e fornece um ponto de acesso global a essa instância. Este padrão é útil em situações onde é necessário controlar o acesso a algum recurso compartilhado, como uma conexão de banco de dados ou um arquivo de configuração.

Descrição II: "Visa definir uma dependência um-para-muitos entre objetos para que quando um objeto mudar de estado os seus dependentes sejam notificados e atualizados automaticamente."

Este enunciado refere-se ao padrão de projeto Observer. O Observer permite que um objeto (o sujeito) notifique automaticamente um conjunto de objetos dependentes (os observadores) sobre qualquer mudança de estado. Este padrão é utilizado frequentemente em sistemas onde é importante que a mudança de estado de um objeto seja acompanhada por outros objetos, como no caso de interfaces gráficas ou sistemas de eventos.

Com isso, a Alternativa A é a correta porque identifica corretamente os padrões Singleton e Observer de acordo com as descrições fornecidas.

Vamos agora analisar as alternativas incorretas:

Alternativa B - Facade e Adapter: O padrão Facade fornece uma interface simplificada para um conjunto de interfaces em um subsistema, e o padrão Adapter permite que interfaces incompatíveis trabalhem juntas. Nenhum desses padrões se encaixa nas descrições fornecidas na questão.

Alternativa C - Composite e Adapter: O padrão Composite compõe objetos em estruturas de árvore para representar hierarquias parte-todo, e o Adapter é o mesmo mencionado na alternativa B. Novamente, esses padrões não correspondem às descrições I e II.

Alternativa D - Singleton e Command: Embora o Singleton esteja correto, o padrão Command encapsula uma solicitação como um objeto, permitindo parametrizar clientes com filas, solicitações e operações. Este não corresponde à descrição II.

Alternativa E - Facade e Observer: O Observer está correto para a descrição II, mas o Facade não corresponde à descrição I, que é específica para o padrão Singleton.

Espero que esta explicação tenha esclarecido como os padrões de projeto Singleton e Observer se aplicam às descrições da questão. Caso tenha mais dúvidas, estarei à disposição para ajudar.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

Singleton -
Visa garantir que uma classe só tenha uma única instância e prover um ponto de acesso global a ela.
Observer -
Visa definir uma dependência um-para-muitos entre objetos para que quando um objeto mudar de estado os seus dependentes sejam notificados e atualizados automaticamente.
Facade - Visa simplificar o acesso a diversas classes complexas (ex. uma API). Por exemplo, o envio de e-mail, ao invés de instanciar várias classes e executar diversos métodos, é criada um classe com o método enviarEmail(args[]) que faz tudo isto, encapsulando o restante para o programador.
Adapter - Este padrão é utilizado para 'adaptar' a interface de uma classe. O Adapter permite que classes com interfaces incompatíveis possam interagir. Funciona como um adaptador, por exemplo, posso ter dados em um arquivo XML e em uma base de dados, crio adpatadores para acessar tanto a base quanto o XML que possuam os mesmos atributos e métodos, Depois posso criar uma classe que consolide estes dois adaptadores para ser usada pelo programador.
Composite -
é um padrão de projeto de software utilizado para representar um objeto que é constituído pela composição de objetos similares a ele. Neste padrão, o objeto composto possui um conjunto de outros objetos que estão na mesma hierarquia de classes a que ele pertence. O padrão composite é normalmente utilizado para representar listas recorrentes - ou recursivas - de elementos. Além disso, esta forma de representar elementos compostos em uma hierarquia de classes permite que os elementos contidos em um objeto composto sejam tratados como se fossem um único objeto. Desta forma, todos os métodos comuns às classes que representam objetos atômicos da hierarquia poderão ser aplicáveis também ao conjunto de objetos agrupados no objeto composto.

Os padrões de projetos do GOF são 23, divididos em três grupos: Criacionais (5), estruturais (7) e comportamentais (11)

CRIACIONAL: Abrange a configuração e inicialização de objetos e classes. 
ESTRUTURAL: Lida com as interfaces e a implementação das classes e dos objetos. 
COMPORTAMENTAL: Lida com as interações dinâmicas entre grupos de classes e objetos. 

Singleton pertence ao grupo criacional e o Observer ao comportamental.

Facade, adapter, composite = estruturais

Command = comportamental

O ideal no estudo dos padrões é entendê-los, por isso recomendo videoaulas do www.provasdeti.com.br, pois são padrões difíceis de entender apenas estudando pelo livro Design Patterns, os exemplos do livro e a abordagem utilizada não é muito amigável.

a-

Conforme os nomes dizem, singleton remete à simples instancia, enquanto que observer observa as dependencias e as atualiza em caso de alterações de estado.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo