Padrões de Projeto de Software 1- Um dos princípios do padrão de arquitetura MVC é a separação da lógica da apresentação do modelo. PORQUE É, muitas vezes, mais prático manter a visão e o controlador unificados, inclusive, por demandas da tecnologia. Analisando-se as afirmações acima, conclui-se que ... ( ( ( ( (
) a primeira afirmação é falsa, e a segunda é verdadeira. ) As duas afirmações são falsas. ) as duas afirmações são verdadeiras, e a segunda segunda justifica a primeira. ) a primeira afirmação é verdadeira, e a segunda é falsa. ) as duas afirmações afirmações são são verdadeiras, e a segunda não justifica a primeira.
2- Programadores se deparam muitas vezes com a situação onde é preciso acrescentar responsabilidades a objetos e não a classe. Uma alternativa é atribuir dinamicamente a um dado objeto. Este padrão é chamado de: ( ( ( ( (
) Singleton. ) Instance. ) Decorator. ) protype. ) Bridge.
3- Assinale a afirmativa correta sobre o padrão Builder: ( ) A legibilidade legibilidade da solução final, ou seja, para entender entender como um objeto objeto é criado e sob quais condições, fica fica comprometida. ( ) Um dos principais objetivos do do padrão Builder é separar o algoritmo de criação de um objeto objeto complexo tanto da especificação, quanto das partes que o compõem. ( ) Deve-se Deve-se é separar no construtor da própria classe a lógica para criação de um objeto e concentrar a lógica de criação em uma hierarquia de herança. ( ) é uma abordagem que não facilita a criação de objetos com diferentes configurações e representações, tornando o código dependente a complexidade das classes relacionadas. ( ) Deve-se é embutir embutir no construtor da própria classe a lógica para para criação de um objeto ou ainda distribuir a lógica de criação em vários métodos adicionais. 4- O padrão Adpater é bastante utilizado para compatibilizar classes implementas por programadores diferentes, ou desenvolvidas em momentos diferentes, ou ainda para unir classes com interfaces diferentes em uma estrutura hierárquica única, sem precisar implementar novamente todas as funcionalidades e interfaces da classe já existente, considere as afirmativas: I - A ideia é criar uma nova classe (Adapter) com a interface padrão que se deseja para fazer a conexão com a classe já existente (Adaptee) com interface diferente da estrutura de classes que se pretende utilizar no sistema. Ii - Além de reaproveitar totalmente a classe antiga sem precisar alterar o código e entender a complexa implementação realizada, mantém a uniformidade do seu projeto original. Iii cria uma hierarquia de classes diferentes categorias de objetos sem relação de herança. ( ( ( ( (
) As afirmativas I, II, estão corretas corretas e a afirmativa III está errada. ) As afirmativas I, III, estão corretas e II errada. ) As afirmativas II, III estão corretas e a afirmativa I está errada. ) As afirmativas I, II, III estão incorretas. ) As afirmativas estão todas corretas.
5- Dentre as alternativas abaixo identifique a que NÃO define uma situação em que deve ser utilizado o padrão Factory Method? 1 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
( ) Quando uma classe quer que suas suas subclasses especifiquem os objetos criados. ( ) Quando o algoritmo de de criação de um objeto deve deve ser independente das suas partes constituintes e da maneira como ele é "montado". ( ) Quando uma classe (o criador) não pode antecipar a classe dos objetos que deve criar. ( ) Quando se quer localizar num ponto único a conhecimento de qual subclasse está está sendo sendo usada. ( ) Quando classes delegam responsabilidade para uma entre entre várias subclasses de apoio. apoio. 6- Conhecido como padrões da gangue dos quatro, por terem sido desenvolvidos por quatro autores, os Padrões GoF (Group of Four) estão divididos pelas seguintes famílias de padrões: Padrões de Criação ou de Construção, Padrões Estruturais e Padrões Comportamentais. Considerando os padrões de Criação ou de Construção, analise o modelo abaixo e em seguida marque a alternativa que define a representação.
( ( ( ( (
) MEDIATOR. ) BUILDER. ) FACADE. ) SINGLETON. ) FACTORY METHOD.
7- Conhecido como padrões da gangue dos quatro, por terem sido desenvolvidos por quatro autores, os Padrões GoF (Group of Four) estão divididos pelas seguintes famílias de padrões: Padrões de Criação ou de Construção, Padrões Estruturais e Padrões Comportamentais. Considerando os padrões de Criação ou de Construção, analise o modelo abaixo e em seguida marque a alternativa que define a representação.
( ( ( ( (
) Mediator. ) Singleton. ) Factory Method. ) Facade. ) Builder. 2
Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
8- Sobre o padrão Composite podemos afirmar: I ¿ É utilizado quando se pretende representar hierarquias partes-todo (ou todo-parte) de objetos, ou ainda, quando se pretende modelar relacionamento de agregação. Ii - o cliente poderá acessar objetos compostos ou não de maneira uniforme, pois irá se relacionar com a classe abstrata III ¿ Um processamento pode- ser realizado diretamente por uma superclasse Componente, quando se trata de uma composição, e o processamento parcial é feito pela classe filha, montando todas as partes que compõem o objeto. (
) As afirmativas II, III estão corretas e a afirmativa I está errada.
(
) As afirmativas I, III, estão corretas e II errada.
(
) As afirmativas I, II, estão corretas corretas e a afirmativa III está errada.
(
) As afirmativas I, II, III estão incorretas.
(
) As afirmativas estão todas corretas.
9- "garbage collection" será mais rápida do que o uso do padrão singleton. Por que então devemos usar o padrão singleton? Resposta: ________________ _________________________ __________________ _________________ _________________ _______________ ______
________________ ___________________________ ___________________ _________________ __________________ __________________ ___________ ________________ _________________________ __________________ _________________ ________________ __________________ _____________ ___ ________________ _________________________ __________________ _________________ ________________ __________________ ____________. __. 10- Decorator tem como principal objetivo a decoração de classes em tempo de execução, isto é, adicionar novos produtos e/ou novas responsabilidades à objetos dinamicamente sem alterar o código das classes existentes. Descreva um exemplo que represente esse padrão. Resposta: ________________ _________________________ __________________ _________________ _________________ _______________ ______
_________________ __________________________ __________________ ___________________ ___________________ _________________ __________ ________________ _________________________ __________________ _________________ ________________ __________________ _____________ ___ ________________ _________________________ __________________ _________________ ________________ __________________ ____________. __.
3 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Gabarito 1- as duas afirmações são verdadeiras, e a segunda não justifica a primeira. 2- Decorator. 3- Um dos principais objetivos do padrão Builder é separar o algoritmo de criação de um objeto complexo tanto da especificação, quanto das partes que o compõem. 4- As afirmativas I, II, estão corretas e a afirmativa III está errada. 5- Quando o algoritmo de criação de um objeto deve ser independente das suas partes constituintes e da maneira como ele é "montado". 6- BUILDER. 7- Factory Method. 8- As afirmativas I, II, estão corretas e a afirmativa III está errada. 9- Gabarito – Porque uma classe ¿static¿ SEMPRE é carregada na memória quando a aplicação é executada e a classe singleton não, sendo carregada na memória quando solicitada a primeira instância. 10- Gabarito – Em uma janela pode-se adicionar objetos como barras de rolagem, caixas de texto, labels, etc. Pode-se criar uma classe JanelaDecorador que será estendida pelos decoradores que irão inserir propriedades na janela. Podendo incluir barra vertical, horizontal e para cada criar outra classe decorador, inserindo características novas.
4 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Padrões de Projeto de Software 1- (CESGRANRIO - 2009) Ao consultar informações a respeito dos padrões de projeto Adapter e Bridge, um Analista de Sistemas identificou uma afirmativa INCORRETA. Assinale-a. ( ( ( ( (
) O Bridge estabelece uma ponte entre uma abstração e suas possíveis implementações. ) Ambos são padrões estruturais que possuem alguns atributos em comum. ) O foco do Adapter é a solução de incompatibilidades entre duas interfaces existentes. ) Ambos promovem a flexibilidade ao fornecer um nível de endereçamento indireto para outro objeto. ) O Adapter é inferior ao Bridge porque não evita a replicação de código.
2- A família de padrões GoF é dividida em três grupos principais de padrões, a saber: ( ( ( ( (
) Padrões de Criação; Padrões Metodológicos; Padrões de Ponte. ) Padrões de Processo; Padrões de Singularidade; Padrões de Prototipação. ) Padrões de Proxy; Padrões de Criação; Padrões de Encadeamento. ) Padrões Estruturais; Padrões de Processo; Padrões de Responsabilidade. ) Padrões Comportamentais; Padrões de Criação; Padrões Estruturais.
3- Considerando a classe de projetos GoF assinalem a opção cujos padrões de projeto estão todos classificados como Comportamentais. ( ( ( ( (
) Command,- Interpreter, - Iterator, - Mediator, - Observer, State, Strategy. ) Command,- bridge, - Iterator, - Mediator, bridge, State, Strategy. ) Command,- bridge, - Iterator, - Mediator, - Observer, State, Strategy. ) Command,- bridge, - Iterator, - Mediator, - composite - State, Strategy. ) Command,- Interpreter, - Iterator, - Mediator, - composite , State, Strategy.
4- Conhecido como padrões da gangue dos quatro, por terem sido desenvolvidos por quatro autores, os Padrões GoF (Group of Four) estão divididos pelos seguintes famílias de padrões: Padrões de Criação ou de Construção, Padrões Estruturais e Padrões Comportamentais. Considerando os padrões de Criação ou de Construção, analise o modelo abaixo e em seguida marque a alternativa que define a representação.
( ( ( ( (
) FACADE. ) BUILDER. ) SINGLETON. ) MEDIATOR. ) FACTORY METHOD. 5
Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
5- Selecione a opção totalmente correta da responsabilidade correta para o do padrão GRASP Criador: ( ) Tem a seguinte responsabilidade de responder de maneira intuitiva por um programador ou analista de sistema, baseado nas interação e nos métodos menos utilizados, desta forma otimizando a criação. ( ) A responsabilidade é definida pelo programador baseado nos métodos solicitados pela classe que está sendo criada. ( ) Tem a responsabilidade de como primeira atividade procura-se objetos de software existentes que satisfaçam os métodos necessários para a criação do objeto. Uma criação fica definida pela definida pela própria classe alocando-se o método. ( ) O padrão de projeto está interessado no algoritmo de criação, e a determinar qual classe dever ser responsável pelo uso de um novo método referente a classe inicial. ( ) Tem a seguinte responsabilidade de fazer, pois sua funcionalidade está relacionado com a resposta a seguinte pergunta: quem deve criar um objeto A. 6- Baseando-se nas necessidades apresentadas do lado direito do quadro abaixo, relacione-as ao padrão adequado a utilização e, em seguida marque a alternativa que corresponde a sequência numerada correspondente.
( ( ( ( (
) 4 - 2 - 1 – 3. ) 4 - 3 - 1 – 2. ) 2 - 3 - 4 – 1. ) 4 - 1 - 2 – 3. ) 3 - 4 - 1 – 2.
7- (FGV - 2008) Considere as seguintes assertivas sobre as vantagens do uso de padrões de software (software patterns): I. Padrões de projeto proporcionam um vocabulário comum de projeto, facilitando comunicação, documentação e aprendizado dos sistemas de software. II. Padrões de projeto auxiliam no desenvolvimento de software por meio da reutilização do projeto de soluções computacionais já testadas e aprovadas. III. Uma biblioteca de padrões pode ajudar a melhorar e padronizar o desenvolvimento de software. As assertivas corretas são: ( ( ( ( (
) somente I e III. ) somente II e III. ) somente I e II. ) I, II e III. ) somente II.
8- Considere as classes e métodos abaixo: E escolha a opção correta sobre a gravura: E escolha a opção correta sobre a gravura:
6 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
sobre o acoplamento e coesão: ( ) O método void imp_NF (cod) poderia ser implementado na classe NF sem envolver mais nenhuma classe. Não tendo outros métodos o acoplamento não existiria o que é o desejável. ( ) Existem acoplamentos das classes cliente e Nota fiscal. E Nota fiscal e Item de Nota fiscal. Esta forma de acoplamento é caracterizada por chamada de métodos. ( ) Existem acoplamentos das classes que foram gerados de forma desnecessária pois poderiam ser incorporados em um único método e isto iria facilitar a manutenção e o entendimento. ( ) Existem acoplamentos que poderiam ser evitados, considerando apenas o diagrama, assim o método de imprimir nota fiscal, dando-se o código de cliente, pode ser mapeado de forma diferente melhorando-se o acoplamento. ( ) método void imp_NF (cod) não deve ser implementado na classe NF. Obteria-se um projeto melhor se NF fosse acoplada a classe Cliente seus métodos incorporados na classe cliente. Pode-se garantir um melhor acoplamento. 9- O uso de classes "statics" garante que somente uma instância estará em memória e que a destruição pelo "garbage collection" será mais rápida do que o uso do padrão singleton. Por que então devemos usar o padrão singleton? Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________. 10- Ter uma baixa coesão nos objetos do sistema pode gerar difícil compreensão e reutilização, além de afetar a manutenibilidade. O que é ter baixa coesão? Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________.
7 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Gabarito 1- O Adapter é inferior ao Bridge porque não evita a replicação de código. 2- Padrões Comportamentais; Padrões de Criação; Padrões Estruturais. 3- Command,- Interpreter, - Iterator, - Mediator, - Observer, State, Strategy. 4- BUILDER. 5- Tem a seguinte responsabilidade de fazer, pois sua funcionalidade está relacionada com a resposta a seguinte pergunta: quem deve criar um objeto A. 6- 4 - 3 - 1 – 2. 7- I, II e III. 8- Existem acoplamentos das classes cliente e Nota fiscal. E Nota fiscal e Item de Nota fiscal. Esta forma de acoplamento é caracterizada por chamada de métodos. 9- Resposta – Quando se tem a necessidade de garantir que, apenas uma única instância de uma determinada classe, seja carregada no sistema. 10- Gabarito – É quando se tem uma mesma classe executando muitos trabalhos, realizando muitas coisas não relacionadas.
8 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Padrões de Projeto de Software 1- Sobre padrões de projeto escolha a opção incorreta. ( ) Padrões de projeto estão relacionados a diferentes níveis de abstração no desenvolvimento de aplicações orientadas a objetos, podendo aparecer ao longo de todo ciclo de análise e projeto de um sistema. ( ) a diversidade de padrões disponíveis é bastante grande, pode-se ter, por exemplo, padrões arquiteturais, padrões de análise, padrões de projeto e padrões de código. ( ) Cada padrão descreve um problema que ocorrem repetidas vezes em nosso ambiente e fornece o núcleo da solução para aquele problema, de tal maneira que se pode usar essa solução milhões de vezes sem nunca fazê-la da mesma forma. ( ) Os padrões de projeto são descrições de objetos que se comunicam e classes que são customizadas para resolver um problema genérico de design em um contexto específico. ( ) Um padrão de projeto define uma estrutura que obrigatoriamente não poderá ser alterada pelo desenvolvedor. 2- Um dos princípios do padrão de arquitetura MVC é a separação da lógica da apresentação do modelo. PORQUE É, muitas vezes, mais prático manter a visão e o controlador unificados, inclusive, por demandas da tecnologia. Analisando-se as afirmações acima, conclui-se que ... ( ( ( ( (
) a primeira afirmação é verdadeira, e a segunda é falsa. ) as duas afirmações são verdadeiras, e a segunda não justifica a primeira. ) As duas afirmações são falsas. ) a primeira afirmação é falsa, e a segunda é verdadeira. ) as duas afirmações são verdadeiras, e a segunda justifica a primeira.
3- Para fazer a modelagem de um padrão de projeto (design pattern) utilizando a UML é DESNECESSÁRIO. ( ) identificar as soluções específicas e particulares para o problema básico e retificá-la como um mecanismo. ( ) identificar os elementos do padrão de projeto que devem ser vinculados aos elementos em um contexto específico e representá-los como parâmetros para colaboração. ( ) identificar as soluções comuns para o problema básico. ( ) entender o padrão de projeto como uma colaboração representada com suas partes estruturais e comportamentais. ( ) fazer a modelagem do mecanismo como uma colaboração, fornecendo seus aspectos estruturais, assim como os aspectos comportamentais. 4- (FESMIP-BA - 2011) O Design Patterns que tem a finalidade de usar compartilhamento para suportar grandes quantidades de objetos, de granularidade fina, de maneira eficiente, é denominado: ( ( ( ( ( 5-
) State. ) Flyweight. ) Composite. ) Builder. ) Strategy. Marque a alternativa que representa o padrão GRASP que está relacionada com a seguinte questão: como projetar objetos e subsistemas de modo que variações não causem impactos indesejados?
( ( ( ( (
) Polimorfismo. ) Indireção. ) Invenção Pura. ) Variações Protegidas. ) Controlador. 9
Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
6- Conhecido como padrões da gangue dos quatro, por terem sido desenvolvidos por quatro autores, os Padrões GoF (Group of Four) estão divididos pelas seguintes famílias de padrões: Padrões de Criação ou de Construção, Padrões Estruturais e Padrões Comportamentais. Considerando os padrões de Criação ou de Construção, analise o modelo abaixo e em seguida marque a alternativa que define a representação.
( ( ( ( (
) Singleton. ) Builder. ) Factory Method. ) Mediator. ) Facade.
7- Segundo Metsker, o padrão de projeto GoF _________________ é aplicado para substituir a geração de instâncias não-inicializadas de uma classe, fornecendo novos objetos a partir de uma classe-exemplo. (
) MEDIATOR.
(
) SINGLETON.
(
) PROTOTYPE.
(
) BUILDER.
(
) FACTORY METHOD.
8- Iterator :Fornecer uma maneira de acessar seqüencialmente os elementos de um objeto agregado sem expor sua implementação. (Gamma et al., 2000). Sobre este padrão de projetos podemos afirmar com certeza: (
) É bastante utilizado em programação de sistemas para gerenciar a comunicação entre dois ou mais objetos.
( ) tem uma grande facilidade de mudança de comportamento, pode-se alterar seu funcionamento sem que seja necessário nenhuma mudança nas demais classes envolvidas, desde que envolvam coleções e matrizes. ( ) Oferece uma forma de percorrer este tipo de objeto agregado sem conhecer seus detalhes de implementação. ( ) Considerando objetos que implementam arrays, pode ser visto como uma classe intermediária de comunicação e gerenciamento, evitando que os objetos se comuniquem de forma direta. ( ) É bastante utilizado em programação de sistemas para gerenciar a comunicação entre dois ou mais objetos, mas não deve ser usado quando associado a percorrer arrays ou tabelas.
10 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
9- Decorator tem como principal objetivo a decoração de classes em tempo de execução, isto é, adicionar novos produtos e/ou novas responsabilidades à objetos dinamicamente sem alterar o código das classes existentes. Descreva um exemplo que represente esse padrão. Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________. 10- Os métodos polimórficos utilizam os conceitos de overloading e overrinding. Apresente a diferença entre os dois conceitos. Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________.
11 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Gabarito 1- Um padrão de projeto define uma estrutura que obrigatoriamente não poderá ser alterada pelo desenvolvedor. 2- as duas afirmações são verdadeiras, e a segunda não justifica a primeira. 3- identificar as soluções específicas e particulares para o problema básico e reificá-la como um mecanismo. 4- Flyweight. 5- Variações Protegidas. 6- Factory Method. 7- PROTOTYPE. 8- Oferece uma forma de percorrer este tipo de objeto agregado sem conhecer seus detalhes de implementação. 9- Resposta – em uma janela pode adicionar objetos como barras de rolagem,caixas de texto, etc. Pode se criar janelas decoratror que será entendida pelos decoradores que irao inserir propriedades na janela. 10- Resposta – overloading=quando temos um excesso de carga ao mesmo tempo;overrindig=quando temos um excesso de acessos ao mesmo tempo.
12 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Padrões de Projeto de Software 1- Os métodos polimórficos utilizam os conceitos de overloading e overrinding. Apresente a diferença entre os dois conceitos. Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________. 2- Baixo acoplamento é um princípio-chave na Orientação objetos. O que deve ser feito para garantir o baixo acoplamento na definição dos objetos/classe/subsistema/sistema. Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________. 3- Command : Encapsula uma solicitação como um objeto, permitindo a parametrização de clientes com diferentes solicitações, o enfileiramento e o registro de solicitações e o suporte a operações que possam ser desfeitas. (Gamma et al., 2000). Sobre ele podemos afirmar com toda a certeza: ( ) Este padrão de projeto oferece pouca flexibilidade na arquitetura do sistema, uma vez que não permite adição de novas funcionalidades. ( ) O objetivo do padrão de projeto Command é encapsular chamadas de métodos. ( ) esta abordagem é que o objeto que está realizando a chamada do método precisa conhecer com detalhes sobre seu funcionamento. ( ) Os métodos, nesta abordagem devem ser padronizados e hierarquizados de forma que a implementação trabalhe novos objetos. ( ) Nesta abordagem o objeto que está realizando a chamada do método precisa conhecer com detalhes a implementação em relação aparente ao local, tempo e ao objeto que vai realizar uma determinada tarefa. 4- Qual das afirmativas abaixo não é verdadeira: ( ) Um alto acoplamento aumenta a dificuldade de entendimento da solução proposta, a diminuição das chances de reutilização, além de aumentar a complexidade da aplicação. ( ) acoplamento é o grau de dependência entre dois artefatos. É uma medida de quão forte um elemento está conectado ou tem conhecimento de, ou depende de outros elementos. ( ) Dessa forma o padrão Acoplamento Baixo é utilizado para atribuir responsabilidades de modo que o acoplamento permaneça baixo. ( ) O ideal que dois artefatos tenham alta dependência. Isto garante um bom desempenho e facilita a manutenção dos artefatos. ( ) Um acoplamento definido para que classes que contenham métodos que possibilitem alterações de requisitos deve ser a menor possível, desta forma se favorece futuras manutenções. 5- Marque a alternativa que representa o padrão GRASP que está relacionada com a seguinte questão: Como distribuir responsabilidades buscando alcançar Coesão Alta ou Acoplamento Baixo? ( ( ( ( (
) controlador. ) Indireção. ) polimorfismo. ) variações protegidas. ) Invenção Pura. 13
Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
6- Considere a definição: Visitor: Representar uma operação a ser realizada nos elementos de uma estrutura de objetos. Visitor permite que você defina uma nova operação sem alterar as classes dos elementos nos quais a operação atua (Gamma et al., 2000). Qual das alternativas é completamente verdadeira? ( ) A ideia principal do padrão acima é implementar diferentes algoritmos em uma hierarquia de classes, onde cada um deles pode ser substituído por outro, independente do cliente que o utiliza. ( ) O padrão de projeto acima é indicado para ser utilizado quando uma abstração tem dois aspectos, um dependente do outro. Encapsular tais aspectos em objetos separados permite que variem e sejam reusados separadamente; ( ) O principal objetivo do padrão acima é permitir que sejam adicionadas novas funcionalidades a classes previamente concebidas, sem que haja necessidade de alterar sua implementação. ( ) O padrão de projeto acima deve ser utilizado não somente quando o comportamento de um objeto depende do seu estado, podendo ser alterado em tempo de execução, mas também quando a funcionalidade de um objeto possui condicionais grandes. ( ) O principal objetivo do padrão acima é conservar as funcionalidades em não se permita adicionar novas, E obriga que haja necessidade de alterar sua implementação. 7- Marque a alternativa que está relacionada ao padrão GRASP que está relacionada com a seguinte questão: como tratar alternativas com base no tipo? ( ( ( ( (
) Especialista da informação. ) Polimorfismo. ) Acoplamento fraco. ) Observador. ) State
8- Assinale a afirmativa correta sobre o padrão Builder: ( ) Deve-se é separar no construtor da própria classe a lógica para criação de um objeto e concentrar a lógica de criação em uma hierarquia de herança. ( ) é uma abordagem que não facilita a criação de objetos com diferentes configurações e representações, tornando o código dependente a complexidade das classes relacionadas. ( ) Um dos principais objetivos do padrão Builder é separar o algoritmo de criação de um objeto complexo tanto da especificação, quanto das partes que o compõem. ( ) A legibilidade da solução final, ou seja, para entender como um objeto é criado e sob quais condições, fica comprometida. ( ) Deve-se é embutir no construtor da própria classe a lógica para criação de um objeto ou ainda distribuir a lógica de criação em vários métodos adicionais. 9- Em padrão de projeto existe uma situação onde uma classe chama um método abstrato especificado em alguma classe abstrata (ou interface) e a subclasse concreta vai decidir que tipo exato de objeto criar e retornar. Baseado nessa descrição marque a alternativa que aponta o padrão relacionado. ( ( ( ( (
) Singleton. ) Builder. ) Mediator. ) Factory Method. ) Facade.
10- Entre as vantagens do padrão Interpreter podem-se citar: I - facilidade para mudar e estender a gramática, pois, o padrão utiliza classes para representar as regras gramaticais. I i - Pode-se usar herança para mudar ou estender a gramática, assim como expressões existentes podem ser modificadas incrementalmente e novas expressões podem ser criadas a partir das existentes; Iii - a implementação da gramática é mais fácil, pois, 14 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
classes que definem os nós folhas da árvore tem implementações similares. Por outro lado, uma das desvantagens é que o padrão Interpreter define, ao menos, uma classe para cada regra da gramática, logo, gramáticas com muitas regras são difíceis de manter e administrar. (
) As afirmativas I, II, III estão incorretas.
(
) As afirmativas estão todas corretas.
(
) As afirmativas II, III estão corretas e a afirmativa I está errada.
(
) As afirmativas I, II, estão corretas e a afirmativa III está errada.
(
) As afirmativas I, III, estão corretas e II errada.
15 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Gabarito 1- Gabarito – O conceito OVERLOADING é a sobrecarga dos métodos: define vários métodos de mesmo nome com assinaturas diferentes. O conceito OVERRIDING altera o comportamento do método na subclasse, mantendo a mesma assinatura, com funcionalidade diferente. 2- Gabarito – Gabarito: Deve-se manter os objetos/classe/subsistema/sistema o mais independente possível, ou seja, não possui conhecimento sobre o outro ou confia em outro. 3- O objetivo do padrão de projeto Command é encapsular chamadas de métodos. 4- O ideal que dois artefatos tenham alta dependência. Isto garante um bom desempenho e facilita a manutenção dos artefatos. 5- Invenção Pura. 6- O principal objetivo do padrão acima é permitir que sejam adicionadas novas funcionalidades a classes previamente concebidas, sem que haja necessidade de alterar sua implementação. 7- Polimorfismo. 8- Um dos principais objetivos do padrão Builder é separar o algoritmo de criação de um objeto complexo tanto da especificação, quanto das partes que o compõem. 9- Factory Method. 10- As afirmativas estão todas corretas.
16 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Padrões de Projetos de Software 1- Analise as sentenças sobre padrões de projeto de software e, em seguida, assinale a alternativa correta: I. Permitem descrever fr agmentos de projeto e reusar ideias de projeto; II. Dão nome e forma a procedimentos abstratos, regras e melhores práticas relativas às técnicas orientadas a objetos;
III. Ajudam a escolher alternativas de projeto que tornam um sistema reutilizável. ( ( ( ( (
) Todas as sentenças estão corretas. ) Apenas as sentenças I e II estão corretas. ) Apenas as sentenças I e III estão corretas. ) Apenas as sentenças II e III estão corretas. ) Apenas a sentença II está correta.
2- Para fazer a modelagem de um padrão de projeto (design pattern) utilizando a UML é DESNECESSÁRIO. ( ) fazer a modelagem do mecanismo como uma colaboração, fornecendo seus aspectos estruturais, assim como os aspectos comportamentais. ( ) identificar as soluções específicas e particulares para o problema básico e retificá-la como um mecanismo. ( ) entender o padrão de projeto como uma colaboração representada com suas partes estruturais e comportamentais. ( ) identificar as soluções comuns para o problema básico. ( ) identificar os elementos do padrão de projeto que devem ser vinculados aos elementos em um contexto específico e representá-los como parâmetros para colaboração. 3- O padrão Adpater é bastante utilizado para compatibilizar classes implementas por pro gramadores diferentes, ou desenvolvidas em momentos diferentes, ou ainda para unir classes com interfaces diferentes em uma estrututura hierárquica única, sem precisar implementar novamente todas as funcionalidades e interfaces da classe já existente, considere as afirmativas: I A idéia é criar uma nova classe (Adapter) com a interface padrão que se deseja para fazer a conexão com a classe já existente (Adaptee) com interface diferente da estrutura de classes que se pretende utilizar no sistema. ii Além de reaproveitar totalmente a classe antiga sem precisar alterar o código e entender a complexa implementação realizada, mantém a uniformidade do seu projeto original. Iii cria uma hierarquia de classes diferentes categorias de objetos sem relação de herança. ( ( ( ( (
) As afirmativas I, III, estão corretas e II errada. ) As afirmativas II, III estão corretas e a afirmativa I está errada. ) As afirmativas estão todas corretas. ) As afirmativas I, II, III estão incorretas. ) As afirmativas I, II, estão corretas e a afirmativa III está errada.
4- Consideram as afirmativa abaixo sobre o padrão protype I Declara um método chamado clone na superclasse abstrata do modelo (Prototype). Em função desta declaração, cada classe concreta derivada deve ser capaz de gerar uma nova instância de si próprio. II , Entre as aplicações para este padrão de projeto está a facilidade de instanciar classes em tempo de execução. III Quando as instancias de uma classe apresentam poucas combinações de estados, pode ser mais conveniente definir previamente um conjunto de protótipos e clonálos, sempre que foi necessário. ( ( ( ( (
) As afirmativas I, II, estão corretas e a afirmativa III está errada. ) As afirmativas estão todas corretas. ) As afirmativas I, III, estão corretas e II errada. ) As afirmativas I, II, III estão incorretas. ) As afirmativas II, III estão corretas e a afirmativa I está errada.
17 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
5- (CESGRANRIO 2010) Em um sistema de software para controlar pedidos para entrega em domicílio, deve haver uma funcionalidade que permita que o atendente solicite a repetição de um pedido anteriormente feito por um cliente. O gerente do restaurante informou que essa funcionalidade aumentaria a agi lidade no atendimento aos clientes, visto que muitos deles tendem a fazer pedidos similares aos que já fizeram anteriormente. Ao usar essa funcionalidade, o atendente do restaurante seleciona um pedido cuja composição corresponde a produtos normalmente requisitados pelos clientes e solicita ao sistema a construção de um novo pedido igual ao selecionado. Esse novo pedido pode, então, ser alterado pelo atendente se o cliente solicitar a adição de novos produtos do cardápio, por exemplo. Portanto, a parte principal dessa funcionalidade corresponde a criar uma cópia de um pedido a partir de pedido preexistente. Na implementação dessa funcionalidade, seu desenvolvedor deve utilizar qual padrão de projeto do catálogo GoF (Gang of Four), dentre os listados abaixo? ( ( ( ( (
) Factory Method. ) Command. ) Abstract Factory. ) Prototype. ) Builder.
6- Iterator :Fornecer uma maneira de acessar sequencialmente os elementos de um objeto agregado sem expor sua implementação. (Gamma et al., 2000). Sobre este padrão de projetos podemos afirmar com certeza: ( ) Considerando objetos que implementam arrays, pode ser visto como uma classe intermediária de comunicação e gerenciamento, evitando que os objetos se comuniquem de forma direta. ( ) É bastante utilizado em programação de sistemas para gerenciar a comunicação entre dois ou mais objetos. ( ) É bastante utilizado em programação de sistemas para gerenciar a comunicação entre dois ou mais objetos, mas não deve ser usado quando associado a percorrer arrays ou tabelas. ( ) tem uma grande facilidade de mudança de comportamento, pode-se alterar seu funcionamento sem que seja necessário nenhuma mudança nas demais classes envolvidas, desde que envolvam coleções e matrizes. ( ) Oferece uma forma de percorrer este tipo de objeto agregado sem conhecer seus detalhes de implementação. 7- Decorator tem como principal objetivo a decoração de classes em tempo de execução, isto é, adicionar novos produtos e/ou novas responsabilidades à objetos dinamicamente sem alterar o código das classes existentes. Descreva um exemplo que represente esse padrão. Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________. 8- Considere a definição: State: Permitir a um objeto alterar o seu comportamento quando o seu estado interno mudar. O objeto parecerá ter mudado de classe (Gamma et al., 2000). Qual das alternativas é completamente verdadeira? ( ) O padrão de projeto acima deve ser utilizado não somente quando o comportamento de um objeto depende do seu estado, podendo ser alterado em tempo de execução, mas também quando a funcionalidade de um objeto possui condicionais grandes. ( ) O principal objetivo do padrão acima é conservar as funcionalidades em não se permita adicionar novas, E obriga que haja necessidade de alterar sua implementação. ( ) O principal objetivo do padrão acima é permitir que sejam adicionadas novas funcionalidades a classes Previamente concebidas, sem que haja necessidade de alterar sua implementação. 18 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
( ) A ideia principal do padrão acima é implementar diferentes algoritmos em uma hierarquia de classes, onde cada um deles pode ser substituído por outro, independente do cliente que o utiliza. ( ) O padrão de projeto acima é indicado para ser utilizado quando uma abstração tem dois aspectos, um dependente do outro. Encapsular tais aspectos em objetos separados permite que variem e sejam reusados separadamente; 9- Uma classe com alto acoplamento faz com que o reuso fique comprometido. Apresente uma justificativa para esse problema. Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________. 10- (COPEVEUFAL 2011) O diagrama de classes apresentado na figura não representa fielmente um buffer que passa por estados sucessivos de transformação. Em outras palavras, um buffer, que está inicialmente vazio, depois pode ficar parcialmente cheio e, possivelmente, pode ficar cheio.
Dentre as opções apresentadas a seguir, qual o padrão de projetos que melhor se adequaria para modelar essa característica dinâmica do buffer? ( ( ( ( (
) Mediator. ) Singleton. ) Composite. ) Dynamic behavior. ) State.
19 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Gabarito 1- Todas as sentenças estão corretas. 2- identificar as soluções específicas e particulares para o problema básico e retificá-la como um mecanismo. 3- As afirmativas I, II, estão corretas e a afirmativa III está errada. 4- As afirmativas estão todas corretas. 5- Prototype. 6- Oferece uma forma de percorrer este tipo de objeto agregado sem conhecer seus detalhes de implementação. 7- Gabarito – Em uma janela pode-se adicionar objetos como barras de rolagem, caixas de texto, labels, etc. Pode-se criar uma classe JanelaDecorador que será estendida pelos decoradores que irão inserir propriedades na janela. Podendo incluir barra vertical, horizontal e para cada criar outra classe decorador, inserindo características novas. 8- O padrão de projeto acima deve ser utilizado não somente quando o comportamento de um objeto depende do seu estado, podendo ser alterado em tempo de execução, mas também quando a funcionalidade de um objeto possui condicionais grandes. 9- Gabarito – O problema ocorre pois para reaproveitar métodos acoplados torna-se necessária a presença adicional das classes relacionadas, dificultando o processo de reutilização. 10- State.
20 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Padrões de Projeto de Software 1- Decorator tem como principal objetivo a decoração de classes em tempo de execução, isto é, adicionar novos produtos e/ou novas responsabilidades à objetos dinamicamente sem alterar o código das classes existentes. Descreva um exemplo que represente esse padrão. Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________. 2- No desenvolvimento de sistemas baseado na Orientação a Objetos são utilizados padrões de projetos que buscam utilizar conhecimentos já adquiridos e comprovados. Assim, o padrão de projeto GRASP COESÃO tem como objetivo desenvolver procedimentos com objetivo bem definido. Quais as facilidades são atribuídas ao uso desse padrão? Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________. 3- Podemos afirmar que os Padrões de Criação da família GoF: ( ) Fornecem um guia de como instanciar objetos, que normalmente envolve decisões dinâmicas para escolher, por exemplo, qual classe instanciar ou a quais objetos delegar responsabilidade. ( ) Colocam em dúvida o tratamento dispensado aos usuários na fase de levantamento das necessidades. ( ) Definem caminhos comuns para a organização de diferentes tipos de objetos, facilitando sua integração e colaboração mútua. ( ) São projetados para organizar, gerenciar e combinar diferentes comportamentos. ( ) Subutilizam as rotinas de tratamento de erros, em virtude da depuração de código fonte na fase de levantamento das necessidades junto aos usuários. 4- Considerando a classe de projetos GoF assinale a opção cujos padrões de projeto estão todos classificados como criação: ( ) Abstractly factory ; Builder ; Composite ; Protype – Singleton. ( ) Abstractly factory ; Builder ; Factory Method ; Protype – Singleton. ( ) Command ; Builder ; Factory Method ; Protype – Singleton. ( ) Abstractly factory ; Bridge ; Factory Method ; Protype ; Singleton. ( ) Abstractly factory ; Builder ; Factory Method ; Decorator – Singleton. 5- O projeto Orientado a objetos pressupõe a criação de modelos de domínio a partir dos requisitos identificados para entendimento do negócio e apresentação de uma solução. A esses modelos são acrescidas os aspectos físicos, como os métodos e a troca de mensagens entre eles. A questão é decidir a melhor forma de interação entre os métodos, ou seja, a atribuição da responsabilidade estabelecida para que se possa gerar um melhor resultado. Visando facilitar a construção de soluções são apresentados os padrões de projeto. Assinale dentre as alternativas a seguir a que NÃO define uma característica atribuída ao uso dos padrões. ( ) O nome do padrão é utilizado para agrupar ideias em um conceito. ( ) Fornece orientação de aplicação em circunstâncias variáveis. ( ) É uma descrição nomeada de um problema e solução que pode ser aplicado em novos contextos. ( ) São definidos por especialistas de problemas e servem para aplicação direta em qualquer contexto. ( ) É apresentado através de uma descrição contendo informações de identificação e registro, como: Nome, Problema, Sumário, Solução, Consequências e Padrões Relacionados. 21 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
6- Conhecido como padrões da gangue dos quatro, por terem sido desenvolvidos por quatro autores, os Padrões GoF (Group of Four) estão divididos pelas seguintes famílias de padrões: Padrões de Criação ou de Construção, Padrões Estruturais e Padrões Comportamentais. Considerando os padrões de Criação ou de Construção, analise o modelo abaixo e em seguida marque a alternativa que define a representação.
( ( ( ( (
) Facade. ) Builder. ) Mediator. ) Factory Method. ) Singleton.
7- Segundo Metsker, o padrão de projeto GoF _________________ é aplicado para substituir a geração de instâncias não-inicializadas de uma classe, fornecendo novos objetos a partir de uma classe-exemplo. ( ( ( ( (
) PROTOTYPE. ) BUILDER. ) MEDIATOR. ) SINGLETON. ) FACTORY METHOD.
8- (FUNCAB - 2010) Segundo Trott e Shalloway, o princípio de projetar a partir de um contexto, é um conceito para criar a visão global antes de se projetar os detalhes que aparecem nos componentes. Das opções seguintes, o padrão de projeto que é um melhor exemplo de aplicação desse princípio é: ( ( ( ( (
) bridge. ) faça de. ) adapter. ) canvas. ) abstract factory.
9- Sobre o padrão Command: I - É ideal para acessar elementos de coleções, matrizes ou estruturas de dados encadeados II - A vantagem desta abordagem é que o objeto que está realizando a chamada do método não precisa saber nada sobre seu funcionamento. III - Este padrão de projeto oferece uma maior flexibilidade na arquitetura do sistema, uma vez que permite a adição de novas funcionalidades (comandos) sem a necessidade de mudar a arquitetura. Podemos afirmar: ( ( ( ( (
) As afirmativas II, III estão corretas e a afirmativa I está errada. ) As afirmativas I, II, estão corretas e a afirmativa III está errada. ) As afirmativas I, II, III estão incorretas. ) As afirmativas I, II, III e IV estão corretas. ) As afirmativas I, III, estão corretas e II errada.
22 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
10- (CESPE 0 2007) Considerando a figura, que apresenta um diagrama de relacionamento entre os padrões de projeto descritos no livro GoF Book, julgue os próximos itens acerca dos conceitos de programação orientada a objetos e padrões de projetos orientados a objetos.
I A implementação de padrões de projeto criacionais em linguagens como C#, Delphi e Java sempre envolverá a alocação de memória para a criação de objetos. II A implementação de montadores de árvores sintáticas apóia-se mais no uso do padrão Singleton que no uso do padrão Composite. III A implementação de tratadores de eventos de interface gráfica apóia-se mais no uso do padrão Observer que no uso do padrão Visitor. IV A implementação de famílias portáveis de componentes de interface gráfica depende mais do emprego do padrão Chain of Responsibility que do padrão AbstractFactory. V O padrão TemplateMethod é mais simples que o padrão Memento. Estão certos apenas os itens. ( ( ( ( (
) II, III e IV. ) II, III e V. ) I, IV e V. ) I, III e V. ) I, II e IV.
23 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Gabarito 1- Gabarito – Em uma janela pode-se adicionar objetos como barras de rolagem, caixas de texto, labels, etc. Pode-se criar uma classe JanelaDecorador que será estendida pelos decoradores que irão inserir propriedades na janela. Podendo incluir barra vertical, horizontal e para cada criar outra classe decorador, inserindo características novas. 2- Gabarito – Facilidade na reutilização, manutenção e consequente garantia de continuidade. 3- Fornecem um guia de como instanciar objetos, que normalmente envolve decisões dinâmicas para escolher, por exemplo, qual classe instanciar ou a quais objetos delegar responsabilidade. 4- Abstractly factory ; Builder ; Factory Method ; Protype – Singleton. 5- São definidos por especialistas de problemas e servem para aplicação direta em qualquer contexto. 6- Factory Method. 7- PROTOTYPE. 8- Bridge. 9- As afirmativas II, III estão corretas e a afirmativa I está errada. 10- I, III e V.
24 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Padrões de Projeto de Software 1- A definição ¿ Captar e externalizar um estado interno de um objeto, de maneira que esse estado seja restaurado ao objeto em outro momento, sem violar seu encapsulamento (Gamma et al., 2000).¿ Refre-se a que padrão de projeto: ( ( ( ( (
) Iterator. ) Command. ) Mediator. ) Builder. ) Memento.
2- Relacione os padrões de projetos listados abaixo com suas respectivas finalidades: PADRÕES DE PROJETO 1. Facade (fachada) 2. Decorator (decorador) 3. Memento (lembrança) 4. Proxy (procurador) 5. Observer (observador) FINALIDADES ( ) Define uma dependência um para muitos entre objetos tal que, quando o estado de um objeto muda, todos os seus dependentes são notificados e atualizados automaticamente. ( ) Fornece uma interface unificada para um conjunto de objetos que constituem um subsistema. Define uma interface de mais alto nível que torna o subsistema mais fácil de usar. ( ) Sem violar o encapsulamento, captura e exterioriza o estado interno de um objeto, tal que o objeto possa ser restaurado a este estado mais tarde. ( ) Acrescenta responsabilidades adicionais a um objeto dinamicamente. Fornece uma alternativa flexível para a extensão de funcionalidade. ( ) Controla o acesso a um objeto através de outro objeto, que atua como seu substituto, ou como um envoltório. Assinale a alternativa que indica a sequência correta, de cima para baixo. ( ( ( ( (
) 3 - 1 - 5 - 2 – 4. ) 1 - 5 - 3 - 4 – 2. ) 5 - 1 - 3 - 4 – 2. ) 3 - 5 - 1 - 4 – 2. ) 5 - 1 - 3 - 2 – 4.
3- Considerando a classe de projetos GoF assinalem a opção cujos padrões de projeto estão todos classificados como Comportamentais: ( ( ( ( (
) Command,- bridge, - Iterator, - Mediator, - Observer, State, Strategy. ) Command,- Interpreter, - Iterator, - Mediator, - composite , State, Strategy. ) Command,- Interpreter, - Iterator, - Mediator, - Observer, State, Strategy. ) Command,- bridge, - Iterator, - Mediator, - composite - State, Strategy. ) Command,- bridge, - Iterator, - Mediator, bridge, State, Strategy.
4- (FESMIP-BA - 2011) O Design Patterns que tem a finalidade de usar compartilhamento para suportar grandes quantidades de objetos, de granularidade fina, de maneira eficiente, é denominado: ( ( ( ( (
) Strategy. ) Composite. ) State. ) Flyweight. ) Builder.
25 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
5- Conhecido como padrões da gangue dos quatro, por terem sido desenvolvidos por quatro autores, os Padrões GoF (Group of Four) estão divididos pelas seguintes famílias de padrões: Padrões de Criação ou de Construção, Padrões Estruturais e Padrões Comportamentais. Considerando os padrões de Criação ou de Construção, analise o modelo abaixo e em seguida marque a alternativa que define a representação.
( ( ( ( (
) FACADE. ) MEDIATOR. ) BUILDER. ) FACTORY METHOD. ) SINGLETON.
6- Baseando-se nas necessidades apresentadas do lado direito do quadro abaixo, relacione-as ao padrão adequado a utilização e, em seguida marque a alternativa que corresponde a sequência numerada correspondente.
( ( ( ( (
) 4 - 1 - 2 – 3. ) 4 - 3 - 1 – 2. ) 4 - 2 - 1 – 3. ) 3 - 4 - 1 – 2. ) 2 - 3 - 4 – 1.
7- (FGV - 2008) Considere as seguintes assertivas sobre as vantagens do uso de padrões de software (software patterns): I. Padrões de projeto proporcionam um vocabulário comum de projeto, facilitando comunicação, documentação e aprendizado dos sistemas de software. II. Padrões de projeto auxiliam no desenvolvimento de software por meio da reutilização do projeto de soluções computacionais já testadas e aprovadas. III. Uma biblioteca de padrões pode ajudar a melhorar e padronizar o desenvolvimento de software. As assertivas corretas são: 26 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
( ( ( ( (
) I, II e III. ) somente I e III. ) somente I e II. ) somente II. ) somente II e III.
8- Padrões de projeto estão relacionados a diferentes níveis de abstração no desenvolvimento de aplicações orientadas a objetos, podendo aparecer ao longo de todo ciclo de vida de um sistema. Os padrões são diversos, por exemplo, padrões arquiteturais, padrões de análise, padrões de projeto e padrões de código, padrões estruturais, padrões comportamentais. Explique o que são padrões comportamentais e dê exemplo de dois deles. Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________. 9- Ter uma baixa coesão nos objetos do sistema pode gerar difícil compreensão e reutilização, além de afetar a manutenibilidade. O que é ter baixa coesão? Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________. 10- (FUNIVERSA - 2009) Considerando os padrões de projetos (design patterns) da engenharia de software que utilizam as melhores práticas em orientação a objetos para atingir os resultados desejados, é correto afirmar que o padrão: ( ) aggregator é utilizado para compor objetos em estruturas de árvore, para representar hierarquias. ( ) decorator é utilizado para prover uma maneira de acessar os elementos de um objeto agregado sequencialmente sem expor sua representação interna. ( ) composite é utilizado para oferecer uma interface única para um conjunto de interfaces de um subsistema, definindo uma interface de nível mais elevado que torna o subsistema mais fácil de usar. ( ) memento permite definir uma nova operação, sem mudar as classes dos elementos nos quais opera. ( ) bridge é utilizado para desacoplar uma abstração de sua implementação para que os dois possam variar independentemente.
27 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Gabarito 1- Memento. 2- 5 - 1 - 3 - 2 – 4. 3- Command,- Interpreter, - Iterator, - Mediator, - Observer, State, Strategy. 4- Flyweight. 5- BUILDER. 6- 4 - 3 - 1 – 2. 7- I, II e III. 8- Gabarito – Padrões Comportamentais são projetados para organizar, gerenciar e combinar diferentes comportamentos. Há 11 padrões comportamentais GoF: Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method e Visitor. 9- Gabarito – É quando se tem uma mesma classe executando muitos trabalhos, realizando muitas coisas não relacionadas. 10- bridge é utilizado para desacoplar uma abstração de sua implementação para que os dois possam variar independentemente.
28 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Padrões de Projeto de Software. 1- Relacione os padrões de projetos listados abaixo com suas respectivas finalidades: PADRÕES DE PROJETO 1. Facade (fachada) 2. Decorator (decorador) 3. Memento (lembrança) 4. Proxy (procurador) 5. Observer (observador) FINALIDADES ( ) Define uma dependência um para muitos entre objetos tal que, quando o estado de um objeto muda, todos os seus dependentes são notificados e atualizados automaticamente. ( ) Fornece uma interface unificada para um conjunto de objetos que constituem um subsistema. Define uma interface de mais alto nível que torna o subsistema mais fácil de usar. ( ) Sem violar o encapsulamento, captura e exterioriza o estado interno de um objeto, tal que o objeto possa ser restaurado a este estado mais tarde. ( ) Acrescenta responsabilidades adicionais a um objeto dinamicamente. Fornece uma alternativa flexível para a extensão de funcionalidade. ( ) Controla o acesso a um objeto através de outro objeto, que atua como seu substituto, ou como um envoltório. Assinale a alternativa que indica a sequência correta, de cima para baixo: ( ) 5 - 1 - 3 - 4 – 2. ( ) 1 - 5 - 3 - 4 – 2. ( ) 3 - 1 - 5 - 2 – 4. ( ) 3 - 5 - 1 - 4 – 2. ( ) 5 - 1 - 3 - 2 – 4. 2- Consideram as afirmativa abaixo sobre o padrão protype I - Declara um método chamado clone na superclasse abstrata do modelo (Prototype). Em função desta declaração, cada classe concreta derivada deve ser capaz de gerar uma nova instância de si próprio. II - , Entre as aplicações para este padrão de projeto está a facilidade de instanciar classes em tempo de execução. III Quando as instancias de uma classe apresentam poucas combinações de estados, pode ser mais conveniente definir previamente um conjunto de protótipos e cloná-los, sempre que foi necessário. ( ( ( ( (
) As afirmativas I, II, estão corretas e a afirmativa III está errada. ) As afirmativas II, III estão corretas e a afirmativa I está errada. ) As afirmativas II, III estão corretas e a afirmativa I está errada. ) As afirmativas I, III, estão corretas e II errada. ) As afirmativas I, II, III estão incorretas.
3- O padrão de projeto Singleton é um dos padrões mais conhecidos e extensivamente utilizados em programação orientada a objetos. Sobre ele podemos afirmar I - Está direcionado para as situações onde precisamos manter uma única instancia de uma classe durante toda a execução da aplicação. II - A sua estrutura é bastante simples, existe apenas uma classe chamada S ingleton, que define um método chamado Instance, responsável poder retornar aos clientes à única instancia da classe. III ¿ Na linguagem Java os modificadores states e private devem garantir uma mesma instância para todos os objetos criados e evitar acesso público; ( ( ( ( (
) As afirmativas I, III, estão corretas e II errada. ) As afirmativas I, II, III estão incorretas. ) As afirmativas estão todas corretas. ) As afirmativas II, III estão corretas e a afirmativa I está errada. ) As afirmativas I, II, estão corretas e a afirmativa III está errada. 29
Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
4- Em padrão de projeto existe uma situação onde uma classe chama um método abstrato especificado em alguma classe abstrata (ou interface) e a subclasse concreta vai decidir que tipo exato de objeto criar e retornar. Baseado nessa descrição marque a alternativa que aponta o padrão relacionado. ( ( ( ( (
) Singleton. ) Factory Method. ) Builder. ) Mediator. ) Facade.
5- Entre as vantagens do padrão Interpreter podem-se citar: I - facilidade para mudar e estender a gramática, pois, o padrão utiliza classes para representar as regras gramaticais. I i - Pode-se usar herança para mudar ou estender a gramática, assim como expressões existentes podem ser modificadas incrementalmente e novas expressões podem ser criadas a partir das existentes; Iii - a implementação da gramática é mais fácil, pois, classes que definem os nós folhas da árvore tem implementações similares. Por outro lado, uma das desvantagens é que o padrão Interpreter define, ao menos, uma classe para cada regra da gramática, logo, gramáticas com muitas regras são difíceis de manter e administrar. ( ( ( ( (
) As afirmativas I, III, estão corretas e II errada. ) As afirmativas I, II, III estão incorretas. ) As afirmativas estão todas corretas. ) As afirmativas II, III estão corretas e a afirmativa I está errada. ) As afirmativas I, II, estão corretas e a afirmativa III está errada.
6- (CONSULPLAN - 2012) O desenvolvimento de software é uma atividade que apresenta dificuldades, ligada ao entendimento do problema. Design Patterns surgiram na busca de soluções para as dificuldades, tornandose um mecanismo eficiente no compartilhamento de conhecimento entre o s desenvolvedores. Gamma propõe um modo de categorização dos DESIGN PATTERNS, definindo famílias de padrões relacionados, descritos a seguir. I. Abrange a configuração e inicialização de objetos e classes. II. Lida com as interfaces e a implementação das classes e dos objetos. III. Lida com as interações dinâmicas entre grupos de classes e objetos. Essas famílias são denominadas, respectivamente, ( ( ( ( (
) Behavioral Patterns, Structural Patterns e Standard Patterns. ) Standard Patterns, Creational Patterns e Structural Patterns. ) Creational Patterns, Structural Patterns e Behavioral Patterns. ) Structural Patterns, Standard Patterns e Creational Patterns. ) Standard Patterns, Structural Patterns e Behavioral Patterns.
7- Podemos afirmar que os Padrões de Criação da família GoF: ( ) Subutilizam as rotinas de tratamento de erros, em virtude da depuração de código fonte na fase de levantamento das necessidades junto aos usuários. ( ) São projetados para organizar, gerenciar e combinar diferentes comportamentos. ( ) Fornecem um guia de como instanciar objetos, que normalmente envolve decisões dinâmicas para escolher, por exemplo, qual classe instanciar ou a quais objetos delegar responsabilidade. ( ) Definem caminhos comuns para a organização de diferentes tipos de objetos, facilitando sua integração e colaboração mútua. ( ) Colocam em dúvida o tratamento dispensado aos usuários na fase de levantamento das necessidades.
30 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
8- Considerando a classe de projetos GoF assinale a opção cujos padrões de projeto estão todos classificados como Estruturais: ( ( ( ( (
) singleton; bridge ; protype; decorator ; faça de ; flyweight ; Proxy. ) singleton; bridge ; composite; decorator ; faça de ; flyweight;¿ Proxy. ) adapter ; bridge ; protype ¿ decorator ; faça de ; flyweight ; singleton. ) adapter ; bridge ; composite ; decorator ; faça de ; flyweight ; singleton. ) adapter ; bridge ; composite ; decorator ; faça de ; flyweight ; Proxy.
9- Segundo Metsker, 2004, o padrão de projeto ______________ tem como solução mover a lógica de construção de uma classe para um objeto externo, a fim de reduzir a complexidade da mesma e permitir a construção gradual de objetos-alvo a partir dessa classe. Escolha uma das alternativas abaixo que preenche corretamente a lacuna apresentada na descrição acima. ( ( ( ( (
) MEDIATOR. ) FACADE. ) FACTORY METHOD. ) BUILDER. ) SINGLETON.
10- Dentre as alternativas abaixo identifique a que NÃO define uma situação em que deve ser utilizado o padrão Factory Method? ( ) Quando o algoritmo de criação de um objeto deve ser independente das suas partes constituintes e da maneira como ele é "montado". ( ) Quando se quer localizar num ponto único a conhecimento de qual subclasse está sendo usada. ( ) Quando uma classe (o criador) não pode antecipar a classe dos objetos que deve criar. ( ) Quando uma classe quer que suas subclasses especifiquem os objetos criados. ( ) Quando classes delegam responsabilidade para uma entre várias subclasses de apoio.
31 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Gabarito 1- 5 - 1 - 3 - 2 – 4. 2- As afirmativas estão todas corretas. 3- As afirmativas estão todas corretas 4- Factory Method. 5- As afirmativas estão todas corretas. 6- Creational Patterns, Structural Patterns e Behavioral Patterns. 7- Fornecem um guia de como instanciar objetos, que normalmente envolve decisões dinâmicas para escolher, por exemplo, qual classe instanciar ou a quais objetos delegar responsabilidade. 8- adapter ; bridge ; composite ; decorator ; faça de ; flyweight ; Proxy 9- BUILDER. 10- Quando o algoritmo de criação de um objeto deve ser independente das suas partes constituintes e da maneira como ele é "montado".
32 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Padrões de Projeto de Software 1- Considerando que o padrão tem o objetivo de garantir que existe apenas uma instancia de uma certa classe a qualquer instante e em qualquer ponto de um sistema. Indique o padrão mencionado e cite uma vantagem de sua utilização. Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________. 2- Considere que o sistema precisa acessar em uma base de dados feita com software antigo e que se corre o risco de provocar futuras manutenções no novo sistema. Que padrão Grasp podemos utilizar para se isolar os métodos que acessam esse banco? Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________. 3- (FCC-2011) Os design patterns ( ) podem ser modelados utilizando-se a linguagem UML que fornece um meio eficiente de modelar padrões de projeto representando-os como colaborações. ( ) são projetos de arquitetura para um domínio específico de aplicação e sempre trazem componentes predefinidos que envolvem código de programação. ( ) são de uso exclusivo em processos de desenvolvimento de soluções orientado a objetos, já que os objetos são a mais adequada abstração para o reuso. ( ) consistem em conjuntos de classes que um usuário instancia para utilizar seus métodos. Após a chamada ao método, o controle do fluxo da aplicação retorna para o usuário. ( ) são aplicações propriamente ditas, normalmente construídas pela integração de diversos frameworks. 4- Considere as afirmativa abaixo sobre o padrão Builder: I ) É utilizado na instanciação de objetos complexos. II)É visto como um construtor especializado, que irá executar e avaliar diferentes regras de negócio e demais particularidades relacionadas com a criação de um novo objeto. III )A idéia é atribuir a responsabilidade de criação do objeto complexo a outra classe, esta classe irá armazenar todas as configurações e regras necessárias para a instanciação do novo objeto. ( ( ( ( (
) As afirmativas I, III, estão corretas e II errada. ) As afirmativas estão todas corretas. ) As afirmativas I, II, estão corretas e a afirmativa III está errada. ) As afirmativas II, III estão corretas e a afirmativa I está errada. ) As afirmativas I, II, III estão incorretas.
5- Programadores se deparam muitas vezes com a situação onde é preciso acrescentar responsabilidades a objetos e não a classe. Uma alternativa é atribuir dinamicamente a um dado objeto. Este padrão é chamado de: ( ( ( ( (
) Bridge. ) Decorator. ) Singleton. ) protype. ) Instance. 33
Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
6- O padrão Adpater é bastante utilizado para compatibilizar classes implementas por programadores diferentes, ou desenvolvidas em momentos diferentes, ou ainda para unir cl asses com interfaces diferentes em uma estrutura hierárquica única, sem precisar implementar novamente todas as funcionalidades e interfaces da classe já existente, considere as afirmativas: I - A ideia é criar uma nova classe (Adapter) com a interface padrão que se deseja para fazer a conexão com a classe já existente (Adaptee) com interface diferente da estrutura de classes que se pretende utilizar no sistema. Ii - Além de reaproveitar totalmente a classe antiga sem precisar alterar o código e entender a complexa implementação realizada, mantém a uniformidade do seu projeto original. Iii cria uma hierarquia de classes diferentes categorias de objetos sem relação de herança. ( ( ( ( (
) As afirmativas estão todas corretas. ) As afirmativas II, III estão corretas e a afirmativa I está errada. ) As afirmativas I, III, estão corretas e II errada. ) As afirmativas I, II, estão corretas e a afirmativa III está errada. ) As afirmativas I, II, III estão incorretas.
7- (CESGRANRIO - 2009) Por motivo de segurança, deseja-se adicionar registro (log) das o perações efetuadas no sistema de contabilidade de uma empresa. O arquiteto do sistema decide que deve existir somente uma instância de uma classe de registro (log) e que esta será o ponto de acesso global para os demais componentes do sistema. Que padrão de projeto pode ser utilizado nesse caso? ( ( ( ( (
) Visitor. ) Memento. ) Singleton. ) Bridge. ) Iterator.
8- (CESGRANRIO - 2009) Ao consultar informações a respeito dos padrões de projeto Adapter e Bridge, um Analista de Sistemas identificou uma afirmativa INCORRETA. Assinale-a. ( ( ( ( (
) O Adapter é inferior ao Bridge porque não evita a replicação de código. ) Ambos promovem a flexibilidade ao fornecer um nível de endereçamento indireto para outro objeto. ) Ambos são padrões estruturais que possuem alguns atributos em comum. ) O foco do Adapter é a solução de incompatibilidades entre duas interfaces existentes. ) O Bridge estabelece uma ponte entre uma abstração e suas possíveis implementações.
9- considere a definição: Visitor: Representar uma operação a ser realizada nos elementos de uma estrutura de objetos. Visitor permite que você defina uma nova operação sem alterar as classes dos elementos nos quais a operação atua (Gamma et al., 2000). Qual das alternativas é completamente verdadeira? ( ) O padrão de projeto acima é indicado para ser utilizado quando uma abstração tem dois aspectos, um dependente do outro. Encapsular tais aspectos em objetos separados permite que variem e sejam reusados separadamente; ( ) O principal objetivo do padrão acima é conservar as funcionalidades em não se permita adicionar novas, E obriga que haja necessidade de alterar sua implementação; ( ) O principal objetivo do padrão acima é permitir que sejam adicionadas novas funcionalidades a classes previamente concebidas, sem que haja necessidade de alterar sua implementação. ( ) A ideia principal do padrão acima é implementar diferentes algoritmos em uma hierarquia de classes, onde cada um deles pode ser substituído por outro, independente do cliente que o utiliza. ( ) O padrão de projeto acima deve ser utilizado não somente quando o comportamento de um objeto depende do seu estado, podendo ser alterado em tempo de execução, mas também quando a funcionalidade de um objeto possui condicionais grandes. 34 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
10- O padrão Variações protegidas tem como característica: ( ) implica que um componente ou classe encapsule somente os atributos e operações muito relacionadas a si e com a classe do componente ou classe propriamente dito. ( ) É um princípio básico para fornecer flexibilidade e proteção contra diversos tipos de variações em um projeto orientado a objetos, tais como: variações nos dados, comportamento, hardware, componentes de software, sistemas operacionais, entre outros. ( ) Sugere atribuir um conjunto de responsabilidades altamente coesa a uma classe artificial ou de conveniência que não represente o domínio do problema, algo inventado, para apoiar coesão alta, acoplamento baixo e reuso. ( ) O objetivo é atribuir responsabilidade a um objeto intermediário para servir como mediador entre outros componentes ou serviços, para que eles não sejam diretamente acoplados. ( ) é o primeiro objeto além da camada de interface com o usuário que é responsável por receber ou tratar uma mensagem de operação do sistema.
35 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Gabarito 1- Resposta – Essa é a descrição do padrão Singleton. A principal vantagem desse padrão é termos uma única instância da classe durante toda a execução do programa, sendo possível seu acesso global de forma simplificada. 2- Gabarito – O padrão Variações protegidas permite definir uma definir classe artificial com o objetivo é atribuir responsabilidade a um objeto intermediário para encapsular este métodos de forma que eles não sejam diretamente acoplados ao sistema. 3- podem ser modelados utilizando-se a linguagem UML que fornece um meio eficiente de modelar padrões de projeto representando-os como colaborações. 4- As afirmativas estão todas corretas. 5- Decorator. 6- As afirmativas I, II, estão corretas e a afirmativa III está errada. 7- Singleton. 8- O Adapter é inferior ao Bridge porque não evita a replicação de código. 9- O principal objetivo do padrão acima é permitir que sejam adicionadas novas funcionalidades a classes previamente concebidas, sem que haja necessidade de alterar sua implementação. 10- É um principio básico para fornecer flexibilidade e proteção contra diversos tipos de variações em um projeto orientado a objetos, tais como: variações nos dados, comportamento, hardware, componentes de software, sistemas operacionais, entre outros.
36 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Padrões de Projeto Software 1- Considerando a classe de projetos GoF assinale a opção cujos padrões de projeto estão todos classificados como criação: ( ( ( ( (
) Abstractly factory; Builder; Composite; Protype – Singleton. ) Command; Builder; Factory Method; Protype – Singleton. ) Abstractly factory; Bridge; Factory Method; Protype; Singleton. ) Abstractly factory; Builder; Factory Method; Decorator – Singleton. ) Abstractly factory; Builder; Factory Method; Protype – Singleton.
2- (FCC - 2011) No contexto dos padrões de projeto: I. Oferecer uma interface simples para uma coleção de classes. II. Desacoplar uma abstração de sua implementação para que ambas possam variar independentemente. Correspondem respectivamente a: ( ( ( ( (
) Adapter e Façade. ) Façade e Bridge. ) Façade e Composite. ) Bridge e Adapter. ) Composite e Bridge.
3- Um dos princípios do padrão de arquitetura MVC é a separação da lógica da apresentação do modelo. PORQUE É, muitas vezes, mais prático manter a visão e o controlador unificados, inclusive, por demandas da tecnologia. Analisando-se as afirmações acima, conclui-se que ... ( ( ( ( (
) A primeira afirmação é verdadeira, e a segunda é falsa. ) A primeira afirmação é falsa, e a segunda é verdadeira. ) As duas afirmações são falsas. ) as duas afirmações são verdadeiras, e a segunda não justifica a primeira. ) as duas afirmações são verdadeiras, e a segunda justifica a primeira.
4- O polimorfismo é um princípio GRASP que aumenta o nível de baixo acoplamento e alta coesão. Apresente uma forma de utilização. Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________. 5- Dentre as alternativas abaixo identifique a que NÃO define uma situação em que deve ser utilizado o padrão Factory Method? ( ) Quando o algoritmo de criação de um objeto deve ser independente das suas partes constituintes e da maneira como ele é "montado". ( ) Quando uma classe quer que suas subclasses especifiquem os objetos criados. ( ) Quando classes delegam responsabilidade para uma entre várias subclasses de apoio. ( ) Quando uma classe (o criador) não pode antecipar a classe dos objetos que deve criar. ( ) Quando se quer localizar num ponto único a conhecimento de qual subclasse está sendo usada.
37 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
6- O projeto Orientado a objetos pressupõe a criação de modelos de domínio a partir dos requisitos identificados para entendimento do negócio e apresentação de uma solução. A esses modelos são acrescidas os aspectos físicos, como os métodos e a troca de mensagens entre eles. A questão é decidir a melhor forma de interação entre os métodos, ou seja, a atribuição da responsabilidade estabelecida para que se possa gerar um melhor resultado. Visando facilitar a construção de soluções são apresentados os padrões de projeto. Assinale dentre as alternativas a seguir a que NÃO define uma característica atribuída ao uso dos padrões. ( ) É apresentado através de uma descrição contendo informações de identificação e registro, como: Nome, Problema, Sumário, Solução, Conseqüências e Padrões Relacionados. ( ) É uma descrição nomeada de um problema e solução que pode ser aplicado em novos contextos. ( ) São definidos por especialistas de problemas e servem para aplicação direta em qualquer contexto. ( ) Fornece orientação de aplicação em circunstâncias variáveis. ( ) O nome do padrão é utilizado para agrupar ideias em um conceito. 7- Considerando que o padrão tem o objetivo de garantir que existe apenas uma instancia de uma certa classe a qualquer instante e em qualquer ponto de um sistema. Indique o padrão mencionado e cite uma vantagem de sua utilização. Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________. 8- Marque a alternativa que está relacionada com o padrão GRASP utilizado para conectar a camada de interface com o usuário e a camada de negócios da aplicação? ( ( ( ( (
) Coesão alta. ) Baixo acoplamento. ) Polimorfismo. ) Especialista da informação. ) Controlador.
9- Marque a alternativa que está relacionada ao padrão GRASP responsável manter os objetos focados, com funcionalidades específicas, inteligíveis e gerenciáveis? ( ( ( ( (
) Baixo acoplamento. ) Especialista da informação. ) Coesão alta. ) Criador. ) Controlador
10- Conhecido como padrões da gangue dos quatro, por terem sido desenvolvidos por quatro autores, os Padrões GoF (Group of Four) estão divididos pelas seguintes famílias de padrões: Padrões de Criação ou de Construção, Padrões Estruturais e Padrões Comportamentais. Considerando os padrões de Criação ou de Construção, analise o modelo abaixo e em seguida marque a alternativa que define a representação.
38 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
( ( ( ( (
) SINGLETON. ) FACTORY METHOD. ) MEDIATOR. ) BUILDER. ) PROTOTYPE.
11- Uma da categoria que tradicionalmente se classificam os padrões de projeto :Padrões Estruturais cujo objetivo é: ( ( ( ( (
) Define a forma de organização dos objetos e sua colaboração mutua. ) Defende formas de instanciar objetos delegando responsabilidades. ) Define formas de gerencia e combinar diferentes comportamentos. ) Define como implantar um novo método em uma classe. ) Define como implantar o mecanismo de herança em um grupo de objetos.
39 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Gabarito 1- Abstractly factory ; Builder ; Factory Method ; Protype – Singleton. 2- Façade e Bridge. 3- as duas afirmações são verdadeiras, e a segunda não justifica a primeira. 4- Gabarito – Criar métodos abstratos em classes genéricas e herdável que são referenciados por classes relacionadas, caracterizando um acoplamento desta interface. 5- Quando o algoritmo de criação de um objeto deve ser independente das suas partes constituintes e da maneira como ele é "montado". 6- São definidos por especialistas de problemas e servem para aplicação direta em qualquer contexto. Fornece orientação de aplicação em circunstâncias variáveis. 7- Gabarito – padrão singleton uma vantagem apontada é o desempenho de uma aplicação. 8- Controlador. 9- Coesão alta. 10- PROTOTYPE. 11- Define a forma de organização dos objetos e sua colaboração mutua.
40 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Padrões de Projeto de Software 1- (C ESGRANRIO - 2010) Um dos participantes da equipe de desenvolvimento de um framework deve implementar uma operação em uma das classes desse framework. Seja X o nome dessa classe. Essa operação implementa um algoritmo em particular. Entretanto, há passos desse algoritmo que devem ser implementados pelos usuários do framework através da definição de uma subclasse de X. Sendo assim, qual o padrão de projeto do catálogo GoF (Gang of Four) a ser usado pelo desenvolvedor do framework na implementação da referida operação, dentre os listados a seguir? ( ( ( ( (
) Singleton. ) Decorator. ) Interpreter. ) Observer. ) Template Method.
2- (FESMIP-BA - 2011) O Design Patterns que tem a finalidade de usar compartilhamento para suportar grandes quantidades de objetos, de granularidade fina, de maneira eficiente, é denominado ( ( ( ( (
) Builder. ) Flyweight. ) State. ) Composite. ) Strategy.
3- Conhecido como padrões da gangue dos quatro, por terem sido desenvolvidos por quatro autores, os Padrões GoF (Group of Four) estão divididos pelos seguintes famílias de padrões: Padrões de Criação ou de Construção, Padrões Estruturais e Padrões Comportamentais. Considerando os padrões de Criação ou de Construção, analise o modelo abaixo e em seguida marque a alternativa que define a representação.
( ( ( ( (
) BUILDER. ) PROTOTYPE. ) MEDIATOR. ) SINGLETON. ) FAC TORY METHOD.
41 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
4- considerando a classe de projetos GoF assinale a opção cujos padrões de projeto estão todos classificados como Estruturais: ( ( ( ( (
) singleton; bridge; protype; decorator; facade ; flyweight ; Proxy. ) adapter; bridge; composite; decorator; facade; flyweight; Proxy. ) adapter; bridge; composite; decorator; facade; flyweight; singleton. ) singleton; bridge; composite; decorator ; facade; flyweight;¿ Proxy. ) adapter; bridge; protype ¿ decorator; facade; flyweight; singleton.
5- Podemos afirmar que os Padrões de Criação da família GoF: ( ) Definem caminhos comuns para a organização de diferentes tipos de objetos, facilitando sua integração e colaboração mútua. ( ) Fornecem um guia de como instanciar objetos, que normalmente envolve decisões dinâmicas para escolher, por exemplo, qual classe instanciar ou a quais objetos delegar responsabilidade. ( ) São projetados para organizar, gerenciar e combinar diferentes comportamentos. ( ) Subutilizam as rotinas de tratamento de erros, em virtude da depuração de código fonte na fase de levantamento das necessidades junto aos usuários. ( ) Colocam em dúvida o tratamento dispensado aos usuários na fase de levantamento das necessidades. 6- Além dos benefícios tradicionais relacionados com produtividade, redução do tempo de desenvolvimento e reaproveitamento de soluções passadas, a utilização de padrões de projeto pode contribuir ainda nos seguintes aspectos I - É uma abordagem complementar, auxiliam os analistas e desenvolvedores a melhor utilizar as práticas tradicionais de análise e projeto orientado a objetos, tais como abstração, encapsula mento, herança, polimorfismo, entre outros. II ¿ Cada padrão descreve um conjunto de problemas e a solução é única não podendo ser alterado III - Auxiliam programadores inexperientes a desenvolverem soluções mais elegantes, melhor documentadas, padronizadas e reutilizáveis. IV - Muitos dos padrões de projeto desenvolvidos auxiliam no refatoramento da aplicação. ( ( ( ( (
) As afirmativas I, III, IV estão corretas e a afirmativa II está errada. ) As afirmativas I, II, III estão corretas e a afirmativa IV está errada. ) As afirmativas I, II, III, IV estão corretas. ) As afirmativas II, III, IV estão corretas e a afirmativa I está errada. ) As afirmativas I, II, IV estão corretas e a afirmativa III está errada.
7- (FESMIP-BA - 2011) Segundo a classificação de Design Patterns apresentada pela GoF, identifique com V os padrões comportamentais e com F, os demais. ( ) Observer. ( ) Iterator. ( ) Façade. ( ) C omposite. ( ) Visitor. A alternativa que contém a sequência correta, de cima para baixo, é a (
) V V F F V.
(
) F V V V F.
(
) V V V V V.
(
) V F F V F.
(
) F F V V V.
8- Considere a figura abaixo
42 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
E escolha a opção correta sobre a gravura: ( ) uma classe de controle exige que sempre se tem há uma classe de apresentação. Desta forma não podemos ter mais de uma classe de controle por sistema. ( ) A Classe instanciada assinalada como :???? Deveria estar incorporada na classe emprestar para evitar criar uma serie de novas classes. Isto facilita o projeto. ( ) A C lasse instanciada assinala como :???? É de baixo acoplamento e baixa coesão pela natureza de sua criação. ( ) A C lasse instanciada assinalada como :???? Não pode ser decomposta em outros controladores. Assim temos que trabalhar com o tipo de coesão resultante (temporal, funcional...) ( ) A classe instanciada assinalada como :???? Permite desacoplar as classes e métodos de apresentação. E isto aumenta a reutilização das classes de negócio. 9- O autor Larman (2007) afirma que as responsabilidades estão relacionadas com as obrigações de um objeto, sendo divididas em dois tipos. Escolha dos dois tipos corretos nas afirmativas abaixo: I) Fazer: fazer algo propriamente dito, como criar um objeto ou realizar um cálculo. Iniciar uma ação em outros objetos. Controlar e coordenar atividades em outros objetos. II) Saber: ter conhecimento sobre dados privados encapsulados. Conhecer objetos relacionados. Ter conhecimento sobre funções que ele pode derivar ou calcular. III) Calcular: Fazer um cálculo especifico ao criar um objeto desde que envolva métodos que necessitem de cálculo. ( ( ( ( (
) As afirmativas I e III são responsabilidades definidas pelo autor. e a afirmativa II não foi definida. ) As afirmativas II e III são responsabilidades definidas pelo autor. e a afirmativa I não foi definida. ) Todas as afirmativas são responsabilidades definidas pelo autor. ) Todas as afirmativas não são responsabilidades definidas pelo auto. ) As afirmativas I e II são responsabilidades definidas pelo autor. e a afirmativa III não foi definida.
10- Em padrão de projeto existe uma situação onde uma classe chama um método abstrato especificado em alguma classe abstrata (ou interface) e a subclasse concreta vai decidir que tipo exato de objeto criar e retornar. Baseado nessa descrição marque a alternativa que aponta o padrão relacionado. ( ( ( ( (
) Facade. ) Singleton. ) Factory Method. ) Builder. ) Mediator. 43
Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Gabarito 1- Template Method. 2- Flyweight. 3- PROTOTYPE. 4- adapter; bridge; composite; decorator; facade; flyweight; Proxy. 5- Fornecem um guia de como instanciar objetos, que normalmente envolve decisões dinâmicas para escolher, por exemplo, qual classe instanciar ou a quais objetos delegar responsabilidade. 6- As afirmativas I, III, IV estão corretas e a afirmativa II está errada. 7- V V F F V. 8- A classe instanciada assinalada como:???? Permite desacoplar as classes e métodos de apresentação. E isto aumenta a reutilização das classes de negócio. 9- As afirmativas I e II são responsabilidades definidas pelo autor. e a afirmativa III não foi definida. 10- Factory Method.
44 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Padrões de Projeto de Software 1- Baixo acoplamento é um princípio-chave na Orientação objetos. O que deve ser feito para garantir o baixo acoplamento na definição dos objetos/classe/subsistema/sistema. Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________. 2- Os métodos polimórficos utilizam os conceitos de overloading e overrinding. Apresente a diferença entre os dois conceitos. Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________. 3- Considere a definição: Visitor: Representar uma operação a ser realizada nos elementos de uma estrutura de objetos. Visitor permite que você defina uma nova operação sem alterar as classes dos elementos nos quais a operação atua (Gamma et al., 2000). Qual das alternativas é completamente verdadeira? ( ) O principal objetivo do padrão acima é permitir que sejam adicionadas novas funcionalidades a classes previamente concebidas, sem que haja necessidade de alterar sua implementação. ( ) A ideia principal do padrão acima é implementar diferentes algoritmos em uma hierarquia de classes, onde cada um deles pode ser substituído por outro, independente do cliente que o utiliza. ( ) O principal objetivo do padrão acima é conservar as funcionalidades em não se permita adicionar novas, E obriga que haja necessidade de alterar sua implementação. ( ) O padrão de projeto acima deve ser utilizado não somente quando o comportamento de um objeto depende do seu estado, podendo ser alterado em tempo de execução, mas também quando a funcionalidade de um objeto possui condicionais grandes. ( ) O padrão de projeto acima é indicado para ser utilizado quando uma abstração tem dois aspectos, um dependente do outro. Encapsular tais aspectos em objetos separados permite que variem e sejam reusados separadamente; 4- Sobre o Polimorfismo considere a figura abaixo e selecione a reposta totalmente correta:
45 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
( ) Define-se uma estrutura de herança. Automaticamente fica definido uma estrutura de métodos. Isto é polimorfismo. ( ) Define-se um método na classe PAI. Este método é copiado nas classes que herdam a classe PAI. Isto é polimorfismo. ( ) Define-se um método abstrato, em uma classe abstrata. Cada classe que herda a classe abstrata implementa o método físico. Dependendo da classe instanciada é executado o método correpondente. Isto é polimorfismo. ( ) Define-se um método físico na classe PAI. Os métodos nas classes filho são definidos. Neste caso cada método é sobreposto. No caso de uma nova classe filho há necessidade obrigatória devido a estrutura PAI de se definir o método na nova classe. Isto é polimorfismo. ( ) Define-se vários métodos. Cada método deve ter uma estrutura IF...THEN...para cada situação. Isto é polimorfismo. 5- O padrão Indireção (Indirection) tem como característica: ( ) O objetivo é atribuir responsabilidade a um objeto intermediário para servir como mediador entre outros componentes ou serviços, para que eles não sejam diretamente acoplados. ( ) é o primeiro objeto além da camada de interface com o usuário que é responsável por receber ou tratar uma mensagem de operação do sistema. ( ) Sugere atribuir um conjunto de responsabilidades altamente coesa a uma classe artificial ou de conveniência que não represente o domínio do problema, algo inventado, para apoiar coesão alta, acoplamento baixo e reuso. ( ) implica que um componente ou classe encapsule somente os atributos e operações muito relacionadas a si e com a classe do componente ou classe propriamente dito. ( ) É um princípio básico para fornecer flexibilidade e proteção contra diversos tipos de variações em um projeto orientado a objetos, tais como: variações nos dados, comportamento, hardware, componentes de software, sistemas operacionais, entre outros. 6- Iterator :Fornecer uma maneira de acessar seqüencialmente os elementos de um objeto agregado sem expor sua implementação. (Gamma et al., 2000). Sobre este padrão de projetos podemos afirmar com certeza: ( ) Considerando objetos que implementam arrays, pode ser visto como uma classe intermediária de comunicação e gerenciamento, evitando que os objetos se comuniquem de forma direta. ( ) tem uma grande facilidade de mudança de comportamento, pode-se alterar seu funcionamento sem que seja necessário nenhuma mudança nas demais classes envolvidas, desde que envolvam coleções e matrizes. ( ) É bastante utilizado em programação de sistemas para gerenciar a comunicação entre dois ou mais objetos, mas não deve ser usado quando associado a percorrer arrays ou tabelas. ( ) É bastante utilizado em programação de sistemas para gerenciar a comunicação entre dois ou mais objetos. ( ) Oferece uma forma de percorrer este tipo de objeto agregado sem conhecer seus detalhes de implementação. 7- Marque a alternativa que está relacionada ao padrão de projeto que é auxiliar a reduzir o impacto de modificações em uma aplicação. ( ( ( ( (
) State. ) Acoplamento fraco. ) Observador. ) Especialista da informação. ) Criador.
8- Entre as vantagens do padrão Interpreter podem-se citar: I - facilidade para mudar e estender a gramática, pois, o padrão utiliza classes para representar as regras gramaticais. I i - Pode-se usar herança para mudar ou estender a gramática, assim como expressões existentes podem ser modificadas incrementalmente e novas 46 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
expressões podem ser criadas a partir das existentes; Iii - a implementação da gramática é mais fácil, pois, classes que definem os nós folhas da árvore tem implementações similares. Por outro lado, uma das desvantagens é que o padrão Interpreter define, ao menos, uma classe para cada regra da gramática, logo, gramáticas com muitas regras são difíceis de manter e administrar. ( ( ( ( (
) As afirmativas I, II, III estão incorretas. ) As afirmativas II, III estão corretas e a afirmativa I está errada. ) As afirmativas I, III, estão corretas e II errada. ) As afirmativas I, II, estão corretas e a afirmativa III está errada. ) As afirmativas estão todas corretas.
9- Considere as afirmativa abaixo sobre o padrão Builder: I ) É utilizado na instanciação de objetos complexos. II)É visto como um construtor especializado, que irá executar e avaliar diferentes regras de negócio e demais particularidades relacionadas com a criação de um novo objeto. III )A idéia é atribuir a responsabilidade de criação do objeto complexo a outra classe, esta classe irá armazenar todas as configurações e regras necessárias para a instanciação do novo objeto. ( ( ( ( (
) As afirmativas I, III, estão corretas e II errada. ) As afirmativas estão todas corretas. ) As afirmativas I, II, III estão incorretas. ) As afirmativas II, III estão corretas e a afirmativa I está errada. ) As afirmativas I, II, estão corretas e a afirmativa III está errada.
10- O padrão Adpater é bastante utilizado para compatibilizar classes implementas por programadores diferentes, ou desenvolvidas em momentos diferentes, ou ainda para unir classes com interfaces diferentes em uma estrututura hierarquica única, sem precisar implementar novamente todas as funcionalidades e interfaces da classe já existente, considere as afirmativas: I - A idéia é criar uma nova classe (Adapter) com a interface padrão que se deseja para fazer a conexão com a classe já existente (Adaptee) com interface diferente da estrutura de classes que se pretende utilizar no sistema. Ii - Além de reaproveitar totalmente a classe antiga sem precisar alterar o código e entender a complexa implementação realizada, mantém a uniformidade do seu projeto original. Iii cria uma hierarquia de classes diferentes categorias de objetos sem relação de herança. ( ( ( ( (
) As afirmativas II, III estão corretas e a afirmativa I está errada. ) As afirmativas I, II, III estão incorretas. ) As afirmativas I, II, estão corretas e a afirmativa III está errada. ) As afirmativas I, II, estão corretas e a afirmativa III está errada. ) As afirmativas estão todas corretas.
47 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Gabarito 1- Gabarito – Deve-se manter os objetos/classe/subsistema/sistema o mais independente possível, ou seja, não possui conhecimento sobre o outro ou confia em outro. 2- Gabarito – O conceito OVERLOADING é a sobrecarga dos métodos: define vários métodos de mesmo nome com assinaturas diferentes. O conceito OVERRIDING altera o comportamento do método na subclasse, mantendo a mesma assinatura, com funcionalidade diferente. 3- O principal objetivo do padrão acima é permitir que sejam adicionadas novas funcionalidades a classes previamente concebidas, sem que haja necessidade de alterar sua implementação. 4- Define-se um método abstrato, em uma classe abstrata. Cada classe que herda a classe abstrata implementa o método físico. Dependendo da classe instanciada é executado o método correspondente. Isto é polimorfismo. 5- O objetivo é atribuir responsabilidade a um objeto intermediário para servir como mediador entre outros componentes ou serviços, para que eles não sejam diretamente acoplados. 6- Oferece uma forma de percorrer este tipo de objeto agregado sem conhecer seus detalhes de implementação. 7- Acoplamento fraco. 8- As afirmativas estão todas corretas. 9- As afirmativas estão todas corretas. 10- As afirmativas I, II, estão corretas e a afirmativa III está errada.
48 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Padrões de Projeto de Software 1- Podemos afirmar que os Padrões de Criação da família GoF: ( ) São projetados para organizar, gerenciar e combinar diferentes comportamentos. ( ) Subutilizam as rotinas de tratamento de erros, em virtude da depuração de código fonte na fase de levantamento das necessidades junto aos usuários. ( ) Colocam em dúvida o tratamento dispensado aos usuários na fase de levantamento das necessidades. ( ) Definem caminhos comuns para a organização de diferentes tipos de objetos, facilitando sua integração e colaboração mútua. ( ) Fornecem um guia de como instanciar objetos, que normalmente envolve decisões dinâmicas para escolher, por exemplo, qual classe instanciar ou a quais objetos delegar responsabilidade. 2( ( ( ( (
A família de padrões GoF é dividida em três grupos principais de padrões, a saber: ) Padrões de Processo; Padrões de Singularidade; Padrões de Prototipação. ) Padrões de Criação; Padrões Metodológicos; Padrões de Ponte. ) Padrões Estruturais; Padrões de Processo; Padrões de Responsabilidade. ) Padrões Comportamentais; Padrões de Criação; Padrões Estruturais. ) Padrões de Proxy; Padrões de Criação; Padrões de Encadeamento.
3- Podemos afirmar que os Padrões Comportamentais da família GoF: ( ) São projetados para organizar, gerenciar e combinar diferentes comportamentos ( ) Definem caminhos comuns para a organização de diferentes tipos de objetos, facilitando sua integração e colaboração mútua. ( ) Subutilizam as rotinas de tratamento de erros, em virtude da depuração de código fonte na fase de levantamento das necessidades junto aos usuários. ( ) Fornecem um guia de como instanciar objetos, que normalmente envolve decisões dinâmicas para escolher, por exemplo, qual classe instanciar ou a quais objetos delegar responsabilidade. ( ) Diminuem a responsabilidade do desenvolvedor em modelar o sistema e adequar as rotinas necessárias à documentação dos processos. 4- (FCC-2011) Os design patterns ( ) são projetos de arquitetura para um domínio específico de aplicação e sempre trazem componentes predefinidos que envolvem código de programação. ( ) são de uso exclusivo em processos de desenvolvimento de soluções orientado a objetos, já que os objetos são a mais adequada abstração para o reuso. ( ) podem ser modelados utilizando-se a linguagem UML que fornece um meio eficiente de modelar padrões de projeto representando-os como colaborações. ( ) consistem em conjuntos de classes que um usuário instancia para utilizar seus métodos. Após a chamada ao método, o controle do fluxo da aplicação retorna para o usuário. ( ) são aplicações propriamente ditas, normalmente construídas pela integração de diversos frameworks. 5- Consideram as afirmativas abaixo sobre o padrão protype I - Declara um método chamado clone na superclasse abstrata do modelo (Prototype). Em função desta declaração, cada classe concreta derivada deve ser capaz de gerar uma nova instância de si próprio. II - Entre as aplicações para este padrão de projeto está a facilidade de instanciar classes em tempo de execução. III - Quando as instancias de uma classe apresentam poucas combinações de estados, pode ser mais conveniente definir previamente um conjunto de protótipos e cloná-los, sempre que foi necessário. ( ( ( ( (
) As afirmativas II, III estão corretas e a afirmativa I está errada. ) As afirmativas I, II, III estão incorretas. ) As afirmativas estão todas corretas. ) As afirmativas I, II, estão corretas e a afirmativa III está errada. ) As afirmativas I, III, estão corretas e II errada. 49
Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
6- Considere as afirmativa abaixo sobre o padrão Builder: I ) É utilizado na instanciação de objetos complexos. II)É visto como um construtor especializado, que irá executar e avaliar diferentes regras de negócio e demais particularidades relacionadas com a criação de um novo objeto. III )A idéia é atribuir a responsabilidade de criação do objeto complexo a outra classe, esta classe irá armazenar todas as configurações e regras necessárias para a instanciação do novo objeto. ( ( ( ( (
) As afirmativas I, III, estão corretas e II errada. ) As afirmativas estão todas corretas. ) As afirmativas II, III estão corretas e a afirmativa I está errada. ) As afirmativas I, II, III estão incorretas. ) As afirmativas I, II, estão corretas e a afirmativa III está errada.
7- Entre as vantagens do padrão Interpreter podem-se citar: I - facilidade para mudar e estender a gramática, pois, o padrão utiliza classes para representar as regras gramaticais. I i - Pode-se usar herança para mudar ou estender a gramática, assim como expressões existentes podem ser modificadas incrementalmente e novas expressões podem ser criadas a partir das existentes; Iii - a implementação da gramática é mais fácil, pois, classes que definem os nós folhas da árvore tem implementações similares. Por outro lado, uma das desvantagens é que o padrão Interpreter define, ao menos, uma classe para cada regra da gramática, logo, gramáticas com muitas regras são difíceis de manter e administrar. ( ( ( ( (
) As afirmativas estão todas corretas. ) As afirmativas II, III estão corretas e a afirmativa I está errada. ) As afirmativas I, II, estão corretas e a afirmativa III está errada. ) As afirmativas I, II, III estão incorretas. ) As afirmativas I, III, estão corretas e II errada.
8- Sobre padrões de projeto escolha a opção incorreta. ( ) Cada padrão descreve um problema que ocorrem repetidas vezes em nosso ambiente e fornece o núcleo da solução para aquele problema, de tal maneira que se pode usar essa solução milhões de vezes sem nunca fazê-la da mesma forma. ( ) Um padrão de projeto define uma estrutura que obrigatoriamente não poderá ser alterada pelo ( ) Desenvolvedor a diversidade de padrões disponíveis é bastante grande, pode-se ter, por exemplo, padrões arquiteturais, padrões de análise, padrões de projeto e padrões de código. ( ) Os padrões de projeto são descrições de objetos que se comunicam e classes que são customizadas para resolver um problema genérico de design em um contexto específico. ( ) Padrões de projeto estão relacionados a diferentes níveis de abstração no desenvolvimento de aplicações orientadas a objetos, podendo aparecer ao longo de todo ciclo de análise e projeto de um sistema. 9- Uma das categoria que tradicionalmente se classificam os padrões de projeto :Padrões Comportamentais cujo objetivo é: ( ( ( ( (
) Defende formas de instanciar objetos delegando responsabilidades. ) Define como implantar um novo método em uma classe. ) Define a forma de organização dos objetos e sua colaboração mutua. ) Define formas de gerencia e combinar diferentes comportamentos. ) Define como implantar o mecanismo de herança em um grupo de objetos.
50 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
10- Além dos benefícios tradicionais relacionados com produtividade, redução do tempo de desenvolvimento e reaproveitamento de soluções passadas, a utilização de padrões de projeto pode contribuir ainda nos seguintes aspectos I - É uma abordagem complementar, auxiliam os analistas e desenvolvedores a melhor utilizar as práticas tradicionais de análise e projeto orientado a objetos, tais como abstração, encapsula mento, herança, polimorfismo, entre outros. II ¿ Cada padrão descreve um conjunto de problemas e a solução é única não podendo ser alterado III - Auxiliam programadores inexperientes a desenvolverem soluções mais elegantes, melhor documentadas, padronizadas e reutilizáveis. IV - Muitos dos padrões de projeto desenvolvidos auxiliam no refatoramento da aplicação. ( ( ( ( (
) As afirmativas I, II, III estão corretas e a afirmativa IV está errada. ) As afirmativas I, II, IV estão corretas e a afirmativa III está errada. ) As afirmativas I, III, IV estão corretas e a afirmativa II está errada. ) As afirmativas II, III, IV estão corretas e a afirmativa I está errada. ) As afirmativas I, II, III, IV estão corretas.
51 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Gabarito 1- Fornecem um guia de como instanciar objetos, que normalmente envolve decisões dinâmicas para escolher, por exemplo, qual classe instanciar ou a quais objetos delegar responsabilidade. 2- Padrões Comportamentais; Padrões de Criação; Padrões Estruturais. 3- São projetados para organizar, gerenciar e combinar diferentes comportamentos. 4- podem ser modelados utilizando-se a linguagem UML que fornece um meio eficiente de modelar padrões de projeto representando-os como colaborações. 5- ... 6- As afirmativas estão todas corretas. 7- As afirmativas estão todas corretas. 8- Um padrão de projeto define uma estrutura que obrigatoriamente não poderá ser alterada pelo Desenvolvedor. 9- Define formas de gerencia e combinar diferentes comportamentos. 10- As afirmativas I, III, IV estão corretas e a afirmativa II está errada.
52 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Padrões de Projeto de Software 1- Analise as sentenças sobre padrões de projeto de software e, em seguida, assinale a alternativa correta: corr eta: I. Permitem descrever fragmentos de projeto e reusar ideias de projeto; II. Dão nome e forma a procedimentos abstratos, regras e melhores práticas relativas às técnicas orientadas a objetos; III. Ajudam a escolher alternativas de projeto que tornam um sistema reutilizável. ( ( ( ( (
) Apenas a sentença II está correta. ) Apenas as sentenças I e II estão corretas. ) Apenas as sentenças I e III estão corretas. ) Todas as sentenças estão corretas. ) Apenas as sentenças II e III estão corretas.
2- Assinale a afirmativa correta sobre o padrão Builder: ( ) é uma abordagem que não facilita a criação de objetos com diferentes configurações e representações, tornando o código dependente a complexidade c omplexidade das classes relacionadas ( ) A legibilidade da solução final, ou seja, para para entender como um objeto objeto é criado criado e sob quais condições, fica comprometida ( ) Deve-se é separar no construtor da própria classe a lógica para criação de um objeto e concentrar a lógica de criação em uma hierarquia de herança. ( ) Um dos principais objetivos do do padrão Builder é separar o algoritmo de criação de um objeto complexo tanto da especificação, quanto das partes que o compõem. ( ) Deve-se é embutir embutir no construtor da própria classe a lógica para para criação de um objeto ou ainda distribuir a lógica de criação em vários métodos adicionais. 3- Para fazer a modelagem de um padrão de projeto (design pattern) utilizando a UML é DESNECESSÁRIO. ( ) identificar as soluções comuns para o problema básico. ( ) fazer a modelagem modelagem do mecanismo como uma colaboração, fornecendo fornecendo seus seus aspectos aspectos estruturais, estruturais, assim como os aspectos comportamentais. ( ) identificar os elementos elementos do padrão de projeto que devem ser vinculados aos elementos em um contexto específico e representá-los como parâmetros para colaboração. ( ) entender o padrão de projeto projeto como uma colaboração representada com suas partes estruturais estruturais e comportamentais. ( ) identificar as soluções específicas e particulares para o problema básico e retificá-la como um mecanismo. mecanismo. 4- Sobre o padrão Composite podemos afirmar: I ¿ É utilizado quando se pretende representar hierarquias partes-todo (ou todo-parte) de objetos, ou ainda, quando se pretende modelar relacionamento de agregação. Ii - o cliente poderá acessar objetos compostos ou não de maneira uniforme, pois irá se relacionar com a classe abstrata III ¿ Um processamento pode- ser realizado diretamente por uma superclasse Componente, quando se trata de uma composição, e o processamento parcial é feito pela classe filha, montando todas as partes que compõem o objeto. ( ( ( ( (
) As afirmativas I, II, estão corretas e a afirmativa afirmativa III III está está errada. ) As afirmativas estão todas corretas. ) As afirmativas I, III, estão corretas e II errada. ) As afirmativas II, III estão corretas e a afirmativa afirmativa I está errada. ) As afirmativas I, II, III estão incorretas.
53 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
5- Na UML, o padrão Singleton (GoF) pode ser visto como na classe abaixo:
Sobre o padrão de projeto Singleton, I - o número 1 no canto superior da classe pode ser utilizado opcionalmente para indicar que esta classe terá apenas uma única instância. II - para se implementar o padrão Singleton na classe acima, esta deverá possuir um método construtor ServicesFactory() privado. III - caso uma subclasse estenda a classe ServicesFactory através de herança, o método getInstance() deverá ser sobrescrito (override) para construir a subclasse. IV - o método getInstance() deverá ser obrigatoriamente declarado como um método estático (static). Assinale a alternativa que indica assertivas CORRETAS: ( ( ( ( (
) I – II – III. ) I – III – IV. ) I – II - III – IV. ) II – III – IV. ) I – II – IV.
6- (CONSULPLAN - 2012) O desenvolvimento de software é uma atividade que apresenta dificuldades, ligada ao entendimento do problema. Design Patterns surgiram na busca de soluções para as dificuldades, tornandose um mecanismo eficiente no compartilhamento de conhecimento entre os desenvolvedores. Gamma propõe um modo de categorização dos DESIGN PATTERNS, definindo famílias de padrões relacionados, descritos a seguir. I. Abrange a configuração e inicialização de objetos e classes. II. Lida com as interfaces e a implementação das classes e dos objetos. III. Lida com as interações dinâmicas entre grupos de classes e objetos. Essas famílias são denominadas, respectivamente, ( ( ( ( (
) Behavioral Patterns, Structural Patterns e Standard Patterns. ) Standard Patterns, Creational Patterns e Structural Patterns. ) Standard Patterns, Structural Patterns e Behavioral Patterns. ) Creational Patterns, Structural Patterns e Behavioral Patterns. ) Structural Patterns, Standard Patterns e Creational Patterns. 54
Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
7- Podemos afirmar que os Padrões de Criação da família GoF: ( ) Colocam em dúvida o tratamento tratamento dispensado aos usuários na fase de levantamento levantamento das necessidades. ( ) Subutilizam as rotinas de tratamento de erros, em virtude da depuração de código fonte na fase de levantamento das necessidades junto aos usuários. ( ) Fornecem um guia de como instanciar objetos, que normalmente envolve decisões dinâmicas para escolher, por exemplo, qual classe instanciar ou o u a quais objetos delegar responsabilidade. ( ) Definem caminhos comuns para a organização de diferentes tipos de objetos, facilitando sua integração e colaboração mútua. ( ) São São projetados projetados para organizar, gerenciar e combinar diferentes comportamentos. 8- Considerando a classe de projetos GoF assinale a opção cujos padrões de projeto estão todos classificados como criação: ( ( ( ( (
) Command ; Builder ; Factory Method ; Protype – Singleton. ) Abstractly factory ; Builder ; Composite ; Protype – Singleton. ) Abstractly Abstractly factory ; Builder ; Factory Method ; Protype Protype – Singleton. ) Abstractly factory ; Bridge Bridge ; Factory Method ; Protype Protype ; Singleton. ) Abstractly Abstractly factory ; Builder ; Factory Method ; Decorator – Singleton.
9- Segundo Metsker, 2004, o padrão de projeto ______________ tem como solução mover a lógica de construção de uma classe para um objeto externo, a fim de reduzir a complexidade da mesma e permitir a construção gradual de objetos-alvo a partir dessa classe. Escolha uma das alternativas abaixo que preenche corretamente a lacuna apresentada na descrição acima. ( ( ( ( (
) FACADE. ) MEDIATOR. ) BUILDER. ) SINGLETON. ) FACTORY METHOD.
10- Dentre as alternativas abaixo identifique a que NÃO define uma situação em que deve ser utilizado o padrão Factory Method? ( ) Quando o algoritmo de de criação de um objeto deve deve ser independente das suas partes constituintes e da maneira como ele é "montado". ( ) Quando se quer localizar num ponto único a conhecimento de qual subclasse está está sendo usada. ( ) Quando Quando uma classe quer que suas subclasses especifiquem os objetos criados. ( ) Quando Quando classes classes delegam delegam responsabilidade para uma entre várias subclasses de apoio. apoio. ( ) Quando uma classe (o criador) não pode antecipar a classe dos objetos que deve criar.
55 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Gabarito 1- Todas as sentenças estão corretas. 2- Um dos principais objetivos do padrão Builder é separar o algoritmo de criação de um objeto complexo tanto da especificação, quanto das partes que o compõem. 3- Identificar as soluções específicas e particulares para o problema básico e reificá-la como um mecanismo. 4- As afirmativas I, II, estão corretas e a afirmativa III está errada. 5- I - II – IV. 6- Creational Patterns, Structural Patterns e Behavioral Patterns. 7- Fornecem um guia de como instanciar objetos, que normalmente envolve decisões dinâmicas para escolher, por exemplo, qual classe instanciar ou a quais objetos delegar responsabilidade. 8- Abstractly factory ; Builder ; Factory Method ; Protype – Singleton. 9- BUILDER. 10- Quando o algoritmo de criação de um objeto deve ser independente das suas partes constituintes e da maneira como ele é "montado".
56 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Padrões de Projeto de Software. 1- Podemos afirmar que os Padrões Estruturais da família GoF: ( ) Aumentam a responsabilidade do programador em depurar o código e as rotinas necessárias à documentação dos processos. ( ) Definem caminhos comuns para a organização de diferentes tipos de objetos, facilitando sua integração e colaboração mútua. ( ) Colocam em dúvida o tratamento dispensado aos usuários na fase de levantamento das necessidades. ( ) Fornecem um guia de como instanciar objetos, que normalmente envolve decisões dinâmicas para escolher, por exemplo, qual classe instanciar ou a quais objetos delegar responsabilidade. ( ) São projetados para organizar, gerenciar e combinar diferentes comportamentos. 2- O projeto Orientado a objetos pressupõe a criação de modelos de domínio a partir dos requisitos identificados para entendimento do negócio e apresentação de uma solução. A esses modelos são acrescidas os aspectos físicos, como os métodos e a troca de mensagens entre eles. A questão é decidir a melhor forma de interação entre os métodos, ou seja, a atribuição da responsabilidade estabelecida para que se possa gerar um melhor resultado. Visando facilitar a construção de soluções são apresentados os padrões de projeto. Assinale dentre as alternativas a seguir a que NÃO define uma característica atribuída ao uso dos padrões. ( ) Fornece orientação de aplicação em circunstâncias variáveis. ( ) É uma descrição nomeada de um problema e solução que pode ser aplicado em novos contextos. ( ) O nome do padrão é utilizado para agrupar ideias em um conceito. ( ) É apresentado através de uma descrição contendo informações de identificação e registro, como: Nome, Problema, Sumário, Solução, Consequências e Padrões Relacionados. ( ) São definidos por especialistas de problemas e servem para aplicação direta em qualquer contexto. 3- Analise as sentenças abaixo sobre os grupos de padrões da família GoF e, em seguida, assinale a alternativa correta: I. Os Padrões Comportamentais são projetados para organizar, gerenciar e combinar diferentes comportamentos. Podemos citar os seguintes padrões pertencentes a esse grupo: Chain of Responsibility, Command e Interpreter. II. Os Padrões de C riação fornecem um guia de como instanciar objetos. Esta ação normalmente envolve decisões estáticas para escolher, por exemplo, quais objetos instanciar ou a quais classes delegar responsabilidade. São doze os padrões de criação: Adapter, Bridge, Composite, Decorator, Façade, Flyweight, Proxy, Abstract Factory, Builder, Factory Method, Prototype e Singleton. III. Os Padrões Estruturais definem caminhos comuns para a organização de diferentes tipos de objetos, facilitando sua integração e colaboração mútua. ( ( ( ( (
) Apenas as sentenças I e III estão corretas. ) Todas as sentenças estão corretas. ) Apenas as sentenças II e III estão corretas. ) Apenas as sentenças I e II estão corretas. ) Apenas a sentença II está correta.
57 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
4- Considerando que o padrão tem o objetivo de garantir que existe apenas uma instancia de uma certa classe a qualquer instante e em qualquer ponto de um sistema. Indique o padrão mencionado e cite uma vantagem de sua utilização. Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________. 5- (FC C -2011) Os design patterns ( ) podem ser modelados utilizando-se a linguagem UML que fornece um meio eficiente de modelar padrões de projeto representando-os como colaborações. ( ) consistem em conjuntos de classes que um usuário instancia para utilizar seus métodos. Após a chamada ao método, o controle do fluxo da aplicação retorna para o usuário. ( ) são aplicações propriamente ditas, normalmente construídas pela integração de diversos frameworks. ( ) são projetos de arquitetura para um domínio específico de aplicação e sempre trazem componentes predefinidos que envolvem código de programação. ( ) são de uso exclusivo em processos de desenvolvimento de soluções orientado a objetos, já que os objetos são a mais adequada abstração para o reuso. 6- Os padrões de projetos, quando aplicados ao desenvolvimento de aplicações, fornecem meios de descrever soluções comuns para problemas comuns, resultando em redução de tempo gasto com o desenvolvimento e melhoria da qualidade da aplicação. (FC C - 2009) Analise: I. É o responsável pela especificação dos tipos de objetos a serem criados usando uma "instância" prototípica e pela criação de novos objetos copiando este protótipo. II. Define uma interface de nível mais alto que torna o subsistema mais fácil de usar e fornece uma interface única para um subsistema com diversas interfaces; compõe o grupo de padrões estruturais. III. Integrante do grupo de padrões comportamentais, ele provê uma forma de acessar sequencialmente os elementos de um agregado de objetos, sem expor a representação interna desse agregado. IV. As consequências do uso deste padrão é que o encapsulamento é mantido, já que objetos usam sua própria informação para cumprir responsabilidades; leva ao fraco acoplamento entre objetos e à alta coesão, uma vez que objetos fazem tudo que é relacionado à sua própria informação. As afirmações correspondem, respectivamente, aos padrões: ( ( ( ( (
) Prototype, Facade, Iterator e Expert. ) Command, Iterator, Singleton e Expert. ) Command, Singleton, Controller e Façade. ) Adapter, Facade, Command e Iterator. ) Controller, Expert, Singleton e Prototype.
7- Considere que o sistema precisa acessar em uma base de dados feita com software antigo e que se corre o risco de provocar futuras manutenções no novo sistema. Que padrão Grasp podemos utilizar para se isolar os métodos que acessam esse banco? Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________. 58 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
8- Marque a alternativa que está relacionada ao padrão de projeto que é auxiliar a reduzir o impacto de modificações em uma aplicação. ( ( ( ( (
) Observador. ) State. ) Acoplamento fraco. ) Criador. ) Especialista da informação.
9- Iterator :Fornecer uma maneira de acessar sequencialmente os elementos de um objeto agregado sem expor sua implementação. (Gamma et al., 2000). Sobre este padrão de projetos podemos afirma com certeza: ( ) Considerando objetos que implementam arrays, pode ser visto como uma classe intermediária de comunicação e gerenciamento, evitando que os objetos se comuniquem de forma direta ( ) É bastante utilizado em programação de sistemas para gerenciar a comunicação entre dois ou mais objetos, mas não deve ser usado quando associado a percorrer arrays ou tabelas. ( ) tem uma grande facilidade de mudança de comportamento, pode-se alterar seu funcionamento sem que seja necessário nenhuma mudança nas demais classes envolvidas, desde que envolvam coleções e matrizes. ( ) É bastante utilizado em programação de sistemas para gerenciar a comunicação entre dois ou mais objetos. ( ) Oferece uma forma de percorrer este tipo de objeto agregado sem conhecer seus detalhes de implementação. 10- Sobre o padrão Command: I - É ideal para acessar elementos de coleções, matrizes ou estruturas de dados encadeados II - A vantagem desta abordagem é que o objeto que está realizando a chamada do método não precisa saber nada sobre seu funcionamento. III - Este padrão de projeto oferece uma maior flexibilidade na arquitetura do sistema, uma vez que permite a adição de novas funcionalidades (comandos) sem a necessidade de mudar a arquitetura. podemos afirmar: ( ( ( ( (
) As afirmativas II, III estão corretas e a afirmativa I está errada. ) As afirmativas I, III, estão corretas e II errada. ) As afirmativas I, II, III e IV estão corretas. ) As afirmativas I, II, estão corretas e a afirmativa III está errada. ) As afirmativas I, II, III estão incorretas.
11- Uma das categoria que tradicionalmente se classificam os padrões de projeto :Padrões Estruturais cujo objetivo é: ( ( ( ( (
) Define a forma de organização dos objetos e sua colaboração mutua. ) Defende formas de instanciar objetos delegando responsabilidades. ) Define como implantar um novo método em uma classe. ) Define formas de gerencia e combinar diferentes comportamentos. ) Define como implantar o mecanismo de herança em um grupo de objetos.
59 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Gabarito 1- Definem caminhos comuns para a organização de diferentes tipos de objetos, facilitando sua integração e colaboração mútua. 2- São definidos por especialistas de problemas e servem para aplicação direta em qualquer contexto. 3- Apenas as sentenças I e III estão corretas. 4- Gabarito – padrão singleton uma vantagem apontada é o desempenho de uma aplicação. 5- podem ser modelados utilizando-se a linguagem UML que fornece um meio eficiente de modelar padrões de projeto representando-os como colaborações. 6- Prototype, Façade, Iterator e Expert. 7- Gabarito – O padrão Variações protegidas permite definir uma definir classe artificial com o objetivo é atribuir responsabilidade a um objeto intermediário para encapsular este métodos de forma que eles não sejam diretamente acoplados ao sistema. 8- Acoplamento fraco. 9- Oferece uma forma de percorrer este tipo de objeto agregado sem conhecer seus detalhes de implementação. 10- As afirmativas II, III estão corretas e a afirmativa I está errada. 11- Define a forma de organização dos objetos e sua colaboração mutua.
60 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Padrões de Projeto de Software 1- Um dos princípios do padrão de arquitetura MVC é a separação da lógica da apresentação do modelo. PORQUE É, muitas vezes, mais prático manter a visão e o controlador unificados, inclusive, por demandas da tecnologia. Analisando se as afirmações acima, conclui-se que ... ( ( ( ( (
) As duas afirmações são falsas ) as duas afirmações são verdadeiras, e a segunda não justifica a primeira. ) a primeira afirmação é falsa, e a segunda é verdadeira. ) as duas afirmações são verdadeiras, e a segunda justifica a primeira. ) a primeira afirmação é verdadeira, e a segunda é falsa.
2- Para fazer a modelagem de um padrão de projeto (design pattern) utilizando a UML é DESNECESSÁRIO. (
) identificar as soluções comuns para o problema básico.
( ) fazer a modelagem do mecanismo como uma colaboração, fornecendo seus aspectos estruturais, assim como os aspectos comportamentais. (
) identificar as soluções específicas e particulares para o problema básico e reificá-la como um mecanismo.
( ) entender o padrão de projeto como uma colaboração representada com suas partes estruturais e comportamentais. ( ) identificar os elementos do padrão de projeto que devem ser vinculados aos elementos em um contexto específico e representá-los como parâmetros para colaboração. 3- Conhecido como padrões da gangue dos quatro, por terem sido desenvolvidos por quatro autores, os Padrões GoF (Group of Four) estão divididos pelos seguintes famílias de padrões: Padrões de Criação ou de Construção, Padrões Estruturais e Padrões Comportamentais. Considerando os padrões de Criação ou de Construção, analise o modelo abaixo e em seguida marque a alternativa que define a representação.
( ( ( ( (
) Singleton. ) Factory Method. ) Facade. ) Builder. ) Mediator.
61 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
4- Uma das categorias que tradicionalmente se classificam os padrões de projeto :Padrões Estruturais cujo objetivo é: ( ( ( ( (
) Define a forma de organização dos objetos e sua colaboração mutua. ) Defende formas de instanciar objetos delegando responsabilidades. ) Define como implantar um novo método em uma classe. ) Define formas de gerencia e combinar diferentes comportamentos. ) Define como implantar o mecanismo de herança em um grupo de objetos.
5- Segundo Metsker, o padrão de projeto GoF _________________ é aplicado para substituir a geração de instâncias não-inicializadas de uma classe, fornecendo novos objetos a partir de uma classe-exemplo. ( ( ( ( (
) MEDIATOR. ) FACTORY METHOD. ) PROTOTYPE. ) BUILDER. ) SINGLETON.
6- Iterator :Fornecer uma maneira de acessar seqüencialmente os elementos de um objeto agregado sem expor sua implementação. (Gamma et al., 2000). Sobre este padrão de projetos podemos afirmar com certeza: ( ) É bastante utilizado em programação de sistemas para gerenciar a comunicação entre dois ou mais objetos, mas não deve ser usado quando associado a percorrer arrays ou tabelas. ( ) Considerando objetos que implementam arrays, pode ser visto como uma classe intermediária de comunicação e gerenciamento, evitando que os objetos se comuniquem de forma direta ( ) tem uma grande facilidade de mudança de comportamento, pode-se alterar seu funcionamento sem que seja necessário nenhuma mudança nas demais classes envolvidas, desde que envolvam coleções e matrizes. ( ) É bastante utilizado em programação de sistemas para gerenciar a comunicação entre dois ou mais objetos. ( ) Oferece uma forma de percorrer este tipo de objeto agregado sem conhecer seus detalhes de implementação. 7- As principais aplicabilidades do padrão command de projeto são: I) permitir fácil inclusão de novos comandos; II) permitir tratamento de requisições concorrentes, manter histórico de execução de comandos; III) suportar operações para desfazer comandos e; IV) evitar o acoplamento direto entre classes e serviços. Podemos a firmar com certeza que: ( ( ( ( (
) As afirmativas I, II, III e IV estão corretas. ) As afirmativas II, III ,IVestão corretas e a afirmativa I está errada. ) As afirmativas I, II, IV estão corretas e a afirmativa III está errada. ) As afirmativas I, III, IVestão corretas e II errada. ) As afirmativas I, II, III estão erradas e IV correta.
8- Decorator tem como principal objetivo a decoração de classes em tempo de execução, isto é, adicionar novos produtos e/ou novas responsabilidades a objetos dinamicamente sem alterar o código das classes existentes. Descreva um exemplo que represente esse padrão. Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________. 62 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
9- Os métodos polimórficos utilizam os conceitos de overloading e overrinding. Apresente a diferença entre os dois conceitos. Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________. 10- Sobre o Polimorfismo considere a figura abaixo e selecione a reposta totalmente correta:
( ) Define-se um método físico na classe PAI. Os métodos nas classes filho são definidos. Neste caso cada método é sobreposto. No caso de uma nova classe filho há necessidade obrigatória devido a estrutura PAI de se definir o método na nova classe. Isto é polimorfismo. ( ) Define-se vários métodos. Cada método deve ter uma estrutura IF...THEN...para cada situação. Isto é polimorfismo. ( ) Define-se uma estrutura de herança. Automaticamente fica definido uma estrutura de métodos. Isto é polimorfismo ( ) Define-se um método abstrato, em uma classe abstrata. Cada classe que herda a classe abstrata implementa o método físico. Dependendo da classe instanciada é executado o método correpondente. Isto é polimorfismo. ( ) Define-se um método na classe PAI. Este método é copiado nas classes que herdam a classe PAI. Isto é polimorfismo.
63 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Gabarito 1- as duas afirmações são verdadeiras, e a segunda não justifica a primeira. 2- identificar as soluções específicas e particulares para o problema básico e retificá-la como um mecanismo. 3- Factory Method. 4- Define a forma de organização dos objetos e sua colaboração mutua 5- PROTOTYPE. 6- Oferece uma forma de percorrer este tipo de objeto agregado sem conhecer seus detalhes de implementação. 7- As afirmativas I, II, III e IV estão corretas. 8- Gabarito – Em uma janela pode-se adicionar objetos como barras de rolagem, caixas de texto, labels, etc. Pode-se criar uma classe JanelaDecorador que será estendida pelos decoradores que irão inserir propriedades na janela. Podendo incluir barra vertical, horizontal e para cada criar outra classe decorador, inserindo características novas. 9- Gabarito: O conceito OVERLOADING é a sobrecarga dos métodos: define vários métodos de mesmo nome com assinaturas diferentes. O conceito OVERRIDING altera o comportamento do método na subclasse, mantendo a mesma assinatura, com funcionalidade diferente. 10- Define-se um método abstrato, em uma classe abstrata. Cada classe que herda a classe abstrata implementa o método físico. Dependendo da classe instanciada é executado o método correspondente. Isto é polimorfismo.
64 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Padrões de Projeto de Software 1- Mediator: Define um objeto que encapsula a forma como um conjunto de objetos interage. Mediator promove o acoplamento fraco ao evitar que os objetos se refiram explicitamente uns aos outros, permitindo que você varie suas interações independentemente. (Gamma et al., 2000). Sobre este padrão de projetos podemos afirmar com certeza: ( ) Oferece uma forma de percorrer este tipo de objeto agregado sem conhecer seus detalhes de implementação. ( ) Considerando objetos que implementem arrays, pode ser visto como uma classe intermediária de comunicação e gerenciamento, evitando que os objetos se comuniquem de forma direta. ( ) tem uma grande facilidade de mudança de comportamento, pode-se alterar seu funcionamento sem que seja necessário nenhuma mudança nas demais classes envolvidas, desde que envolvam coleções e matrizes. ( ) É bastante utilizado em programação de sistemas para gerenciar a comunicação entre dois ou mais objetos. ( ) É bastante utilizado em programação de sistemas para gerenciar a comunicação entre dois ou mais objetos, mas não deve ser usado quando associado a percorrer arrays ou tabelas. 2- Um dos princípios do padrão de arquitetura MVC é a separação da lógica da apresentação do modelo. PORQUE É, muitas vezes, mais prático manter a visão e o controlador unificados, inclusive, por demandas da tecnologia. Analisando-se as afirmações acima, conclui-se que ... ( ( ( ( (
) as duas afirmações são verdadeiras, e a segunda justifica a primeira. ) as duas afirmações são verdadeiras, e a segunda não justifica a primeira. ) a primeira afirmação é verdadeira, e a segunda é falsa. ) a primeira afirmação é falsa, e a segunda é verdadeira. ) As duas afirmações são falsas.
3- Para fazer a modelagem de um padrão de projeto (design pattern) utilizando a UML é DESNECESSÁRIO. ( ) fazer a modelagem do mecanismo como uma colaboração, fornecendo seus aspectos estruturais, assim como os aspectos comportamentais. ( ) entender o padrão de projeto como uma colaboração representada com suas partes estruturais e comportamentais. ( ) identificar as soluções específicas e particulares para o problema básico e reificá-la como um mecanismo. ( ) identificar os elementos do padrão de projeto que devem ser vinculados aos elementos em um contexto específico e representá-los como parâmetros para colaboração. ( ) identificar as soluções comuns para o problema básico. 4- Conhecido como padrões da gangue dos quatro, por terem sido desenvolvidos por quatro autores, os Padrões GoF (Group of Four) estão divididos pelas seguintes famílias de padrões: Padrões de Criação ou de Construção, Padrões Estruturais e Padrões Comportamentais.
65 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Considerando os padrões de Criação ou de Construção, analise o modelo abaixo e em seguida marque a alternativa que define a representação.
( ( ( ( (
) PROTOTYPE. ) MEDIATOR. ) FACTORY METHOD. ) BUILDER. ) SINGLETON.
5- Dentre as alternativas abaixo identifique a que NÃO define uma situação em que deve ser utilizado o padrão Factory Method? ( ) Quando o algoritmo de criação de um objeto deve ser independente das suas partes constituintes e da maneira como ele é "montado". ( ) Quando se quer localizar num ponto único a conhecimento de qual subclasse está sendo usada. ( ) Quando uma classe quer que suas subclasses especifiquem os objetos criados. ( ) Quando classes delegam responsabilidade para uma entre várias subclasses de apoio. ( ) Quando uma classe (o criador) não pode antecipar a classe dos objetos que deve criar. 6- Decorator tem como principal objetivo a decoração de classes em tempo de execução, isto é, adicionar novos produtos e/ou novas responsabilidades à objetos dinamicamente sem alterar o código das classes existentes. Descreva um exemplo que represente esse padrão. Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________. 7- O que fazer para evitar o acoplamento alto e o reuso baixo entre dois ou mais elementos na hora de atribuir responsabilidades entre eles, segundo o princípio GRASP Indireção? Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________. 8- (FGV - 2009) Os padrões de projeto orientados a objeto podem ter finalidade de criação, estrutural ou comportamental. Os padrões de criação se preocupam com o processo de criação de objetos. Os padrões 66 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
estruturais lidam com a composição de classes ou de objetos. Os padrões comportamentais caracterizam as maneiras pelas quais classes ou objetos interagem e distribuem responsabilidades. Assinale a alternativa que apresenta apenas padrões de projeto comportamentais. ( ( ( ( (
) Mediator, Interpreter e Command. ) Proxy, Builder e Mediator. ) Prototype, Abstract Factory e Builder. ) Composite, Decorato e Proxy. ) Singleton, Composite e Interpreter.
9- Podemos afirmar que os Padrões de Criação da família GoF: ( ) Fornecem um guia de como instanciar objetos, que normalmente envolve decisões dinâmicas para escolher, por exemplo, qual classe instanciar ou a quais objetos delegar responsabilidade. ( ) Colocam em dúvida o tratamento dispensado aos usuários na fase de levantamento das necessidades. ( ) Definem caminhos comuns para a organização de diferentes tipos de objetos, facilitando sua integração e colaboração mútua. ( ) Subutilizam as rotinas de tratamento de erros, em virtude da depuração de código fonte na fase de levantamento das necessidades junto aos usuários. ( ) São projetados para organizar, gerenciar e combinar diferentes comportamentos. 10- (CESGRANRIO - 2008) Ao alterar o estado de uma classe, o desenvolvedor deseja que uma ou mais classes da interface gráfica sejam modificadas. Entretanto, o desenvolvedor não acha interessante criar um acoplamento forte entre essas classes. Qual padrão de projeto comportamental é mais adequado para resolver essa situação? ( ( ( ( (
) Composite. ) Abstract Factory. ) Adapter. ) Observer. ) Decorator.
67 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Gabarito 1- É bastante utilizado em programação de sistemas para gerenciar a comunicação entre dois ou mais objetos. 2- as duas afirmações são verdadeiras, e a segunda não justifica a primeira. 3- identificar as soluções específicas e particulares para o problema básico e retificá-la como um mecanismo. 4- PROTOTYPE. 5- Quando o algoritmo de criação de um objeto deve ser independente das suas partes constituintes e da maneira como ele é "montado". 6- Gabarito – Em uma janela pode-se adicionar objetos como barras de rolagem, caixas de texto, labels, etc. Pode-se criar uma classe JanelaDecorador que será estendida pelos decoradores que irão inserir propriedades na janela. Podendo incluir barra vertical, horizontal e para cada criar outra classe decorador, inserindo características novas. 7- Gabarito – Deve-se atribuir responsabilidade a um objeto intermediário para mediar entre diversos componentes ou serviços, de maneira que eles não fiquem diretamente acoplados. 8- Mediator, Interpreter e Command. 9- Fornecem um guia de como instanciar objetos, que normalmente envolve decisões dinâmicas para escolher, por exemplo, qual classe instanciar ou a quais objetos delegar responsabilidade. 10- Observer.
68 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Padrões de Projeto de Software 1- Memento:Captar e externalizar um estado interno de um objeto, de maneira que esse estado seja restaurado ao objeto em outro momento, sem violar seu encapsulamento (Gamma et al., 2000). Sobre este padrão de projetos podemos afirmar com certeza: ( ) Considerando objetos que implementam arrays, pode ser visto como uma classe intermediária de comunicação e gerenciamento, evitando que os objetos se comuniquem de forma direta. ( ) É bastante utilizado em programação de sistemas para gerenciar a comunicação entre dois ou mais objetos, mas não deve ser usado quando associado a percorrer arrays ou tabelas. ( ) É bastante utilizado em programação de sistemas para gerenciar a comunicação entre dois ou mais objetos. ( ) tem como objetivo criar um meio de armazenar informações sobre um objeto, permitindo acessar essas informações tanto para salvar o estado de um objeto específico, como para recuperar, sempre que for necessário. ( ) Oferece uma forma de percorrer este tipo de objeto agregado sem conhecer seus detalhes de implementação. 2- (CONSULPLAN 2012) O desenvolvimento de software é uma atividade que apresenta dificuldades, ligada ao entendimento do problema. Design Patterns surgiram na busca de soluções para as dificuldades, tornandose um mecanismo eficiente no compartilhamento de conhecimento entre o s desenvolvedores. Gamma propõe um modo de categorização dos DESIGN PATTERNS, definindo famílias de padrões relacionados, descritos a seguir. I. Abrange a configuração e inicialização de objetos e classes. II. Lida com as interfaces e a implementação das classes e dos objetos. III. Lida com as interações dinâmicas entre grupos de classes e objetos. Essas famílias são denominadas, respectivamente, ( ) Behavioral Patterns, Structural Patterns e Standard Patterns. ( ) Structural Patterns, Standard Patterns e Creational Patterns. ( ) Creational Patterns, Structural Patterns e Behavioral Patterns. ( ) Standard Patterns, Structural Patterns e Behavioral Patterns. ( ) Standard Patterns, Creational Patterns e Structural Patterns. 3- Segundo Metsker, 2004, o padrão de projeto ______________ tem como solução mover a lógica de construção de uma classe para um objeto externo, a fim de reduzir a complexidade da mesma e permitir a construção gradual de objeto salvo a partir dessa classe. Escolha uma das alternativas abaixo que preenche corretamente a lacuna apresentada na descrição acima. ( ( ( ( (
) BUILDER. ) FACTORY METHOD. ) FACADE. ) SINGLETON. ) MEDIATOR.
4- (CESGRANRIO 2009) Por motivo de segurança, deseja-se adicionar registro (log) das operações efetuadas no sistema de contabilidade de uma empresa. O arquiteto do sistema decide que deve existir somente uma instância de uma classe de registro (log) e que esta será o ponto de acesso global para os demais componentes do sistema. Que padrão de projeto pode ser utilizado nesse caso? ( ( ( ( (
) Bridge. ) Memento. ) Iterator. ) Singleton. ) Visitor. 69
Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
5- Podemos afirmar que os Padrões Estruturais da família GoF: ( ) Colocam em dúvida o tratamento dispensado aos usuários na fase de levantamento das necessidades. ( ) São projetados para organizar, gerenciar e combinar diferentes comportamentos. ( ) Definem caminhos comuns para a organização de diferentes tipos de objetos, facilitando sua integração e colaboração mútua. ( ) Fornecem um guia de como instanciar objetos, que normalmente envolve decisões dinâmicas para escolher, por exemplo, qual classe instanciar ou a quais objetos delegar responsabilidade. ( ) Aumentam a responsabilidade do programador em depurar o código e as rotinas necessárias à documentação dos processos. 6- considerando a classe de projetos GoF assinale a opção cujos padrões de projeto estão todos classificados como Estruturais: (
) singleton; bridge ; composite; decorator ; faça de ; flyweight;¿ Proxy.
(
) adapter ; bridge ; protype ¿ decorator ; faça de ; flyweight ; singleton.
(
) adapter ; bridge ; composite ; decorator ; faça de ; flyweight ; Proxy.
(
) singleton; bridge ; protype; decorator ; faça de ; flyweight ; Proxy.
(
) adapter ; bridge ; composite ; decorator ; faça de ; flyweight ; singleton.
7- O que fazer para evitar o acoplamento alto e o reuso baixo entre dois ou mais elementos na hora de atribuir responsabilidades entre eles, segundo o princípio GRASP Indireção? Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________. 8- (FGV 2009) Os padrões de projeto orientados a objeto podem ter finalidade de criação, estrutural ou comportamental. Os padrões de criação se preocupam com o processo de criação de objetos. Os padrões estruturais lidam com a composição de classes ou de objetos. Os padrões comportamentais caracterizam as maneiras pelas quais classes ou objetos interagem e distribuem responsabilidades. Assinale a alternativa que apresenta apenas padrões de projeto comportamentais. ( ( ( ( (
) Singleton, Composite e Interpreter. ) Prototype, Abstract Factory e Builder. ) Mediator, Interpreter e Command. ) Proxy, Builder e Mediator. ) Composite, Decorato e Proxy.
9- Considerando que o padrão tem o objetivo de garantir que existe apenas uma instancia de uma certa classe a qualquer instante e em qualquer ponto de um sistema. Indique o padrão mencionado e cite uma vantagem de sua utilização. Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________.
70 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
10- (COPEVEUFAL 2011) O diagrama de classes apresentado na figura não representa fielmente um buffer que passa por estados sucessivos de transformação. Em outras palavras, um buffer, que está inicialmente vazio, depois pode ficar parcialmente cheio e, possivelmente, pode ficar cheio.
( ( ( ( (
) State. ) Composite. ) Mediator. ) Dynamic behavior. ) Singleton.
71 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Gabarito 1- Tem como objetivo criar um meio de armazenar informações sobre um objeto, permitindo acessar essas informações tanto para salvar o estado de um objeto específico, como para recuperar, sempre que for necessário. 2- Creational Patterns, Structural Patterns e Behavioral Patterns. 3- BUILDER. 4- Singleton. 5- Definem caminhos comuns para a organização de diferentes tipos de objetos, facilitando sua integração e colaboração mútua. 6- adapter ; bridge ; composite ; decorator ; faça de ; flyweight ; Proxy 7- Gabarito – Deve-se atribuir responsabilidade a um objeto intermediário para mediar entre diversos componentes ou serviços, de maneira que eles não fiquem diretamente acoplados. 8- Mediator, Interpreter e Command. 9- Gabarito – padrão singleton uma vantagem apontada é o desempenho de uma aplicação. 10- State.
72 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Padrões de Projeto de Software 1- O uso de classes "statics" garante que somente uma instãncia estará em memória e que a destruição pelo "garbage collection" será mais rápida do que o uso do padrão singleton. Por que então devemos usar o padrão singleton? Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________. 2- Ter uma baixa coesão nos objetos do sistema pode gerar difícil compreensão e reutilização, além de afetar a manutenibilidade. O que é ter baixa coesão? Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________. 3- Command : Encapsula uma solicitação como um objeto, permitindo a parametrização de clientes com diferentes solicitações, o enfileiramento e o registro de solicitações e o suporte a operações que possam ser desfeitas. (Gamma et al., 2000). Sobre ele podemos afirmar com toda a certeza: ( ) esta abordagem é que o objeto que está realizando a chamada do método precisa conhecer com detalhes sobre seu funcionamento. ( ) Este padrão de projeto oferece pouca flexibilidade na arquitetura do sistema, uma vez que não permite adição de novas funcionalidades. (
) O objetivo do padrão de projeto Command é encapsular chamadas de métodos.
( ) Nesta abordagem o objeto que está realizando a chamada do método precisa conhecer com detalhes a implementação em relação aparente ao local, tempo e ao objeto que vai realizar uma determinada tarefa. ( ) Os métodos, nesta abordagem devem ser padronizados e hierarquizados de forma que a implementação trabalhe novos objetos. 4- considere as classes e métodos abaixo: E escolha a opção correta sobre a gravura: E escolha a opção correta sobre a gravura:
sobre o acoplamento e coesão: 73 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
( ) O método void imp_NF (cod) poderia ser implementado na classe NF sem envolver mais nenhuma classe. Não tendo outros médotos o acoplamento não existiria o que é o desejável. ( ) Existem acoplamentos das classes que foram gerados de forma desnecessária pois poderiam ser incorporados em um único método e isto iria facilitar a manutenção e o entendimento. ( ) método void imp_NF (cod) não deve ser implementado na classe NF. Obteria-se um projeto melhor se NF fosse acoplada a classe Cliente seus métodos incorporados na classe cliente. Pode-se garantir um melhor acoplamento ( ) Existem acoplamentos que poderiam ser evitados, considerando apenas o diagrama, assim o método de imprimir nota fiscal, dando-se o código de cliente, pode ser mapeado de forma diferente melhorando-se o acoplamento. ( ) Existem acoplamentos das classes cliente e Nota fiscal. E Nota fiscal e Item de Nota fiscal. Esta forma de acoplamento é caracterizada por chamada de métodos. 5- Assinale a afirmativa correta sobre o padrão Builder: ( ) A legibilidade da solução final, ou seja, para entender como um objeto é criado e sob quais condições, fica comprometida. ( ) Deve-se é separar no construtor da própria classe a lógica para criação de um objeto e concentrar a lógica de criação em uma hierarquia de herança. ( ) Deve-se é embutir no construtor da própria classe a lógica para criação de um objeto ou ainda distribuir a lógica de criação em vários métodos adicionais. ( ) É uma abordagem que não facilita a criação de objetos com diferentes configurações e representações, tornando o código dependente a complexidade das classes relacionadas. ( ) Um dos principais objetivos do padrão Builder é separar o algoritmo de criação de um objeto complexo tanto da especificação, quanto das partes que o compõem. 6- Uma das categorias que tradicionalmente se classificam os padrões de projeto :Padrões Estruturais cujo objetivo é: ( ( ( ( (
) Define a forma de organização dos objetos e sua colaboração mutua. ) Define formas de gerencia e combinar diferentes comportamentos. ) Defende formas de instanciar objetos delegando responsabilidades. ) Define como implantar um novo método em uma classe. ) Define como implantar o mecanismo de herança em um grupo de objetos.
7- O padrão de projeto Singleton é um dos padrões mais conhecidos e extensivamente utilizados em programação orientada a objetos. Sobre ele podemos afirmar I - Está direcionado para as situações onde precisamos manter uma única instancia de uma classe durante toda a execução da aplicação. II - A sua estrutura é bastante simples, existe apenas uma classe chamada S ingleton, que define um método chamado Instance, responsável poder retornar aos clientes à única instancia da classe. III ¿ Na linguagem Java os modificadores states e private devem garantir uma mesma instância para todos os objetos criados e evitar acesso público; ( ( ( ( (
) As afirmativas I, II, III estão incorretas. ) As afirmativas II, III estão corretas e a afirmativa I está errada. ) As afirmativas estão todas corretas. ) As afirmativas I, III, estão corretas e II errada. ) As afirmativas I, II, estão corretas e a afirmativa III está errada.
8- Em padrão de projeto existe uma situação onde uma classe chama um método abstrato especificado em alguma classe abstrata (ou interface) e a subclasse concreta vai decidir que tipo exato de objeto criar e retornar. Baseado nessa descrição marque a alternativa que aponta o padrão relacionado. 74 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
( ( ( ( (
) Mediator ) Builder. ) Facade. ) Singleton. ) Factory Method.
9- O padrão de projeto Intepreter descreve como projetar um conjunto de classes para representar e interpretar uma gramática para linguagens simples.: I - Sua aplicação é recomenda naquelas situações em que há necessidade de interpretar uma linguagem qualquer e, ao mesmo tempo, quando se quer representar sentenças da linguagem, como árvores abstratas sintáticas. Ii - É importante destacar que o termo ¿linguagem¿, na definição desse padrão, é bastante ampla, não estando restrita apenas a linguagens de programação Iii - . A estrutura do padrão Interpreter sugere uma modelagem realizada através de uma gramática mapeada em uma arvore hierárquica em que cada cada regra gramatical é um nível na arvore, e pode ser usada para interpretar as sentenças varrendo toda a árvore e finalização do problema. ( ( ( ( (
) As afirmativas I, II, estão corretas e a afirmativa III está errada. ) As afirmativas II, III estão corretas e a afirmativa I está errada. ) As afirmativas I, III, estão corretas e II errada. ) As afirmativas estão todas corretas. ) As afirmativas I, II, III estão incorretas.
10- (CESGRANRIO - 2008) Ao alterar o estado de uma classe, o desenvolvedor deseja que uma ou mais classes da interface gráfica sejam modificadas. Entretanto, o desenvolvedor não acha interessante criar um acoplamento forte entre essas classes. Qual padrão de projeto comportamental é mais adequado para resolver essa situação? ( ( ( ( (
) Decorator. ) Abstract Factory. ) Adapter. ) Observer. ) Composite.
75 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Gabarito 1- Gabarito: Porque uma classe ¿static¿ SEMPRE é carregada na memória quando a aplicação é executada e a classe singleton não, sendo carregada na memória quando solicitada a primeira instância. 2- Gabarito: É quando se tem uma mesma classe executando muitos trabalhos, realizando muitas coisas não relacionadas. 3- O objetivo do padrão de projeto Command é encapsular chamadas de métodos. 4- Existem acoplamentos das classes cliente e Nota fiscal. E Nota fiscal e Item de Nota fiscal. Esta forma de acoplamento é caracterizada por chamada de métodos. 5- Um dos principais objetivos do padrão Builder é separar o algoritmo de criação de um objeto complexo tanto da especificação, quanto das partes que o compõem. 6- Define a forma de organização dos objetos e sua colaboração mutua. 7- As afirmativas estão todas corretas. 8- Factory Method. 9- As afirmativas I, II, estão corretas e a afirmativa III está errada. 10- Observer.
76 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
Padrões de Projeto de Software 1- Marque a alternativa que apresenta apenas padrões GRASP? ( ( ( ( (
) Observer, visitor, strategy. ) Controlador, polimorfismo e Memento. ) Coesão alta, polimorfismo, visitor. ) Coesão alta, controlador, strategy. ) Coesão alta, controlador e polimorfismo.
2- (FCC 2011) Os design patterns ( ) são de uso exclusivo em processos de desenvolvimento de soluções orientado a objetos, já que os objetos são a mais adequada abstração para o reuso. ( ) podem ser modelados utilizando se a linguagem UML que fornece um meio eficiente de modelar padrões de projeto representando os como colaborações. ( ) são projetos de arquitetura para um domínio específico de aplicação e sempre trazem componentes predefinidos que envolvem código de programação. ( ) consistem em conjuntos de classes que um usuário instancia para utilizar seus métodos. Após a chamada ao método, o controle do fluxo da aplicação retorna para o usuário. ( ) são aplicações propriamente ditas, normalmente construídas pela integração de diversos frameworks. 3- Um dos princípios do padrão de arquitetura MVC é a separação da lógica da apresentação do modelo. PORQUE É, muitas vezes, mais prático manter a visão e o controlador unificados, inclusive, por demandas da tecnologia. Analisando se as afirmações acima, conclui se que ... ( ( ( ( (
) as duas afirmações são verdadeiras, e a segunda não justifica a primeira. ) a primeira afirmação é falsa, e a segunda é verdadeira. ) As duas afirmações são falsas. ) a primeira afirmação é verdadeira, e a segunda é falsa. ) as duas afirmações são verdadeiras, e a segunda justifica a primeira.
4- Para fazer a modelagem de um padrão de projeto (design pattern) utilizando a UML é DESNECESSÁRIO. ( ) identificar as soluções comuns para o problema básico. ( ) fazer a modelagem do mecanismo como uma colaboração, fornecendo seus aspectos estruturais, assim como os aspectos comportamentais. ( ) identificar os elementos do padrão de projeto que devem ser vinculados aos elementos em um contexto específico e representa-los como parâmetros para colaboração. ( ) entender o padrão de projeto como uma colaboração representada com suas partes estruturais e comportamentais. ( ) identificar as soluções específicas e particulares para o problema básico e reifica-la como um mecanismo. 5- Conhecido como padrões da gangue dos quatro, por terem sido desenvolvidos por quatro autores, os Padrões GoF (Group of Four) estão divididos pelos seguintes famílias de padrões: Padrões de Criação ou de Construção, Padrões Estruturais e Padrões Comportamentais. Considerando os padrões de Criação ou de Construção, analise o modelo abaixo e em seguida marque a alternativa que define a representação.
77 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
( ( ( ( (
) Builder. ) Facade. ) Singleton. ) Mediator. ) Factory Method.
6- Segundo Metsker, o padrão de projeto GoF _________________ é aplicado para substituir a geração de instâncias não inicializadas de uma classe, fornecendo novos objetos a partir de uma classe exemplo. ( ( ( ( (
) PROTOTYPE. ) SINGLETON. ) BUILDER. ) FACTORY METHOD. ) MEDIATOR.
7- Iterator :Fornecer uma maneira de acessar sequencialmente os elementos de um objeto agregado sem expor sua implementação. (Gamma et al., 2000). Sobre este padrão de projetos podemos afirma com certeza: ( ) É bastante utilizado em programação de sistemas para gerenciar a comunicação entre dois ou mais objetos, mas não deve ser usado quando associado a percorrer arrays ou tabelas. ( ) tem uma grande facilidade de mudança de comportamento, pode se alterar seu funcionamento sem que seja necessário nenhuma mudança nas demais classes envolvidas, desde que envolvam coleções e matrizes. ( ) Oferece uma forma de percorrer este tipo de objeto agregado sem conhecer seus detalhes de implementação. ( ) Considerando objetos que implementam arrays, pode ser visto como uma classe intermediária de comunicação e gerenciamento, evitando que os objetos se comuniquem de forma direta. ( ) É bastante utilizado em programação de sistemas para gerenciar a comunicação entre dois ou mais objetos. 8- Decorator tem como principal objetivo a decoração de classes em tempo de execução, isto é, adicionar novos produtos e/ou novas responsabilidades à objetos dinamicamente sem alterar o código das classes existentes. Descreva um exemplo que represente esse padrão. Resposta: _________________________________________________________
_______________________________________________________________ _______________________________________________________________ ______________________________________________________________.
78 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito
9- Utilizar o princípio CRIADOR significa suportar baixo acoplamento, maior clareza, encapsulamento e reusabilidade. Em que consiste o princípio CRIADOR? Resposta: _________________________________________________________
_________________________________________________________________ _________________________________________________________________ __________________________________________________________. 10- Os padrões de projetos, quando aplicados ao desenvolvimento de aplicações, fornecem meios de descrever soluções comuns para problemas comuns, resultando em redução de tempo gasto com o desenvolvimento e melhoria da qualidade da aplicação. (FCC 2009) Analise: I. É o responsável pela especificação dos tipos de objetos a serem criados usando uma "instância" prototípica e pela criação de novos objetos copiando este protótipo. II. Define uma interface de nível mais alto que torna o subsistema mais fácil de usar e fornece uma interface única para um subsistema com diversas interfaces; compõe o grupo de padrões estruturais. III. Integrante do grupo de padrões comportamentais, ele provê uma forma de acessar sequencialmente os elementos de um agregado de objetos, sem expor a representação interna desse agregado. IV. As consequências do uso deste padrão é que o encapsulamento é mantido, já que objetos usam sua própria informação para cumprir responsabilidades; leva ao fraco acoplamento entre objetos e à alta coesão, uma vez que objetos fazem tudo que é relacionado à sua própria informação. As afirmações correspondem, respectivamente, aos padrões: ( ( ( ( (
) Adapter, Façade, Command e Iterator. ) Command, Iterator, Singleton e Expert. ) Controller, Expert, Singleton e Prototype. ) Command, Singleton, Controller e Façade. ) Prototype, Façade, Iterator e Expert.
79 Exercícios – Padrões de Projeto de Software – Lincoln Kazuhiro Ito