Você está na página 1de 4

EXERCÍCIOS – PADRÕES DE PROJETO

PARTE1: QUESTÕES

1 - Sobre a utilização de Padrões de Projetos, assinale Verdadeiro ou Falso nas afirmações abaixo: (1,5)
( VERDADEIRO ) Esses padrões resolvem problemas específicos de projetos e tornam os projetos orientados a
objetos mais flexíveis e, em última instância, reutilizáveis.

( VERDADEIRO ) Um desenvolvedor que está familiarizado com tais padrões pode aplicá-los imediatamente a
diferentes problemas de projeto, sem necessidade de redescobri-los.

( FALSO ) Expressar técnicas testadas e aprovadas as torna mais acessíveis para os desenvolvedores de novos
sistemas e com isso o tempo de construção de projetos aumenta consideravelmente.

( VERDADEIRO ) Cada padrão descreve um problema no nosso ambiente e o cerne da sua solução, de tal forma
que você possa usar essa solução mais de um milhão de vezes, sem nunca fazê-lo da mesma maneira.

( VERDADEIRO ) Os quatro elementos de um Padrão de Projeto são “nome do padrão, “problema”,


“procedimentos de utilização” e “solução”.

( FALSO ) A linguagem de programação é um ponto importante a ser definido quando se utiliza padrões de projetos
numa aplicação.

2 - Sobre Padrões de Projetos indique a qual se refere cada afirmação: (2,0)


Fornece uma interface para criação de famílias de objetos relacionados ou dependentes sem especificar suas classes
concretas: ABSTRACT FACTORY

Separa uma abstração da sua implementação, de modo que as duas possam variar independentemente: BRIDGE

Separa a construção de um objeto complexo da sua representação, de modo que o mesmo processo de construção
possa criar diferentes representações: BUILDER

Define uma família de algoritmos, encapsula cada um deles e os torna intercambiáveis: STRATEGY

Garante que uma classe tenha somente uma instância e fornece um ponto global de acesso para ela: SINGLETON

Fornece uma maneira de acessar seqüencialmente os elementos de uma agregação de objetos sem expor sua
representação subjacente: ITERATOR

Fornece uma interface unificada para um conjunto de interfaces em um subsistema: FACADE

Compõe objetos em estrutura de árvore para representar hierarquias do tipo partes-todo: COMPOSITE

3 – Indique os Padrões de Projetos de acordo com sua utilização e justifique sua resposta: (2,00)

O Composite normalmente é utilizado com: DECORATOR

O Padrão Abstract Factory pode ser utilizado em conjunto com: BRIDGE


Um padrão alternativo em relação ao Abstract factory é o: FACTORY METHOD

O Chain of Responsibility é frequentemente utilizado com: COMMAND

4 - Crie uma solução para um determinado problema identificado por você que utiliza o padrão Composite
em conjunto com o Iterator: (2,50)

Problema:

Você deseja modelar uma estrutura hierárquica de organizações, departamentos e funcionários, permitindo a iteração
uniforme sobre todas as entidades da organização, independentemente de seu tipo.

Solução:

Utilize o padrão Composite para criar uma estrutura hierárquica de classes que representam organizações,
departamentos e funcionários. Em seguida, implemente o padrão Iterator para percorrer essa estrutura de maneira
uniforme, permitindo que você acesse e manipule todas as entidades da organização, independentemente de sua
complexidade na hierarquia. Isso facilita a navegação e a operação em todos os elementos da organização de forma
transparente.

5 – Relacione dois benefícios do padrão Simple Factory e uma situação na qual ele não deve ser utilizado:
(1,5)
Benefícios do Padrão Simple Factory:

1- Simplicidade na Criação de Objetos: O Padrão Simple Factory fornece um mecanismo simples para criar objetos,
encapsulando a lógica de criação em uma única classe. Isso torna a criação de objetos mais fácil e ajuda a reduzir a
complexidade do código.

2- Desacoplamento entre o Cliente e as Classes Concretas: O cliente que utiliza o Simple Factory não precisa
conhecer as classes concretas envolvidas na criação de objetos. Isso proporciona um alto nível de desacoplamento,
tornando o código mais flexível e facilitando a manutenção, pois as mudanças na lógica de criação podem ser feitas
no Factory sem afetar o cliente.

Situação em que o Padrão Simple Factory não deve ser utilizado:

O Padrão Simple Factory pode não ser apropriado em situações em que a lógica de criação de objetos é complexa e
sujeita a mudanças frequentes. Isso ocorre porque o Simple Factory concentra toda a lógica de criação em uma única
classe, o que pode tornar essa classe complexa e difícil de manter quando há várias classes de produtos ou quando a
lógica de criação é altamente variável.

Em vez disso, em casos de complexidade significativa na criação de objetos ou quando a lógica de criação precisa
ser estendida com frequência, pode ser mais adequado utilizar o padrão Factory Method ou Abstract Factory, que
permitem a criação de famílias de objetos relacionados e fornecem maior flexibilidade na criação de objetos
complexos e variáveis.

6 - Indique duas situações para as quais uma solução via Strategy é cabível: (1,0)

1- Alterar Comportamentos Dinamicamente: Quando você tem uma classe com diferentes comportamentos e deseja
permitir que os clientes da classe escolham o comportamento desejado dinamicamente. Por exemplo, em um sistema
de processamento de pagamento, você pode ter várias estratégias de cálculo de desconto (porcentagem, valor fixo,
cupom, etc.) e deseja que os clientes possam escolher a estratégia de desconto no momento da compra.
2- Evitar a Explosão de Subclasses: Quando você tem uma classe com múltiplas variantes de um algoritmo e deseja
evitar a criação de uma grande quantidade de subclasses para cada variante. Em vez disso, você encapsula cada
variante em uma classe de estratégia separada e permite que a classe principal seja configurada com a estratégia
desejada. Isso evita a complexidade e a manutenção de um grande número de subclasses.

7 – Assinale Verdadeiro ou Falso para as afirmações seguintes e justifique sua resposta: (2,0)

( VERDADEIRO ) O Proxy é um padrão comportamental que permite que você apresente um substituto ou um
espaço reservado para outro objeto.

O Proxy é um padrão comportamental que permite que você apresente um substituto ou um espaço reservado para
outro objeto. O Proxy é usado para controlar o acesso a um objeto, adicionando uma camada de abstração. Isso pode
ser útil, por exemplo, para carregar objetos sob demanda, controlar o acesso a recursos, ou realizar outras operações
antes ou depois de acessar o objeto real.

( FALSO ) O Memento permite salvar e restaurar o estado anterior de um objeto desde que utilizado com o Padrão
Composite.

O Memento permite salvar e restaurar o estado anterior de um objeto, mas ele não está diretamente relacionado ao
Padrão Composite. O Memento é um padrão comportamental que permite que um objeto capture seu estado interno
e o restaure posteriormente, independentemente da estrutura hierárquica do objeto.

( FALSO ) O padrão de Projeto Builder permite que um objeto altere o seu comportamento quando seu estado
interno muda.

O padrão de Projeto Builder não permite que um objeto altere seu comportamento quando seu estado interno muda.
O Builder é um padrão de criação que separa a construção de um objeto complexo de sua representação, mas não
lida diretamente com mudanças no comportamento do objeto.

( FALSO ) Os padrões estruturais são utilizados em menor escala em aplicações com maior volumetria de dados.

Os padrões estruturais não estão relacionados ao volume de dados em uma aplicação. Eles se concentram na
organização e na composição de classes e objetos em sistemas.

( VERDADEIRO ) O Adapter muda a interface de um objeto existente, enquanto que o Decorator melhora um
objeto sem mudar sua interface.

O Adapter muda a interface de um objeto existente para que ele possa ser usado por outros objetos que esperam uma
interface diferente, enquanto o Decorator melhora um objeto sem alterar sua interface. O Adapter é usado para fazer
com que objetos incompatíveis funcionem juntos, enquanto o Decorator adiciona responsabilidades adicionais a um
objeto existente sem alterar sua estrutura. Portanto, a afirmação é verdadeira.

8 – O Bridge é um padrão estrutural que permite que você divida uma classe grande ou um subconjunto de
classes intimamente ligadas em duas hierarquias separadas (abstração e implementação) que podem ser
desenvolvidas independentemente umas das outras. Construa uma solução que justifique essa afirmação:
(2,5)

Problema

Precisamos controlar diferentes dispositivos de entretenimento (TVs e sistemas de som) com diferentes tipos de
controle remoto (infravermelho e Bluetooth) de forma flexível, sem que dispositivos e controles remotos estejam
diretamente ligados.

Solução

Usamos o padrão Bridge para separar os dispositivos e os controles remotos em hierarquias independentes. Cada
controle remoto se conecta a um dispositivo específico, permitindo controlar qualquer dispositivo com qualquer
controle remoto. Isso torna o sistema mais flexível e extensível, sem precisar modificar o código existente ao
adicionar novos dispositivos ou controles remotos.

9 – Alguns padrões um pouco distintos podem ser utilizados em conjunto. Outros não permitem serem
inseridos na mesma solução. Aponte dois padrões não recomendados para utilização em conjunto e sinalize
por quais motivos: (2,00)

Dois padrões que geralmente não são recomendados para serem utilizados em conjunto são:

Singleton e Prototype:

Motivo: O Singleton garante que uma classe tenha apenas uma instância única, enquanto o Prototype é usado para
criar novas instâncias duplicadas de um objeto existente. Esses padrões têm propósitos opostos. O Singleton
restringe a criação de instâncias a uma única instância global, enquanto o Prototype visa criar várias instâncias com
base em um modelo existente. Utilizar ambos em conjunto pode causar confusão e inconsistência no design, pois
você teria uma classe que é tanto Singleton quanto Prototype, o que é contraditório.

10 – Padrões de Projetos implica reutilização de código que por sua vez tem relação direta com tempo de
desenvolvimento, simplificação da solução e outros ganhos. Discorra sobre os benefícios desse processo.

Reutilização de Código: Os Padrões de Projetos permitem a criação de componentes de software que podem ser
reutilizados em diferentes partes de um sistema ou mesmo em projetos diferentes. Isso economiza tempo e esforço,
uma vez que os desenvolvedores não precisam escrever o mesmo código repetidamente, resultando em um
desenvolvimento mais eficiente.

Simplificação da Solução: Ao utilizar Padrões de Projetos, os desenvolvedores podem adotar soluções comprovadas
e otimizadas para problemas específicos. Isso simplifica o processo de design e implementação, reduzindo a
complexidade do código e tornando-o mais fácil de entender e manter.

Melhoria na Qualidade: Os Padrões de Projetos promovem boas práticas de design, como baixo acoplamento e alta
coesão. Isso tende a resultar em sistemas de melhor qualidade, mais robustos, confiáveis e fáceis de manter.

Economia de Tempo e Recursos: Como os Padrões de Projetos oferecem soluções prontas para problemas comuns,
os desenvolvedores podem economizar tempo na fase de design e implementação. Isso resulta em um
desenvolvimento mais rápido e eficiente, permitindo que a equipe se concentre em aspectos mais críticos do projeto.

Você também pode gostar