Baixe o app para aproveitar ainda mais
Prévia do material em texto
Questões Aula 1 1 - Os padrões de projeto de software contribuem para a melhoria da qualidade do software porque: a) Apresentam um modelo genérico de como resolver problemas de modelagem do software, aumentando a qualidade dos documentos de software produzidos. b) Fornecem exemplos de códigos de programação que podem ser reutilizados. c) Fornecem padrões para relacionamento entre os atributos do sistema. d) Servem como modelo para testar os softwares desenvolvidos. e) Apresentam as boas práticas de programação estruturada que podem ser reutilizadas na programação orientada a objetos. Gabarito: Padrões são as melhores práticas formalizadas utilizadas para resolver problemas comuns baseados na reutilização de ideias (não de código). Eles aumentam a qualidade dos documentos produzidos, facilitam a manutenção e a reutilização dos programas e tornam mais fácil entender os produtos de software que o projeto estiver produzindo. 2 - São características de padrões de projetos de software todas as sentenças a seguir, exceto: a) Nome do padrão b) Autor do padrão c) Problema a ser resolvido d) Solução dada pelo padrão e) Consequências Gabarito: O autor do padrão não é uma característica de padrões de projeto. As informações sobre o nome do padrão, o problema que ele deve resolver, a solução dada por ele para esse problema e as consequências de sua aplicação fazem parte das características de padrões de projetos de software. 3 - São vantagens da utilização de padrões de projetos de software as afirmativas a seguir, exceto: a) Os padrões já foram testados e trazem a experiência e o conhecimento de desenvolvedores experientes. b) Os padrões podem ser adaptados para diferentes problemas. c) Usar padrões pode aumentar o tempo de aprendizado das classes do sistema pelos desenvolvedores novatos. d) Padrões podem diminuir o retrabalho durante as etapas do projeto de desenvolvimento de software. e) Padrões contêm um conjunto de expressões padronizadas para expressar soluções complexas de forma resumida. Gabarito: Não há aumento de tempo quando padrões de projetos forem utilizados. O efeito pretendido é exatamente o oposto: o uso deles pode diminuir o tempo de aprendizado das classes do sistema pelos desenvolvedores novatos. 4 - Quando surgiram as primeiras ideias sobre o uso de padrões de projeto? a) Em 1977, com a publicação do livro A pattern language, por Christopher Alexander. b) Em 1987, com o primeiro artigo sobre padrões para projeto de interfaces de software. c) Em 1994, com a publicação do Livro Design patterns pela gangue dos quatro. d) Em 2005, com a publicação do livro Applying UML and patterns: an introduction to object- oriented analysis and design and iterative development, que contém o padrão GRASP. e) Em 1947, com a publicação do livro Design patterns, por Craig Larman. Gabarito: Publicada em 1977, a obra de Alexander proporcionou as primeiras ideias sobre os benefícios do uso de padrões de projeto. Inicialmente, elas foram apresentadas para uso em projetos de arquitetura, mas posteriormente foram expandidas para os projetos de desenvolvimento de software. 5 - Identifique qual opção apresenta problemas que podem ser tratados pelos padrões de projeto de software. a) Problema de comunicação entre as classes e os objetos do sistema. b) Problema de criação de objetos e classes dinamicamente em tempo de execução do programa. c) Problema de independência do sistema para criar e representar classes e objetos. d) Problema de velocidade de execução do sistema. e) Problema de definição de tipos de dados (atributos) a serem utilizados no sistema. Gabarito: Os problemas tratados por padrões de projeto de software referem-se a papéis, colaboração e distribuição de classes e objetos. Eles não se referem aos atributos do sistema. Questões Teste de Conhecimento 1 1. Por que usar Padrões de Projeto? Os padrões de projeto servem para alcançar objetivos na engenharia de software usando implementações ou códigos fontes feitos em linguagens orientadas a objeto. Os padrões de projeto não nos servem para alcançar objetivos na engenharia de software usando classes e métodos em linguagens orientadas a objeto. Os padrões de projeto não servem para alcançar objetivos diversos na engenharia e se utilização de linguagens orientadas a objeto. Os padrões de projeto servem para alcançar objetivos na engenharia de software usando classes e métodos em linguagens orientadas a objeto. Os padrões de projeto servem para alcançar objetivos na engenharia de software usando procedures e funções em linguagens de programação. Explicação: Padrões de projeto são voltados para problemas recorrentes que ocorrem no nosso dia-a-dia. 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. 2. O modelo GoF (Gang of Four) são padrões de projeto de software com 23 modelos (ou soluções) de soluções para o desenvolvimento de algoritmos baseados no paradigma orientado a objetos. Esses modelos são classificados em subcategorias com propósitos comuns. Sabendo disso, assinale apenas uma das opções abaixo que é uma afirmativa verdadeira sobre os padrões GoF: Os modelos dos padrões GoF são agrupados em três categorias, sendo-as: Padrões de Criação, Padrões Estruturais e Padrões Comportamentais. Os modelos dos padrões GoF são agrupados em duas categorias, sendo-as: Padrões Estruturais e Padrões Comportamentais. Os modelos dos padrões GoF são agrupados em quatros categorias, sendo-as: Padrões de Criação, Padrões Estruturais, Padrões Organizacionais e Padrões Comportamentais. Os modelos dos padrões GoF são agrupados em duas categorias, sendo-as: Padrões de Criação e Padrões Comportamentais. Os modelos dos padrões GoF são agrupados em três categorias, sendo-as: Padrões de Criação, Padrões Estruturais e Padrões Organizacionais. 3. (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. ( ) Composite. ( ) Visitor. A alternativa que contém a sequência correta, de cima para baixo, é a V F F V F V V F F V F V V V F V V V V V F F V V V 4. Considere a afirmativa de Gamma e Al. citada abaixo e escolha a opção correta: ¿ Em geral, todas as arquiteturas orientadas a objeto bem-estruturadas estão cheias de padrões. Uma das maneiras de medir a qualidade de um sistema orientado a objetos é avaliar se os colaboradores tomaram bastante cuidado com as colaborações comuns entre seus objetos. Focalizar em tais mecanismos durante o desenvolvimento de um sistema pode levar a uma arquitetura menor, mais simples, muito mais compreensível do que aquelas produzidas quanto padrões são ignorados.¿ Padrões são boas práticas e proporcionam garantia de qualidade na elaboração do código. Padrões são de uso obrigatório e eliminam os erros cometidos na fase programação. Padrões sempre levam a uma arquitetura menor principalmente quando se usa tecnologia de objetos Padrões causam falta de criatividade nos desenvolvedores e esta perda compromete a qualidade. Padrões é uma forma obrigatória de programar com objetos Explicação: Existem algumas definições de vários autores. Sobre padrões de software, a definição de Gamma contempla: "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",e os classifica por propósito e por escopo. 5. Qual o objetivo dos Padrões Comportamentais? Assinale a opção CORRETA. Fornecem um guia de como instanciar objetos. Mostram como estruturar e encapsular essas decisões. O objetivo dos Padrões Comportamentais têm a ver com a maneira pela qual responsabilidades são distribuídas a classes e objetos durante a realização de uma tarefa. Definem a quais objetos delegar responsabilidade. Envolve decisões dinâmicas para escolher qual classe instanciar. Explicação: Essa afirmativa está CORRETA porque as outras se referem a Padrões de Criação. 6. (Casa da Moeda - CESGRANRIO 2009) Em determinado sistema de análise estatística, é necessário definir uma dependência ¿um para muitos¿ entre objetos, de forma que quando um objeto mudar de estado, todos os seus dependentes sejam notificados e atualizados. Que padrão de projeto pode ser utilizado nessa situação? Observer Singleton JSON Memento AJAX 7. 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. 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. 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. Explicação: Há três grupos de padrões GoF: Padrões de Criação, Padrões Estruturais e Padrões Comportamentais. Os padrões de estruturais GoF contemplam 7 (sete) tipos de padrões: Adapter, Bridge, Composite, Decorator, Façade, Flyweight e Proxy. O objetivo dos Padrões Estruturais é definir caminhos comuns para a organização de diferentes tipos de objetos, facilitando sua integração e colaboração mutua. Tratam da composição de classes e objetos para formar estruturas complexas. São associados à maneira como classes e objetos são organizados estruturalmente. E oferecem formas efetivas para usar conceitos OO como herança e composição. 8. Uma das categoria que tradicionalmente se classificam os padrões de projeto :Padrões Estruturais cujo objetivo é: Define como implantar o mecanismo de herança em um grupo de objetos Define a forma de organização dos objetos e sua colaboração mutua Define como implantar um novo método em uma classe. Define formas de gerencia e combinar diferentes comportamentos. Defende formas de instanciar objetos delegando responsabilidades Explicação: A família de padrões GoF, está divida em três grupos principais de padrões: Padrões de Criação, Padrões Estruturais e Padrões Comportamentais. O objetivo dos Padrões Estruturais é definir caminhos comuns para a organização de diferentes tipos de objetos, facilitando sua integração e colaboração mutua. Questões Aula 2 1 - No padrão Builder, existe uma interface comum para todos os objetos que constroem outros objetos. Qual é o nome desta interface? a) Builder b) Director c) Concrete Builder d) Product e) Abstract Builder Gabarito: A classe Builder especifica uma interface para um construtor de partes do objeto- produto. 2 - Uma equipe de projeto está desenvolvendo um aplicativo para smartfone com um amplo conjunto de funções que deve funcionar nas plataformas IOS e Android. Qual o padrão de projeto mais adequado para ser utilizado? a) O padrão Builder, porque ele facilita a construção de sistemas complexos. b) O padrão Abstract Factory, porque ele produz uma hierarquia de classes que encapsula muitas plataformas. c) O padrão Factory Method, porque ele padroniza o modelo de arquitetura para um conjunto de aplicativos diferentes. d) O padrão Abstract Factory, porque ele utiliza muitas instruções #ifdef para várias plataformas de hardware e software. e) O padrão Factory Method, porque ele permite que aplicativos individuais definam os próprios objetos de domínio e forneçam sua instanciação. Gabarito: O padrão Abstract Factory é o mais indicado quando houver a necessidade de garantir alta portabilidade do sistema entre diversas plataformas. 3 - Qual é o relacionamento entre os padrões Abstract Factory e Factory Method? a) O padrão Abstract Factory é mais simples que o Factory Method. b) A desvantagem do Factory Method em relação ao Abstract Factory é que ele pode retornar a mesma instância várias vezes. c) Factory Method atua sobre o escopo de classes, enquanto Abstract Factory o faz sobre o de classes. d) As classes Abstract Factory podem ser implementadas com Factory Methods. e) As classes Factory Methods podem ser implementadas com Abstract Factory. Gabarito: As classes Abstract Factory são frequentemente implementadas com Factory Methods, mas podem ser implementadas usando Prototype. Questões Teste de Conhecimento 2 1. O padrão Singleton é um Padrão de Criação GoF. Com relação aos seus objetivos podemos afirmar que: I- O padrão de projeto Singleton declara um método chamado clone na superclasse abstrata do modelo. II- O padrão Singleton está direcionado para as situações onde precisamos manter uma única instancia de uma classe durante toda a execução da aplicação. III- O padrão Singleton é bastante útil para guardar o estado de um objeto em determinados momentos. Est(á)ão correta(s) a(s) afirmativa(s): Somente o item I; Somente os itens I e III; Somente os itens II e III; Somente os itens I e II; Somente o item II; Explicação: Os itens I e III estão errados porque eles se referem ao padrão Prototype. 2. (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? Singleton. Bridge. Iterator. Memento. Visitor. 3. i) Decorator permite anexar responsabilidades adicionais a um objeto dinamicamente. ii) Builder desacopla uma abstração de sua implementação para que os dois possam variar independentemente. iii) Mediator fornece um substituto ou ponto através do qual um objeto possa controlar o acesso a outro. Em relação aos itens acima está correto: somente a ii e iii somente a i somente a ii somente a iii somente a i e ii Explicação: O item II está errado porque o padrão BUILDER é um Padrão de Criação. É um padrão cuja responsabilidade é a CONSTRUÇÃO Tentam minimizar a carga que os desenvolvedores têm ao ato de criar objetos dentro de um construtor. Isso é comum em desenvolvedores iniciantes. O item III está errado porque o padrão Mediator é um padrão define um objeto que encapsula a forma como um conjunto de objetos interage, promovendo o acoplamento fraco ao evitar que os objetos se refiram uns aos outros explicitamente, permitindo variar suas interações independentemente. 4. O padrão Singleton é um Padrão de Criação GoF. A estrutura desse padrão utiliza alguns recursos. Assinale o único recurso que NÃO pertence a esse padrão. Modificar static para implementaro método getInstance e, assim, retornar a instancia apropriada ou criá-la, caso seja a primeira vez; Modificadores static e private para garantir uma mesma instância para todos os objetos criados e evitar acesso público; Modificando as aplicações para este padrão de projeto para que a facilidade de instanciar classes em tempo de execução possa acontecer; Construtor da classe privado, para não permitir a instância de novos objetos da classe; Declarar o método getInstance como synchronized para que o método seja executado por uma thread por vez, quando utilizado em programas multi-thread; Explicação: Esta afirmativa NÃO pertence ao padrão Singleton, porque está relacionada ao padrão Prototype. 5. 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, 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 As afirmativas I, II, III estão incorretas As afirmativas II, III estão corretas e a afirmativa I está errada. Explicação: Há cinco padrões de criação GoF: Abstract Factory, Builder, Factory Method, Prototype e Singleton. O PROTOTYPE é um Padrão de Criação. É um padrão cuja responsabilidade é a CONSTRUÇÃO Ele especifica os tipos de objetos a serem criados usando uma instância como protótipo e criar novos objetos ao copiar este protótipo. A estrutura do Prototype cria um objeto novo, mas aproveitar o estado previamente existente em outro objeto. Conforme Gamma et al, 2000, Prototyoe especifica os tipos de objetos a serem criados usando uma instância-protótipo e cria novos objetos pela cópia desse protótipo. 6. Qual dos padrões GOF abaixo é mais indicado quando necessitamos criar objetos de uma determinada classe, os quais só têm alguns poucos estados possíveis e é melhor copiá-los e aproveitar o seu estado atual do que criar um novo objeto no estado inicial. Singleton Builder Decorator Abstract Factory Prototype 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 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. FACTORY METHOD. MEDIATOR. SINGLETON. FACADE. BUILDER. Explicação: Há cinco padrões de criação GoF: Abstract Factory, Builder, Factory Method, Prototype e Singleton. O BUILDER é um Padrão de Criação. É um padrão cuja responsabilidade é a CONSTRUÇÃO Tentam minimizar a carga que os desenvolvedores têm ao ato de criar objetos dentro de um construtor. Isso é comum em desenvolvedores iniciantes. 8. 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. SINGLETON. PROTOTYPE. FACTORY METHOD. MEDIATOR. Explicação: Há três grupos de padrões GoF: Padrões de Criação, Padrões Estruturais e Padrões Comportamentais: Os padrões de criação GoF contemplam 5 (cinco) tipos de padrões: Abstract Factory, Builder, Factory Method, Prototype e Singleton. Os Padrões de Criação fornecem um guia de como instanciar objetos. Esta ação normalmente envolve decisões dinâmicas para escolher, por exemplo, qual classe instanciar ou a quais objetos delegar responsabilidade. Esse padrão nos mostra como estruturar e encapsular essas decisões O padrão Prototype por definição ¿Especifica os tipos de objetos a serem criados usando uma instância como protótipo e criar novos objetos ao copiar este protótipo¿. Declara um método chamado clone na superclasse abstrata do modelo (Prototype). Questões Aula 3 1 - Qual padrão de projeto não é adequado para uso quando o processo de criação de objetos for muito trabalhoso, havendo a necessidade da criação de várias instâncias de objetos complexos? Além disso, o projetista desse sistema deseja a diminuição do retrabalho na criação de novos objetos, querendo utilizar um padrão semelhante ao Prototype. a) O padrão Builder. b) O padrão Singleton. c) O padrão Factory Method. d) T?odas os padrões são inadequados. e) Todas os padrões são adequados. Gabarito: O padrão Singleton não é indicado quando houver a necessidade de trabalhar com múltiplas instâncias de um objeto. 2 - Com o padrão Singleton, resolvemos qual problema de projeto? a) Garantia de que um objeto Singleton poderá possuir diversas instâncias no sistema. b) Garantia de flexibilidade nos relacionamentos entre as classes do sistema. c) Garantia de separação entre as classes de abstração e implementação. d) Garantia de que existe apenas uma instância do objeto Singleton no sistema inteiro. e) Garantia de facilidade na criação de objetos complexos. Gabarito: Singleton garante que exista apenas um objeto no sistema, independentemente de quantas requisições a classe receber para criá-lo. 3 - Qual das opções seguintes é um ponto positivo do padrão Bridge? a) A separação entre a abstração e a implementação de uma classe. b) O controle da criação de instâncias de um objeto. c) A possibilidade de trabalhar apenas com uma única hierarquia de classes. d) A facilitação de criação de instâncias-protótipos de uma classe. e) A garantia de que apenas um determinado objeto vai existir durante a execução do sistema. Gabarito: O padrão Bridge é utilizado quando quisermos separar uma abstração de sua implementação para que as duas possam variar de forma independente. Questões Teste de Conhecimento 3 1. Qual o nome do padrão de projeto que pode ser utilizado para permitir que uma hierarquia de abstrações e suas diferentes implementações possam variar independentemente? Proxy Façade Flyweight Adapter Bridge 2. 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 diferentescategorias de objetos sem relação de herança. As afirmativas I, II, estão corretas e a afirmativa III está errada. 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 estão todas corretas Explicação: O conceito do Adapter é converter a interface de uma classe em outra interface esperada pelos clientes. Adapter permite a comunicação entre classes que não poderiam trabalhar juntas devido à incompatibilidade de suas interfaces. A ideia é fazer adaptação entre dois recursos. Devemos usar sempre que for necessário adaptar uma interface para um cliente Vejamos o exemplo da tomada. O plug é três pinos, e a tomada é de dois pinos, então eu tenho que ter uma classe adaptadora. 3. Dentre as opções apresentadas assinale qual o padrão é 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. Padrão Adapter Padrão Composite Padrão Decorator Padrão Decorator Padrão Flyweight 4. Os padrões estruturais correspondem a: Abstract Factory, Builde, Factory Method, Prototype e Singleton. Chain of Responsability, command, Interpreter, Decorator, Façade, flyweight Chain of Responsability, command, Interpreter, Iterador, Mediator, Memento, Observer, State, Strategy, Template Method e Visitor. Adapter, Bridge, Composite, Decorator, Façade, Flyweight e Proxy. Todas as alternativas estão erradas Explicação: Os Padrões Estruturais GoF contemplam 7 (sete) tipos de padrões: Adapter, Bridge, Composite, Decorator, Façade, Flyweight e Proxy. Definem caminhos comuns para a organização de diferentes tipos de objetos, facilitando sua integração e colaboração mutua. Os Padrões Estruturais tratam da composição de classes e objetos para formar estruturas complexas; associados à maneira como classes e objetos são organizados estruturalmente; oferecem formas efetivas para usar conceitos OO como herança e composição, e são abstrações de aspectos estruturais. O objetivo dos Padrões Estruturais é definir caminhos comuns para a organização de diferentes tipos de objetos, facilitando sua integração e colaboração mutua. 5. O padrão Composite é um Padrão Estrutural GoF. Com relação aos seus objetivos podemos afirmar que: I- O padrão de projeto Composite permite anexar responsabilidades adicionais a um objeto (em caráter dinâmico) dinamicamente. II- O padrão Composite permite que seja encapsulado os detalhes (como se eu falasse com um aluno ou com vários alunos da mesma forma), o que permite uma programação muito mais leve. III- O padrão Composite permite que clientes tratem objetos individuais e composições de objetos de maneira uniforme. Est(á)ão correta(s) a(s) afirmativa(s): Somente os itens II e III; Somente o item II; Somente os itens I e III; Somente o item I; Somente os itens I e II; Explicação: O item I está errado porque ela se refere ao padrão Decorator. 6. Imagine que você está desenvolvendo um sistema para um bar especializado em coquetéis, onde existem vários tipos de coquetéis que devem ser cadastrados para controlar a venda. Os coquetéis são feitos da combinação de uma bebida base e vários outros adicionais que compõe a bebida. Por exemplo: Conjunto de bebidas: • Cachaça • Rum • Vodka • Tequila Conjunto de adicionais: • Limão • Refrigerante • Suco • Leite condensado • Gelo • Açúcar Então, como possíveis coquetéis temos: • Vodka + Suco + Gelo + Açúcar • Tequila + Limão + Sal • Cachaça + Leite Condensado + Açúcar + Gelo Qual padrão você usaria para representar a estrutura acima? Façade State Decorator Strategy Observer Explicação: O padrão Decorator é um padrão de cuja intenção são as Extenções. O padrão Decorator anexa responsabilidades adicionais a dinamicamente. Decorators oferecem uma alternativa flexível ao uso de herança para estender uma funcionalidade (para a extensão de funcionalidade). 7. Qual padrão estrutural permite que um objeto utilize serviços de outros objetos com interfaces diferentes por meio de uma interface única: Bridge Facade Composite Flyweight Adapter 8. Observe a figura abaixo e escolha dentre as opções o padrão GOF para resolver o problema com a estrutura apresentada. Chain of Responsability Observer GRASP é um padrão de cuja intenção são as Extenções. O padrão Decorator anexa responsabilidades adicionais a um objeto (em caráter dinâmico) dinamicamente. Decorators oferecem uma alternativa flexível ao uso de herança para estender uma funcionalidade (para a extensão de funcionalidade). Qual padrão estrutural permite que um objeto utilize serviços de outros objetos com interfaces diferentes por meio de uma interface única: ra abaixo e escolha dentre as opções o padrão GOF para resolver o problema com a estrutura apresentada. Chain of Responsability um objeto (em caráter dinâmico) dinamicamente. Decorators oferecem uma alternativa flexível ao uso de herança para Qual padrão estrutural permite que um objeto utilize serviços de outros objetos com interfaces ra abaixo e escolha dentre as opções o padrão GOF para resolver o problema Composite JEE Questões Aula 4 1. Qual objetivo do padrão Adapter? a) Permitir a composição de objetos em estruturas de árvore. b) Adicionar responsabilidades a um objeto dinamicamente. c) Viabilizar o reuso de aplicativos de prateleira. d) Criar objetos a partir da cópia do comportamento de um objeto protótipo. e) Garantir que apenas um objeto exista no sistema, independentemente de quantas requisições a classe receba para criá-lo. Gabarito: O Adapter trabalha para prover compatibilidade entre interfaces, possibilitando o reuso de componentes já desenvolvidos em projetos novos. 2. Qual o padrão mais adequado para uso quando é necessário manipular coleção hierárquica de objetos de forma uniforme? a) Singleton b) Adapter c) Bridge d) Composite e) Facade Gabarito: O padrão Composite permite a composição de objetos em estruturas de árvore para representar hierarquias parte-todo. Com o uso deste padrão, clientes podem tratar objetos individuais ou composições de objetos de maneira uniforme. 3. O padrão ______ adiciona responsabilidades ______ a objetos, fornecendo uma alternativa ao uso de _____ para estender funcionalidades. a) Decorator, dinâmicas, herança. b) Bridge, estáticas, polimorfismo. c) Adapter, dinâmicas, herança. d) Decorator, dinâmicas, interfaces. e) Composite, dinâmicas, classes abstratas. Gabarito: O Decorator tem a função de adicionar dinamicamente alterações no comportamento dos objetos. Para isso, ele utiliza composição em vez de herança. Questões Teste de Conhecimento 4 1. Uma empresa tem, dentre outros, um sistema de vendas e outro de controle de estoque. Supondo que o sistema de vendas necessita utilizar funcionalidades do sistema de controle de estoque, qual padrão deve ser utilizado para que estas funcionalidades sejam disponibilizadas? Decorator Observer Singleton Fachada Fábrica Abstrata Explicação: Os Padrões Estruturais GoF contemplam 7(sete) tipos de padrões: Adapter, Bridge, Composite, Decorator, Façade, Flyweight e Proxy. Definem caminhos comuns para a organização de diferentes tipos de objetos, facilitando sua integração e colaboração mutua. O padrão Façade (fachada) é um padrão Fachada, ou seja, faz uma fachada única para todas as fachadas, ou seja, Fornece uma interface unificada para um conjunto de objetos que constituem um subsistema.define uma interface a um nível mais elevado, para tornar um subsistema mais fácil de usar. Oferece uma interface única para um conjunto de interfaces de um subsistema. Façade define uma interface de nível mais elevado que torna o subsistema mais fácil de usar. 2. O Padrão Flyweight é um objeto compartilhado, que pode ser usado em vários contextos, simultaneamente, pois, tem capacidade de funcionar de forma independente em cada contexto. Seus métodos e implementações não podem, em momento algum, fazer _____________________________________________________________ hipóteses ou asserções sobre fora do contexto no qual o objeto opera. hipóteses ou exclusões sobre o contexto no qual o objeto opera. hipóteses ou asserções sobre o contexto no qual o objeto opera. comparações ou associações sobre o contexto no qual o objeto opera. Acoplamento fraco entre o subsistema e seus clientes. 3. A classe Façade, em qualquer contexto, tem como objetivo mais amplo buscar respostas para um problema de forma transparente em um conjunto de subsistemas e fornecer uma resposta imediata para a classe cliente. Assinale dentre as principais vantagens desse padrão de projeto a única que não é verdadeira.: Incentivar acoplamento forte entre o subsistema e seus clientes. Simplificar o acesso a determinadas funcionalidades de um subsistema, sem inviabilizar sua utilização direta. Incentivar acoplamento fraco entre o subsistema e seus clientes. judar a melhorar portabilidade dos sistemas. Tornar os clientes independentes da complexidade dos diferentes subsistemas de uma aplicação. 4. Qual padrão usa compartilhamento para suportar eficientemente grandes quantidades de objetos de granularidade fina? Façade. Nenhuma das anteriores. Bridge. Composite. Flyweight. Explicação: Os Padrões Estruturais GoF contemplam 7 (sete) tipos de padrões: Adapter, Bridge, Composite, Decorator, Façade, Flyweight e Proxy. Flyweight é um padrão de projeto de software apropriado quando vários objetos devem ser manipulados em memória sendo que muitos deles possuem informações repetidas. Dado que o recurso de memória é limitado, é possível segregar a informação repetida em um objeto adicional que atenda as características de imutabilidade e comparabilidade (que consiga ser comparado com outro objeto para determinar se ambos carregam a mesma informação). 5. Qual a vantagem do padrão Proxyr? Assinale a opção INCORRETA. Consigo atribuir um certo grau de inteligência, o que possibilitaria um tratamento inteligente dos dados; Permite, sempre que for desejável, criar uma interface para um conjunto de objetos com o objetivo de facilitar o uso da aplicação; Permite maior eficiência com caching no cliente; Tem transparência, ou seja, mesma sintaxe usada na comunicação entre o cliente e sujeito real é usada no proxy; Permite o tratamento inteligente dos dados no cliente; Explicação: Essa afirmativa está incorreta, porque ela se refere ao padrão Façade. 6. Que padrão estrutural provê um ponto de atendimento para que outro objeto possa controlar o acesso ao primeiro: Proxy Facade Flyweight Adapter Decorator 7. O padrão Flyweight é um Padrão Estrutural GoF. Quando não devemos usar esse padrão? I- Quando o estado dos objetos não for imutável II- Quando o tamanho do conjunto de objetos for significativamente menor que a quantidade de vezes em que eles são usados na aplicação; III- Quando objetos podem ser usados em diferentes contextos ao mesmo tempo (agindo sempre como um objeto independente); Est(á)ão correta(s) a(s) afirmativa(s): Somente o item II; Somente os itens II e III; Somente o item I; Somente os itens I e II; Somente os itens I e III; Explicação: Os itens II e III estão errados porque é nesta situação que devemos usar esse padrão. No item I é preciso passar o estado mutável como parâmetro e isto pode ser impraticável se o estado consistir de vários objetos. 8. Qual padrão de projeto tem como propósito prover interface unificada para conjunto de interfaces em um subsistema, definindo uma interface de alto-nível. Singleton Factory Method Decorator Strategy Facade Explicação: O Padrão Façade é do tipo estrutural . É usado quando um sistema é muito complexo ou difícil de entender, já que possui um grande número de classes independentes ou se trechos de código fonte estão indisponíveis. Este padrão esconde as complexidades de um sistema maior e provê uma interface simplificada ao cliente. Tipicamente envolve uma única classe responsável por englobar uma série de membros requeridos pelo cliente. Estes membros acessam o sistema em nome do Façade e escondem os detalhes de implementação. Questões Aula 5 1. A equipe de desenvolvimento de um sistema de folha de pagamento está enfrentando problemas para modelar o sistema porque existe uma infinidade de objetos no sistema antigo que devem ser integrados ao novo. Qual padrão poderia ser utilizado para a equipe nessa situação? a) O padrão Facade, pois ele reduz a complexidade de conexão e o uso de partes preexistentes de um sistema. b) O padrão Bridge, que pode fornecer uma interface para servir de ponte entre o sistema novo e o antigo. c) O padrão Prototype, porque ele permite criar instâncias novas copiando um objeto protótipo como modelo. d) O padrão Facade, pois ele garante que apenas um objeto existe no sistema, independentemente de quantas requisições a classe recebe para criá-lo. e) O padrão Bridge, que pode criar múltiplas interfaces para reduzir a complexidade das conexões entre os objetos. Gabarito:letra a. Um dos principais benefícios do Facade é proporcionar a redução da complexidade de uso da interface de um componente complexo ou de um sistema por meio do uso de interfaces que encapsulam a complexidade dos demais objetos existentes. 2. Em todas as situações descritas a seguir é recomendável o uso do padrão Flyweight, exceto: a) Quando grupos de objetos puderem ser substituídos por poucos objetos compartilhados. b) Quando os custos de alocação dos objetos na memória forem altos por causa da grande quantidade de objetos existente no sistema. c) Quando uma aplicação utilizar uma pequena quantidade de objetos. d) Quando o sistema não precisar conhecer a identidade dos objetos. e) Quando o sistema contiver uma grande quantidade de objetos de pequena funcionalidade. Gabarito: É recomendado o uso do padrão Flyweight para sistemas que possuem grande quantidade de objetos de pequena funcionalidade. 3. O padrão Proxy implementa a interface ______. Nesse caso, o sistema passa a utilizar o objeto ______ no lugar do ________ de forma transparente para o ______. a) Objeto, Proxy, Objeto Real, Cliente. b) Ponte, Proxy, Objeto, Cliente. c) Fachada, Objeto, Proxy, Cliente. d) Decoração, Cliente, Proxy, Objeto Real. e) Proxy, Objeto, Real, Proxy, Cliente. Gabarito: O padrão Proxy implementa a interface Objeto (Subject). Nesse caso, o sistema passa a utilizar o objeto Proxy (como interface)no lugar do Objeto Real (RealSubject) de forma transparente para o Cliente. 4. Qual objetivo do padrão Adapter? a) Permitir a composição de objetos em estruturas de árvore. b) Adicionar responsabilidades a um objeto dinamicamente. c) Viabilizar o reuso de aplicativos de prateleira. d) Criar objetos a partir da cópia do comportamento de um objeto protótipo. e) Garantir que apenas um objeto exista no sistema, independentemente de quantas requisições a classe receba para criá-lo. Gabarito: O Adapter trabalha para prover compatibilidade entre interfaces, possibilitando o reuso de componentes já desenvolvidos em projetos novos. 2. Qual o padrão mais adequado para uso quando é necessário manipular coleção hierárquica de objetos de forma uniforme? a) Singleton b) Adapter c) Bridge d) Composite e) Facade Gabarito: O padrão Composite permite a composição de objetos em estruturas de árvore para representar hierarquias parte-todo. Com o uso deste padrão, clientes podem tratar objetos individuais ou composições de objetos de maneira uniforme. 3. O padrão ______ adiciona responsabilidades ______ a objetos, fornecendo uma alternativa ao uso de _____ para estender funcionalidades. a) Decorator, dinâmicas, herança. b) Bridge, estáticas, polimorfismo. c) Adapter, dinâmicas, herança. d) Decorator, dinâmicas, interfaces. e) Composite, dinâmicas, classes abstratas. Gabarito: O Decorator tem a função de adicionar dinamicamente alterações no comportamento dos objetos. Para isso, ele utiliza composição em vez de herança. Questões Teste de Conhecimento 5 1. A implementação do padrão de projeto Chain of Responsability requer que cada objeto receptor de uma determinada solicitação tenha uma lógica para descrever os tipos de solicitação que é capaz de processar e como passar adiante aquelas que requeiram processamento por outros receptores. A delegação das solicitações pode formar uma árvore de recursão, com um mecanismo especial para inserção de novos receptores no final da cadeia existente. Marque a alternativa que NÃO identifica uma vantagem do padrão de projeto Chain of Responsability. As partes invariantes, conforme a situação, contexto ou problema a ser resolvido, podem ser redefinidas em classes abstratas gerando interconexão entre os objetos. Reduz a interconexão entre os objetos, ao invés de um objeto manter uma lista com todos os receptores candidatos, eles mantém uma referência única para o sucessor; Flexibilidade na atribuição de responsabilidades, ou seja, pode-se mudar a cadeia de objetos em tempo de execução, adicionando ou removendo objetos. Padrão libera um objeto de ter que conhecer qual o outro objeto que trata de uma solicitação. Remetente e receptor não têm conhecimento explícito um do outro. 2. A classe Handler é uma classe abstrata, portanto, não pode ser instanciada diretamente. Assim, para montar uma cadeia de objetos é necessário especializá-la em que tipo de classes? Assinale dentre as opções abaixo aquela que está correta. baixa coesão. Generalizada; alto acoplamento; concretas; com método púbico; 3. Aponte dentre as opções abaixo aquela que corresponde ao padrão que apresenta como uma desvantagens, a obrigatoriedade da definição de ao menos, uma classe para cada regra da gramática, logo, gramáticas com muitas regras são difíceis de manter e administrar. Façade; Proxy; Chain of Responsability; Template Method; Interpreter; 4. Os padrões de comportamento correspondem a: Chain of Responsability, Command, Interpreter, Iterador, Mediator, Memento, Observer, State, Strategy, Template Method e Visitor Abstract Factory, Builder, Factory Method, Prototype e Singleton. Adapter, Bridge, Composite, Decorator, Façade, flyweight e proxy Iterador, Mediator, Bridge, Composite, Decorator, Façade, Flyweight e Proxy Todas as alternativas estão erradas Explicação: Há 11 Padrões Comportamentais GoF: Chain of Responsability, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method e Visitor. São projetados para organizar, gerenciar e combinar diferentes comportamentos. O objetivo dos Comportamentais têm a ver com a maneira pela qual responsabilidades são distribuídas a classes e objetos durante a realização de uma tarefa. São abstrações de aspectos comportamentais. 5. (CESGRANRIO - 2008) Muitos frameworks utilizam um padrão de projeto (design pattern) que se baseia no princípio de projeto "Não nos chame, nós iremos chamar você" (O Princípio de Hollywood: "Don't call us, we'll call you."). Uma classe da aplicação herda de uma classe do framework que possui métodos abstratos, os quais são chamados em outros métodos concretos. A classe da aplicação sobrepõe os métodos abstratos da classe do framework com métodos concretos, permitindo que os métodos concretos da classe do framework sejam chamados. O padrão de projeto (design pattern) em questão chama-se Abstract Factory. Strategy. Singleton. Decorator. Template Method. 6. No padrão MVC é possível definir grupos de componentes principais: o Model (Modelo), o View (Apresentação) e o Controller (Controle). Deve fazer parte do componente: Controller, as animações desenvolvidas em Flash. Controller, uma classe que contém um método com a finalidade de calcular o reajuste de salário dos funcionários. View, uma classe que contém um método para persistir o salário reajustado de um funcionário. Model, as classes com métodos conhecidos como setters e getters e que representam tabelas do banco de dados. View, as validações necessárias ao sistema, geralmente definidas através de um conjunto de comparações. Explicação: O padrão de arquitetura MVC é uma combinação de padrões centrada no padrão Observer e consiste de três participantes: Model: representa os dados da aplicação e regras de negócio associadas com os dados. Notifica o View sobre alterações. View: é um Observer para o Model. Notifica o Controller sobre eventos iniciados pelo usuário e lê dados do Model. Controller: é um Observer para o View. Encapsula lógica de controle que afeta o Model e seleciona View. 7. (CESGRANRIO - 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? Interpreter. Singleton. Decorator. Observer. Template Method. Explicação: A família de padrões GoF, está divida em três grupos principais de padrões: Padrões de Criação, Padrões Estruturais e Padrões Comportamentais. Há cinco padrões de criação GoF: Abstract Factory, Builder, Factory Method, Prototype e Singleton. Há 7 (sete) tipos de padrões estruturais GoF: Adapter, Bridge, Composite, Decorator, Façade, Flyweight e Proxy. Há 11 padrões comportamentais GoF: Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method e Visitor. O Template Method define o esqueleto de um algoritmo dentro de uma operação, deixando alguns passos aserem preenchidos pelas subclasses. Template Method permite que suas subclasses redefinam certos passos de um algoritmo sem mudar sua estrutura. 8. (PETROBRAS - CESGRANRIO 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? Template Method. Singleton. Interpreter. Decorator. Observer. Questões Aula 6 1. A equipe de desenvolvimento de um sistema de folha de pagamento está enfrentando problemas para modelar o sistema porque existe uma infinidade de objetos no sistema antigo que devem ser integrados ao novo. Qual padrão poderia ser utilizado para a equipe nessa situação? a) O padrão Facade, pois ele reduz a complexidade de conexão e o uso de partes preexistentes de um sistema. b) O padrão Bridge, que pode fornecer uma interface para servir de ponte entre o sistema novo e o antigo. c) O padrão Prototype, porque ele permite criar instâncias novas copiando um objeto protótipo como modelo. d) O padrão Facade, pois ele garante que apenas um objeto existe no sistema, independentemente de quantas requisições a classe recebe para criá-lo. e) O padrão Bridge, que pode criar múltiplas interfaces para reduzir a complexidade das conexões entre os objetos. Gabarito: Um dos principais benefícios do Facade é proporcionar a redução da complexidade de uso da interface de um componente complexo ou de um sistema por meio do uso de interfaces que encapsulam a complexidade dos demais objetos existentes. 2. Em todas as situações descritas a seguir é recomendável o uso do padrão Flyweight, exceto: a) Quando grupos de objetos puderem ser substituídos por poucos objetos compartilhados. b) Quando os custos de alocação dos objetos na memória forem altos por causa da grande quantidade de objetos existente no sistema. c) Quando uma aplicação utilizar uma pequena quantidade de objetos. d) Quando o sistema não precisar conhecer a identidade dos objetos. e) Quando o sistema contiver uma grande quantidade de objetos de pequena funcionalidade. Gabarito: É recomendado o uso do padrão Flyweight para sistemas que possuem grande quantidade de objetos de pequena funcionalidade. 3. O padrão Proxy implementa a interface ______. Nesse caso, o sistema passa a utilizar o objeto ______ no lugar do ________ de forma transparente para o ______. a) Objeto, Proxy, Objeto Real, Cliente. b) Ponte, Proxy, Objeto, Cliente. c) Fachada, Objeto, Proxy, Cliente. d) Decoração, Cliente, Proxy, Objeto Real. e) Proxy, Objeto, Real, Proxy, Cliente. Gabarito: O padrão Proxy implementa a interface Objeto (Subject). Nesse caso, o sistema passa a utilizar o objeto Proxy (como interface) no lugar do Objeto Real (RealSubject) de forma transparente para o Cliente. 4. Quando temos problemas no projeto de desenvolvimento de um software que são bastante conhecidos e podem ser mapeados em um conjunto de regras de uma linguagem, qual padrão pode ser utilizado pela equipe? a) Integer b) Facade c) Bridge d) Template Method e) Singleton Gabarito: Este padrão permite tratar um conjunto de problemas conhecido como símbolos de uma linguagem, que pode ser interpretada pelo sistema por meio de um conjunto de regras gramaticais. 5. O problema tratado por este padrão se refere a dois componentes diferentes que têm semelhanças significativas, embora ambos não demonstrem a reutilização de interface ou a implementação comum. Estamos nos referindo ao padrão: a) Integer b) Facade c) Bridge d) Template Method e) Singleton Gabarito: No padrão Template Method, o arquiteto de software, responsável pela definição dos componentes, deve decidir quais partes de um algoritmo são invariantes (devem ser padronizadas) e quais são variantes (são personalizáveis). 6. São características do padrão Chain of Responsibility as seguintes características, exceto: a) Diminui o acoplamento entre os objetos. b) Permite que a divisão de responsabilidades ocorra de forma transparente no sistema. c) Permite que um sistema determine, em tempo de execução, qual objeto tratará uma mensagem. d) Passa uma solicitação do remetente ao longo de uma cadeia de possíveis receptores. e) Propõe a definição de uma linguagem de domínio (um modo de representar os problemas) como uma gramática de linguagem simples, representando regras de domínio, como sentenças de linguagem, e interpretando essas sentenças para resolver o problema. Gabarito: Resposta a Esta característica é relacionada ao padrão Interpreter. Questões Teste de Conhecimento 6 1. São vantagens da arquitetura MVC, EXCETO: poder ser utilizada em aplicações simples ,sem sobrecarregar o desenvolvimento com componentes desnecessários. possuir melhor separação de responsabilidades. garantir um crescimento constante da aplicação. permitir interfaces mais sofisticadas com o usuário. permitir a distribuição dos elementos da aplicação. Explicação: Essa afirmativa não é uma vantagem porque: Model: representa os dados da aplicação e regras de negócio associadas com os dados. Notifica o View sobre alterações. View: é um Observer para o Model. Notifica o Controller sobre eventos iniciados pelo usuário e lê dados do Model. Controller: é um Observer para o View. Encapsula lógica de controle que afeta o Model e seleciona View. O MVC é utilizado em muitos projetos devido à arquitetura que possui, o que possibilita a divisão do projeto em camadas muito bem definidas. Cada uma delas, o Model, o Controller e a View, executa o que lhe é definido e nada mais do que isso. A utilização do padrão MVC trás como benefício isolar as regras de negócios da lógica de apresentação, a interface com o usuário. Isto possibilita a existência de várias interfaces com o usuário que podem ser modificadas sem que haja a necessidade da alteração das regras de negócios, proporcionando assim muito mais flexibilidade e oportunidades de reuso das classes. Uma das características de um padrão de projeto é poder aplicá-lo em sistemas distintos. O padrão MVC pode ser utilizado em vários tipos de projetos como, por exemplo, desktop, web e mobile. 2. Definir um objeto que encapsula a forma como um conjunto de objetos interagem. Promove o baixo acoplamento ao evitar que os objetos se refiram uns aos outros diretamente/explicitamente. Qual opção abaixo corresponde à descrição anterior? Intenção do padrão de projeto proxy Intenção do padrão de projeto strategy Intenção do padrão de projeto composite Intenção do padrão de projeto prototype Intenção do padrão de projeto mediator Explicação: Há 11 Padrões Comportamentais GoF: Chain of Responsability, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method e Visitor. São projetados para organizar, gerenciar e combinar diferentes comportamentos. O objetivo dos Comportamentais têm a ver com a maneira pela qual responsabilidades são distribuídas a classes e objetos durante a realização de uma tarefa. São abstrações de aspectos comportamentais. O padrão Mediator é um padrão define um objeto que encapsula a forma como um conjunto de objetos interage, promovendo o acoplamento fraco ao evitar que os objetos se refiram unsaos outros explicitamente, permitindo variar suas interações independentemente. 3. Qual padrão encapsula uma solicitação como objeto permitindo parametrizar clientes com diferentes solicitações, enfileirar ou fazer log das solicitações e suportar operações que podem ser desfeitas? Mediator. Nenhuma das anteriores. State. Command. Observer. Explicação: Há 11 Padrões Comportamentais GoF: Chain of Responsability, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method e Visitor. São projetados para organizar, gerenciar e combinar diferentes comportamentos. O objetivo dos Comportamentais têm a ver com a maneira pela qual responsabilidades são distribuídas a classes e objetos durante a realização de uma tarefa. São abstrações de aspectos comportamentais. O padrão 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. O objetivo do padrão de projeto Command é encapsular chamadas de métodos. As principais aplicabilidades deste padrão de projeto são: permitir fácil inclusão de novos comandos, permitir tratamento de requisições concorrentes, manter histórico de execução de comandos, suportar operações para desfazer comandos e, principalmente, evitar o acoplamento direto entre classes e serviços 4. Existe um padrão de projeto que é bastante utilizado em programação de sistema para gerenciar a comunicação entre dois ou mais objetos. Ele pode ser visto como uma classe intermediária de comunicação e gerenciamento, evitando que os objetos se comuniquem de forma direta. Dentre as opções abaixo assinale aquela que está correta para a colocação acima. Padrão Mediator; Command; Padrão Proxy; Padrão Memento Padrão Interator; 5. O padrão de projeto Comand apresenta uma serie aplicabilidades. Assinale dentre as opções abaixo a unica que não esta correta. permitir fácil inclusão de novos comandos,permitir isições concorrentes, manter histórico de execução de comandos, suportar operações para desfazer comandos e, principalmente, evitar o acoplamento direto entre classes e serviços. permitir tratamento de requ Evitar o acoplamento direto entre classes e serviços; permitir tratamento de requisições concorrentes; permitir fácil inclusão de novos comandos Manter histórico de execução de comandos; Permitir em casos excepcionais o acoplamento direto entre classes e serviços; 6. 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, IV estão corretas e a afirmativa III está errada. As afirmativas I, II, III estão erradas e IV correta. As afirmativas I, III, IVestão corretas e II errada. As afirmativas II, III ,IVestão corretas e a afirmativa I está errada. As afirmativas I, II, III e IV estão corretas. Explicação: Há três grupos de padrões GoF: Padrões de Criação, Padrões Estruturais e Padrões Comportamentais. Os padrões Comportamentais GoF contemplam 11 (onze) tipos de padrões: Escopo por Classe: Interpreter, Template Method; Escopo por Objeto: Chain of Responsibility, Command, Iterator, Mediator, Memento, Observer, State, Strategy, e Visitor. O 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. O objetivo do padrão de projeto Command é encapsular chamadas de métodos. As principais aplicabilidades deste padrão de projeto são: permitir fácil inclusão de novos comandos, permitir tratamento de requisições concorrentes, manter histórico de execução de comandos, suportar operações para desfazer comandos e, principalmente, evitar o acoplamento direto entre classes e serviços. 7. i) Iterator fornece uma maneira de acessar elementos de um objeto agregado seqüencialmente, sem expor sua representação interna. ii) Mediator oferece uma interface única de nível mais elevado para um conjunto de interfaces de um subsistema. iii) Observer define uma dependência um-para-muitos entre objetos para que quando um objeto mudar de estado, os seus dependentes sejam notificados e atualizados automaticamente. Em relação aos itens acima está correto: somente a i e ii somente a ii somente a i e iii somente a i somente a ii e iii Explicação: Há 11 Padrões Comportamentais GoF: Chain of Responsability, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method e Visitor. São projetados para organizar, gerenciar e combinar diferentes comportamentos. O item II está errado porque o padrão Mediator é um padrão define um objeto que encapsula a forma como um conjunto de objetos interage, promovendo o acoplamento fraco ao evitar que os objetos se refiram uns aos outros explicitamente, permitindo variar suas interações independentemente. 8. Um padrão arquitetural que se preocupa em resolver o problema da organização objetivando facilitar a manutenção e aumentar a coesão entre classes afins e assim facilitar o reuso de código de forma ordenada e econômica, dividindo essas classes em camadas com finalidades específicas de armazenar os domínios da aplicação, as apresentações e as regras de negócio é denominado: Kernel Monolítico Model-View-Control NCamandas Pure Fabrication Explicação: O padrão de arquitetura MVC é uma combinação de padrões centrada no padrão Observer e consiste de três participantes: Model: representa os dados da aplicação e regras de negócio associadas com os dados. Notifica o View sobre alterações. View: é um Observer para o Model. Notifica o Controller sobre eventos iniciados pelo usuário e lê dados do Model. Controller: é um Observer para o View. Encapsula lógica de controle que afeta o Model e seleciona View. O MVC é utilizado em muitos projetos devido à arquitetura que possui, o que possibilita a divisão do projeto em camadas muito bem definidas. Cada uma delas, o Model, o Controller e a View, executa o que lhe é definido e nada mais do que isso. A utilização do padrão MVC trás como benefício isolar as regras de negócios da lógica de apresentação, a interface com o usuário. Isto possibilita a existência de várias interfaces com o usuário que podem ser modificadas sem que haja a necessidade da alteração das regras de negócios, proporcionando assim muito mais flexibilidade e oportunidades de reuso das classes. Uma das características de um padrão de projeto é poder aplicá-lo em sistemas distintos. O padrão MVC pode ser utilizado em vários tipos de projetos como, por exemplo, desktop, web e mobile. Questões Aula 7 1. Qual padrão tem o objetivo de encapsular um pedido em um objeto, permitindo, assim, parametrizar clientes com pedidos diferentes, enfileirar pedidos, fazer log de pedidos e dar suporte a operações de undo? a) Command b) Iterator c) Mediator d) Memento e) Facade Gabarito: O Command tem o objetivo definido pela GoF de encapsular um pedido em um objeto para parametrizar e tratar solicitações de vários clientes. 2. Qual padrão resolve o problema relacionado à necessidadede abstração do acesso a uma lista de elementos armazenados em estruturas de dados diversas? a) Integer b) Memento c) Mediator d) Template Method e) Iterator Gabarito: O problema tratado por este padrão refere-se à necessidade de abstrairmos o percurso de estruturas de dados totalmente diferentes para que possam ser definidos algoritmos capazes de interagir com cada uma delas de forma transparente. 3. Qual padrão diminui o acoplamento entre os objetos, permitindo que haja comunicação entre eles? a) Integer b) Memento c) Mediator d) Template Method e) Iterator Gabarito: No padrão Mediator, um objeto mediador deve encapsular qualquer comunicação entre um grupo de objetos. Cada um deles deve conhecer o mediador, mas ignorar a existência dos outros objetos. 4. Qual padrão oferece uma maneira simples de salvar valores (estados) internos dos atributos de um objeto, bastando salvar todas as informações necessárias em uma classe de armazenamento de estados para recuperá-las mais tarde? a) Integer b) Memento c) Mediator d) Template Method e) Iterator Gabarito: Esse é o objetivo deste padrão. Questões Teste de Conhecimento 7 1. O padrão de projeto State deve ser implementado não somente quando o comportamento de um objeto depende do seu estado, mas também quando a funcionalidade de um objeto possui _______________; Complete a lacuna com a opção correta. . padrão visitor; padrão bridge; Atributos valorados; agreagações; condicionais grandes; 2. Qual padrão define uma família de algoritmos, encapsula cada uma delas e torna-as intercambiáveis, e permite que o algoritmo varie independentemente dos clientes que o utilizam? Decorator. Nenhuma das anteriores. Visitor. Strategy. Template Method. Explicação: Há 11 Padrões Comportamentais GoF: Chain of Responsability, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method e Visitor. São projetados para organizar, gerenciar e combinar diferentes comportamentos. O objetivo dos Comportamentais têm a ver com a maneira pela qual responsabilidades são distribuídas a classes e objetos durante a realização de uma tarefa. São abstrações de aspectos comportamentais. O padrão Strategy define uma família de algoritmos , encapsula cada um deles, e torna-os intercambiáveis, permitindo assim que os algoritmos variem independentemente dos clientes que os utilizam. 3. Marque a alternativa que está relacionada com o padrão de projeto que permite definir uma nova operação sem mudar as classes dos elementos sobre os quais opera. Observer Visitor Strategy Memento State 4. (2016 - COPEVE-UFAL) A adoção de padrões de projeto proporciona uma reutilização estratégica durante o desenvolvimento de software, uma vez que promove o reuso de soluções previamente validadas e notadamente bem conhecidas (reuso de rationale). A figura apresenta um diagrama de classes que modela o controlador responsável por controlar o nível de dificuldade de um jogo eletrônico. Vale salientar que o nível de dificuldade pode ser ajustado em tempo de execução, a partir do perfil de cada jogador. Assinale a alternativa que representa o padrão de projetos que foi utilizado no exemplo apresentado na figura. Composite, pois os diversos níveis de dificuldade estão representados através de uma hierarquia bem definida. Command, uma vez que cada nível de dificuldade representa um comando complementar do jogo, representando, assim, diferentes formas de acionar o jogo. Chain of Responsability, uma vez que não se sabe a priori qual o nível de dificuldade que será utilizado, variando no decorrer da execução. Observer, uma vez que o controlador precisa monitorar os níveis de dificuldade. State, uma vez que este padrão possui o propósito de facilitar mudanças dinâmicas na execução dos métodos. Explicação: Há 11 Padrões Comportamentais GoF: Chain of Responsability, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method e Visitor. São projetados para organizar, gerenciar e combinar diferentes comportamentos. O objetivo dos Comportamentais têm a ver com a maneira pela qual responsabilidades são distribuídas a classes e objetos durante a realização de uma tarefa. São abstrações de aspectos comportamentais. O padrão State permite que um objeto altere o seu comportamento quando o seu estado interno muda. O objeto parecerá ter mudado de classe. O padrão encapsula os estados em classes separadas e delega as tarefas para o objeto que representa o estado atual, nós sabemos que os comportamentos mudam juntamento com o estado interno. 5. Qual padrão é melhor usado para um sistema Desktop? Strategy; Memento; Visitor; State; Observer; Explicação: Esta opção está correta porque o objetivo do padrão Observer é definir uma dependência um-para-muitos entre objetos para que quando um objeto mudar de estado, todos os seus dependentes sejam notificados e atualizados automaticamente. O Observer tem uma característica diferente. É muito usado em sistema desktop. 6. Dentre as opções abaixo identifique aquela que corresponde ao padrão de projeto, cujo principal objetivo, é permitir que sejam adicionadas novas funcionalidades a classes previamente concebidas sem que haja necessidade de alterar sua implementação. Strategy; Criador; Interpreter Visitor; State; 7. Qual padrão representa uma operação a ser executada nos elementos de uma estrutura de objetos e permite definir uma nova operação sem mudar as classes dos elementos sobre os quais operar? Decorator. Nenhuma das anteriores. Bridge. Memento. Visitor. Explicação: Há 11 Padrões Comportamentais GoF: Chain of Responsability, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method e Visitor. São projetados para organizar, gerenciar e combinar diferentes comportamentos. O objetivo dos Comportamentais têm a ver com a maneira pela qual responsabilidades são distribuídas a classes e objetos durante a realização de uma tarefa. São abstrações de aspectos comportamentais. O padrão Visitor representa 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. 8. O padrão Visitor é um Padrão Comportamental GoF. O objetivo desse padrão é: I- Representar uma operação a ser realizada nos elementos de uma estrutura de objetos; II- Definir uma dependência um-para-muitos entre objetos para que quando um objeto mudar de estado, todos os seus dependentes sejam notificados e atualizados automaticamente; III- permite que você defina uma nova operação sem alterar as classes dos elementos nos quais a operação atua; Est(á)ão correta(s) a(s) afirmativa(s): Somente os itens I e II; Somente o item I; Somente o item II; Somente os itens I e III; Somente o item III; Explicação: O objetivo do padrão Visitor, de acordo com Gamma et. al, 2000, é 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. O item II está incorreto, porque esse é o objetivo do padrão Observer. Questões Aula 8 1. O padrão Observer resolve qualtipo de problema? a) Como se pode assegurar que, quando um objeto mudar de estado, um número aberto de objetos dependentes será atualizado (sincronizado) automaticamente? b) Como uma dependência um-para-muitos entre objetos pode ser definida sem tornar os objetos fracamente acoplados? c) De que forma o modo como um conjunto de objetos dependentes interage entre si pode ser alterado independentemente dos objetos? d) Como novas operações podem ser definidas para as classes de uma estrutura de objetos sem alterar essas classes? e) O padrão se aplica a todos os tipos de problemas listados anteriormente. Gabarito: Observer controla o estado de um grupo de objetos dependentes atualizando o estado deles automaticamente. 2. Qual das soluções seguintes o padrão de design State não descreve? a) Como as classes devem delegar o comportamento específico do estado para seu objeto de estado atual em vez de implementar diretamente o comportamento específico dele. b) Como definir instruções condicionais que alternam entre estados diferentes e implementam o comportamento específico do estado correspondente em cada ramificação condicional. c) Como encapsular o comportamento específico do estado em um objeto State separado. d) Como definir uma interface de estado comum para executar um comportamento específico do estado para todos aqueles suportados. e) Como separar (desacoplar) o comportamento específico do estado do outro código de uma classe para que esse comportamento possa ser alterado independentemente da classe. Gabarito: State evita a definição de instruções condicionais, delegando o comportamento específico do estado para o objeto de estado atual. 3. Quais são as principais ideias no padrão de design de estratégia, exceto? a) Separar (desacoplar) um algoritmo do seu contexto para que ele possa variar de forma independente. b) Separar (desacoplar) um algoritmo do seu contexto para torná-los mais fáceis de implementar, alterar, testar e reutilizar. c) Implementar um algoritmo diretamente dentro da classe que requer o algoritmo. d) É recomendado o uso do padrão Strategy quando muitas classes relacionadas diferem somente no seu comportamento. e) É recomendado seu uso quando existe uma classe que define muitos comportamentos que aparecem em suas operações como múltiplos comandos condicionais da linguagem. Gabarito: Strategy recomenda que se encapsule um algoritmo em uma classe de estratégia separada. 4. O padrão Visitor resolve todos os problemas a seguir, exceto? a) Como as novas operações podem ser definidas para as classes de uma estrutura de objeto independentemente de (sem alterar) qualquer classe existente? b) Como uma alternativa flexível pode ser fornecida para a subclassificação a fim de definir novas operações para as classes de uma estrutura de objetos? c) Como a funcionalidade dos objetos pode ser estendida em tempo de execução? d) Como podem ser definidas novas operações para as classes de uma estrutura de objeto independentemente (sem alterar ou estender) das classes? e) Como separar as operações que serão executadas em uma determinada estrutura de sua representação? Gabarito: Visitor atua para modificar as funcionalidades de um objeto em tempo de execução do programa, dando maior flexibilidade para a mudança de comportamento do sistema em tempo de execução. Questões Teste de Conhecimento 8 1. Os 9 padrões definidos pela General Responsability Assignment Software Pattener são? 1.Creator; 2.High Coesion; 3.Low Coupling; 4.Buider; 5.Bridge; 6.Information Expert; 7.Pure Fabrication; 8.Indirection; e 9.Variation. 1.Creator; 2.High Coesion; 3.Low Coupling; 4.Controller; 5.Polymorphis; 6.Information Expert; 7.Pure Fabrication; 8.Indirection; e 9.Facade. 1.Singleton; 2.High Coesion; 3.Low Coupling; 4.Controller; 5.Polymorphis; 6.Information Expert; 7.Pure Fabrication; 8.Indirection; e 9.Variation. 1.Creator; 2.Decoretor; 3.FlyWeight; 4.Controller; 5.Polymorphis; 6.Information Expert; 7.Pure Fabrication; 8.Indirection; e 9.Variation. 1.Creator; 2.High Coesion; 3.Low Coupling; 4.Controller; 5.Polymorphis; 6.Information Expert; 7.Pure Fabrication; 8.Indirection; e 9.Variation. 2. Utilizando a nomenclatura dos padrões GRASP, o padrão Criador assume que tipo de responsabilidade? Assume a responsabilidade de conhecer, pois sua funcionalidade está relacionada com a resposta a seguinte pergunta: Quem deve criar um objeto A? Assume a responsabilidade de fazer, pois sua funcionalidade está relacionada com a resposta a seguinte pergunta: Quem deve criar um objeto A? Assume a responsabilidade de julgar, pois sua funcionalidade está relacionada com a resposta a seguinte pergunta: Quem deve criar um objeto A? Assume a responsabilidade de substituir, pois sua funcionalidade está relacionada com a resposta a seguinte pergunta: Quem deve criar um objeto A? Assume a responsabilidade de estimar, pois sua funcionalidade está relacionada com a resposta a seguinte pergunta: Quem deve criar um objeto A? Explicação: Essa afirmativa está correta porque, utilizando a nomenclatura dos padrões GRASP (Larman, 2007), o padrão Criador assume a responsabilidade de fazer, pois sua funcionalidade está relacionado com a resposta a seguinte pergunta: Quem deve criar um objeto A? Grifa-se, novamente, a palavra quem da pergunta anterior. 3. Não é padrão GRASP? Polymorphism Controller Creator Indirection Low Cohesion Explicação: Temos os seguintes Padrões GRASP: Expert (Especialista), Creator (Criador), High Coesion, Low Coupling (Baixo Acoplamento), Controller. Padrões GRASP descrevem princípios fundamentais de atribuição de responsabilidade a objetos. COESÃO - Coesão mede o quanto as responsabilidades de um elemento (classe, objeto, subsistema,¿) são fortemente relacionadas. 4. Os padrões GRASP são PRINCÍCPIOS, nos quais nós devemos nos basear, para o desenvolvimento. O padrão Expert (Especialista da informação) é um dos padrões GRASP. Com relação a esse padrão, assinale a informação INCORRETA. No padrão especialista, as informações que uma classe necessita podem estar espalhadas por toda aplicação, em diferentes classes; No padrão especialista, as informações disponíveis estão relacionadas ao estado do próprio objeto; No padrão especialista, a consequência relacionada com a utilização desse padrão é a melhoria do encapsulamento; O padrão especialista não está interessado no algoritmo de criação, mas sim em auxiliar o programador a determinar qual classe dever ser responsável pela instanciação de um dado objeto; O padrão especialista deve atribuir responsabilidade à classe que tem informações suficientes para atender uma dada responsabilidade; Explicação: Essa resposta está INCORRETA porque ela se refere ao padrão Criador. 5. No GRASP direcionar a ação para a classe que sabe resolvê-la é: Variation Creator Controller Information Expert Indirection Explicação: Alguns padrões da família GRASP: Expert, Creator, High Coesion, Low Coupling, Controller, ou seja: Especialista; Criador; Baixo Acoplamento (Acoplamento Fraco). No Expert (Especialista da informação), o que acontece é que o comportamento está espalhado (estratificado) por toda árvore, em todo o gráfico de classe. Especialista atribuir responsabilidade ao especialista da informação. Especialista na informação é um princípio utilizado para determinar onde delegar responsabilidades. Essas responsabilidades incluem métodos, campos computados,
Compartilhar