Baixe o app para aproveitar ainda mais
Prévia do material em texto
W W W. D OMI NAND OTI .COM.B R WWW.DOMINANDOTI .COM.BR Padrões de Projeto GoF e Java EE Professor Marcelo Pacote – @profmarcelopacote W W W. D OMI NAND OTI .COM.B R Acesse nosso site em WWW.DOMINANDOTI.COM.BR Curta o Dominando TI no e receba nossas dicas sobre concursos! Cursos Turmas em Brasília, na sua cidade, e cursos online Livros Edições publicadas, lançamentos e promoções Fórum Interação direta entre estudantes e com os professores Simulados Questões inéditas, ranking de notas e correções em vídeo Blog Dicas e macetes de estudo, indicações de bibliografia, etc. Materiais Versões atualizadas de notas de aula e listas de exercícios W W W. D OMI NAND OTI .COM.B R Agenda – Desenvolvimento de Sistemas Padrões de Projeto Padrões GOF Padrões Java EE Professor Marcelo Pacote - @profmarcelopacote 3 W W W. D OMI NAND OTI .COM.B R Padrões – Big Picture Padrões de Arquitetura MVC e outros. Padrões de projeto GoF Java EE Idiomas Professor Marcelo Pacote - @profmarcelopacote 4 W W W. D OMI NAND OTI .COM.B R Exercício [01] (TCU/2009/CESPE) Com relação a conceitos de arquitetura e padrões de projeto JEE, julgue os próximos itens. ( ) Para uma arquitetura de aplicações JEE, os padrões de projeto podem ser classificados em duas categorias: padrões de desenvolvimento geral de software e padrões que identificam desafios específicos J2EE. ( ) No MVC (model-view-controller), um padrão recomendado para aplicações interativas, uma aplicação é organizada em três módulos separados. Um para o modelo de aplicação com a representação de dados e lógica do negócio, o segundo com visões que fornecem apresentação dos dados e input do usuário e o terceiro para um controlador que despacha pedidos e controle de fluxo. Professor Marcelo Pacote - @profmarcelopacote 5 W W W. D OMI NAND OTI .COM.B R Exercício [02] (PETR/2011/CESGRANRIO) Qual é a arquitetura de software muito utilizada para desenvolvimento de aplicação web, onde a lógica da aplicação é implementada em uma camada separada da interface do usuário (entrada de dados e apresentação) e onde a comunicação entre as camadas se dá através de uma camada controladora? a) Arquitetura 3 camadas: cliente magro, servidor de aplicação e banco de dados b) Arquitetura Cliente / Servidor: cliente gordo e banco de dados c) Arquitetura de comunicação multicamadas d) Arquitetura MVC e) Arquitetura SOA Professor Marcelo Pacote - @profmarcelopacote 6 W W W. D OMI NAND OTI .COM.B R Definição e Contextualização Um padrão: Uma forma ou modelo, proposta para imitação. Alguma coisa projetada ou usada como um modelo para fazer coisas. Um Padrão de Projeto é: Uma estrutura que resolve um problema geral de projeto em um contexto particular. Professor Marcelo Pacote - @profmarcelopacote 7 W W W. D OMI NAND OTI .COM.B R Padrões de Projeto Maneira testada ou documentada de alcançar um objetivo qualquer: Padrões são comuns em várias áreas da engenharia. Design Patterns ou Padrões de Projeto: Padrões para alcançar objetivos na engenharia de software usando classes e métodos em linguagens orientadas a objeto. Inspirado em "A Pattern Language" de Christopher Alexander, sobre padrões de arquitetura de cidades, casas e prédios. "Design Patterns" de Erich Gamma, John Vlissides, Ralph Jonhson e Richard Helm, conhecidos como "The Gang of Four", ou GoF, descreve 23 padrões de projeto. Professor Marcelo Pacote - @profmarcelopacote 8 W W W. D OMI NAND OTI .COM.B R Padrões de Projeto "Cada padrão descreve um problema que ocorre repetidas vezes em nosso ambiente, e então descreve o núcleo da solução para aquele problema, de tal maneira que pode-se usar essa solução milhões de vezes sem nunca fazê-la da mesma forma duas vezes” Christopher Alexander, sobre padrões em Arquitetura Professor Marcelo Pacote - @profmarcelopacote 9 W W W. D OMI NAND OTI .COM.B R Padrões de Projeto "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” Gamma, Helm, Vlissides & Johnson, sobre padrões em software Professor Marcelo Pacote - @profmarcelopacote 10 W W W. D OMI NAND OTI .COM.B R Exercício [03] (TRT-21/2010/CESPE/Técnico) ( ) Os padrões de projeto podem ser definidos como soluções já testadas para problemas que ocorrem frequentemente durante o projeto de software. Professor Marcelo Pacote - @profmarcelopacote 11 W W W. D OMI NAND OTI .COM.B R Padrões de Projeto - Vantagens Aprender com a experiência dos outros. Identificar problemas comuns em engenharia de software e utilizar soluções testadas e bem documentadas. Utilizar soluções que têm um nome: facilita a comunicação, compreensão e documentação. Aprender a programar bem com orientação a objetos. Os 23 padrões de projeto mais conhecidos utilizam as melhores práticas em OO para atingir os resultados desejados. Desenvolver software de melhor qualidade. Os padrões utilizam eficientemente polimorfismo, herança, modularidade, composição, abstração para construir código reutilizável, eficiente, de alta coesão e baixo acoplamento. Professor Marcelo Pacote - @profmarcelopacote 12 W W W. D OMI NAND OTI .COM.B R Exercício [04] (ANAC/2009/CESPE/Técnico) ( ) O uso de padrões de projeto somente pode ser aplicado a projetos que implementam o paradigma de programação orientada a objetos. Professor Marcelo Pacote - @profmarcelopacote 13 W W W. D OMI NAND OTI .COM.B R Exercício [05] (SENADO/2008/FGV) 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: a) somente II. b) somente I e II. c) somente I e III. d) somente II e III. e) I, II e III. Professor Marcelo Pacote - @profmarcelopacote 14 W W W. D OMI NAND OTI .COM.B R Descrevendo um Padrão de Projeto Nome (e classificação) Intenção Motivação Professor Marcelo Pacote - @profmarcelopacote 15 Aplicabilidade Estrutura Participantes Colaborações Consequências Padrões relacionados W W W. D OMI NAND OTI .COM.B R Três Tipos de Padrões GoF Padrões de Criação Padrões Estruturais Padrões Comportamentais Professor Marcelo Pacote - @profmarcelopacote 16 W W W. D OMI NAND OTI .COM.B R Classificação segundo GoF Criação Estrutura Comportamento Builder Prototype Singleton Factory Method Abstract Factory Adapter Bridge Composite Decorator Facade Flyweight Proxy Interpreter Template Method Chain of Responsibility Command Iterator Mediator Memento Observer State Strategy Visitor Professor Marcelo Pacote - @profmarcelopacote 17 W W W. D OMI NAND OTI .COM.B R Classificação – Sim. É necessário memorizar! Professor Marcelo Pacote - @profmarcelopacote 18 W W W. D OMI NAND OTI .COM.B R Exercício [06] (RFB/ESAF/2012) Os padrões de projeto (Design Patterns)são classificados nas categorias: a) Situacional. Estrutural. Complementar. b) Criacional. Evolutiva. Contingencial. c) Compartimental. Vinculada. Comportamental. d) Criacional. Step-by-step. Orientada a requisitos. e) Criacional. Estrutural. Comportamental. Professor Marcelo Pacote - @profmarcelopacote 19 W W W. D OMI NAND OTI .COM.B R Exercício [07] (BNDES/2008/CESGRANRIO) 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? a) Composite b) Adapter c) Observer d) Abstract Factory e) Decorator Professor Marcelo Pacote - @profmarcelopacote 20 W W W. D OMI NAND OTI .COM.B R Exercício [08] (AFC/2008/Esaf/Desv) Quanto à finalidade, os padrões de projeto podem ser classificados em padrões de criação, padrões de estrutura ou padrões comportamentais. Correspondem à categoria de padrões estruturais: a) Facade, Prototype e Proxy. b) Adapter, Composite e Proxy. c) Adapter, Factory Method e Template Method. d) Builder, Template Method e Strategy. e) Adapter, Bridge e Singleton. Professor Marcelo Pacote - @profmarcelopacote 21 W W W. D OMI NAND OTI .COM.B R Padrões de Projeto (GoF) 1. Adapter Converter a interface de uma classe em outra interface esperada pelos clientes. 2. Façade Oferecer uma interface única (e simples) de nível mais elevado para um conjunto de interfaces de um subsistema. 3. Composite Compõe objetos em estrutura de árvore para representar hierarquias do tipo todo-parte. Permitir o tratamento de objetos individuais e composições desses objetos de maneira uniforme. 4. Bridge Desacoplar uma abstração de sua implementação para que os dois possam variar independentemente. Professor Marcelo Pacote - @profmarcelopacote 22 W W W. D OMI NAND OTI .COM.B R Padrões de Projeto (GoF) 5. Singleton Garantir que uma classe só tenha uma única instância, e prover um ponto de acesso global a ela. 6. Observer Definir uma dependência um-para-muitos entre objetos para que quando um objeto mudar de estado, os seus dependentes sejam notificados e atualizados automaticamente. 7. Mediator Definir um objeto que encapsula a forma como um conjunto de objetos interagem. Professor Marcelo Pacote - @profmarcelopacote 23 W W W. D OMI NAND OTI .COM.B R Padrões de Projeto (GoF) 8. Proxy Prover um substituto ou ponto através do qual um objeto possa controlar o acesso a outro. 9. Chain of Responsibility Permitir que uma cadeia de objetos tenha oportunidade de tratar uma solicitação. Encadear objetos passando uma solicitação ao longo da cadeia até que um objeto a trate. 10. Flyweight Usar compartilhamento para suportar eficientemente grandes quantidades de objetos. 11. Builder Separar a construção de objeto complexo da representação para criar representações diferentes com mesmo processo. Professor Marcelo Pacote - @profmarcelopacote 24 W W W. D OMI NAND OTI .COM.B R Padrões de Projeto (GoF) 12. Factory Method Definir uma interface para criar um objeto mas deixar que subclasses decidam que classe instanciar. Permite adiar a instanciação para subclasses. 13. Abstract Factory Prover interface para criar famílias de objetos relacionados ou dependentes sem especificar suas classes concretas. 14. Prototype Especificar tipos a criar usando uma instância como protótipo e criar novos objetos ao copiar este protótipo. 15. Memento Armazenar o estado interno de um objeto para que ele possa ter seu estado restaurado posteriormente (undo). Professor Marcelo Pacote - @profmarcelopacote 25 W W W. D OMI NAND OTI .COM.B R Padrões de Projeto (GoF) 16. Template Method Definir o esqueleto de um algoritmo dentro de uma operação, deixando alguns passos serem preenchidos pelas subclasses. 17. State Permitir a um objeto alterar o seu comportamento quanto o seu estado interno mudar. 18. Strategy Definir uma família de algoritmos, encapsular cada um e fazê-los intercambiáveis. Professor Marcelo Pacote - @profmarcelopacote 26 W W W. D OMI NAND OTI .COM.B R Padrões de Projeto (GoF) 19. Command Encapsular requisição como objeto, para clientes parametrizarem diferentes requisições. 20. Interpreter Dada uma linguagem, definir uma representação para sua gramática por meio de um interpretador. 21. Decorator Anexar responsabilidades adicionais a um objeto dinamicamente. Professor Marcelo Pacote - @profmarcelopacote 27 W W W. D OMI NAND OTI .COM.B R Padrões de Projeto (GoF) 22. Iterator Prover uma maneira de acessar elementos de um objeto agregado sequencialmente sem expor sua representação interna. 23. Visitor Representar uma operação a ser realizada sobre os elementos de uma estrutura de objetos. Permite definir uma nova operação sem mudar as classes dos elementos nos quais opera. Professor Marcelo Pacote - @profmarcelopacote 28 W W W. D OMI NAND OTI .COM.B R Exercício [09] (TRT-14/2011/FCC/Analista) 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 a) Façade e Bridge. b) Adapter e Façade. c) Composite e Bridge. d) Façade e Composite. e) Bridge e Adapter. Professor Marcelo Pacote - @profmarcelopacote 29 W W W. D OMI NAND OTI .COM.B R Exercício [10] (TRT-24/2011/FCC) (1/2) - Adaptada Considere: I. Fornecer uma interface para criação de famílias de objetos relacionados ou dependentes, sem especificar suas classes concretas. II. Garantir a existência de apenas uma instância de uma classe, mantendo um ponto global de acesso ao seu objeto. Professor Marcelo Pacote - @profmarcelopacote 30 W W W. D OMI NAND OTI .COM.B R III. Possibilitar o armazenamento do estado interno de um objeto em um determinado momento, para que seja possível retorná-lo a este estado, caso necessário. I, II e III são, respectivamente, objetivos dos design patterns intitulados: a) Interpreter, Iterator e Memento. b) Command, Singleton e Iterator. c) Abstract Factory, Singleton e Memento. d) Iterator, Factory Method e Flyweight. e) Singleton, Flyweight e Command. Exercício [10] (TRT-24/2011/FCC) (2/2) - Adaptada Professor Marcelo Pacote - @profmarcelopacote 31 W W W. D OMI NAND OTI .COM.B R Exercício [11] (MEC/2009/FGV/Analista) (1/2) Em relação a padrões de projeto de software, assinale a afirmativa incorreta. a) Builder é um padrão utilizado quando se deseja separar a construção de um objeto complexo de sua representação de modo que o mesmo processo de construção possa criar diferentes representações. b) Factory Method é um padrão utilizado quando se deseja definir uma interface para criar um objeto e deixar as subclasses decidirem que classe instanciar. Professor Marcelo Pacote - @profmarcelopacote 32 W W W. D OMI NAND OTI .COM.B R Exercício [11] (MEC/2009/FGV/Analista) (2/2) c) Adapter é um padrão utilizado quando se deseja converter a interface de uma classe em outra interface, esperada pelos clientes. d) Singleton é um padrão utilizado quando se deseja compor objetos em estrutura de árvore para representarem hierarquias partes-todo. e) Proxy é um padrão também conhecidocomo surrogate utilizado quando se deseja fornecer um substituto ou marcador da localização de outro objeto para controlar o acesso ao mesmo. Professor Marcelo Pacote - @profmarcelopacote 33 W W W. D OMI NAND OTI .COM.B R Exercício [12] (BACEN/2010/CESGRANRIO) (1/2) Um arquiteto de software estuda que padrões de projeto são apropriados para o novo sistema de vendas de uma empresa. Ele deve considerar que o padrão a) Bridge separa a construção de um objeto complexo de sua representação, de modo que o mesmo processo de construção possa criar diferentes representações. b) Builder garante que uma classe seja instanciada somente uma vez, fornecendo também um ponto de acesso global. Professor Marcelo Pacote - @profmarcelopacote 34 W W W. D OMI NAND OTI .COM.B R Exercício [12] (BACEN/2010/CESGRANRIO) (2/2) c) Singleton separa uma abstração de sua implementação, de modo que os dois conceitos possam variar de modo independente. d) Chain of Responsibility evita o acoplamento entre o remetente de uma solicitação e seu destinatário, dando oportunidade para mais de um objeto tratar a solicitação. e) Template Method utiliza compartilhamento para suportar, eficientemente, grandes quantidades de objetos de granularidade fina. Professor Marcelo Pacote - @profmarcelopacote 35 W W W. D OMI NAND OTI .COM.B R Exercício [13] (EPE/2006/CESGRANRIO) (1/3) Considere os padrões que podem ser utilizados em um projeto de software e relacione os padrões com suas respectivas intenções primárias. Padrão: I - Bridge II – Builder III - Factory Method Intenção primária (P) Padrão estrutural cuja intenção é converter a interface de uma classe em outra interface, esperada pelos clientes, permitindo que classes com interfaces incompatíveis trabalhem em conjunto, o que, de outra forma, seria impossível. Professor Marcelo Pacote - @profmarcelopacote 36 W W W. D OMI NAND OTI .COM.B R Exercício [13] (EPE/2006/CESGRANRIO) (2/3) (Q) Padrão estrutural cuja intenção é desacoplar uma abstração da sua implementação, de modo que as duas possam variar independentemente. (R) Padrão de criação cuja intenção é separar a construção de um objeto complexo da sua representação de modo que o mesmo processo de construção possa criar diferentes representações. (S) Padrão de criação cuja intenção é definir uma interface para criar um objeto, mas deixando as subclasses decidirem que classe instanciar. Ele permite adiar a instanciação para subclasses. Professor Marcelo Pacote - @profmarcelopacote 37 W W W. D OMI NAND OTI .COM.B R Exercício [13] (EPE/2006/CESGRANRIO) (3/3) A relação correta é: a) I - P , II - Q , III - R b) I - P , II - Q , III - S c) I - Q , II - R , III - S d) I - Q , II - R , III - P e) I - Q , II - S , III - P Professor Marcelo Pacote - @profmarcelopacote 38 W W W. D OMI NAND OTI .COM.B R Exercício [14] (Serpro/2013/Cespe) ( ) O padrão de desenvolvimento comportamental denominado Iterator permite percorrer uma lista de objetos sem expor sua representação interna. ( ) O padrão de projeto de software que limita o número máximo de instâncias de uma classe a somente uma instância é denominado Singleton. ( ) O padrão de criação Prototype define um sistema sem funcionalidades inteligentes (acesso a banco de dados, por exemplo), podendo conter apenas funcionalidades gráficas. Além disso, é utilizado para fins de ilustração e melhor entendimento. Professor Marcelo Pacote - @profmarcelopacote 39 W W W. D OMI NAND OTI .COM.B R Detalhamento [1] - Singleton Intenção: “Garantir que uma classe só tenha uma única instância, e prover um ponto de acesso global a ela. [GoF]” Questões: Como controlar (contar) o número de instâncias da classe? Como armazenar a(s) instância(s)? Como controlar ou impedir a construção normal? Se for possível usar new e um construtor para criar o objeto, há como limitar instâncias? Como definir o acesso a um número limitado de instâncias (no caso, uma apenas)? Professor Marcelo Pacote - @profmarcelopacote 40 W W W. D OMI NAND OTI .COM.B R Singleton – Exemplo de código public class Singleton { private Singleton() {} private static Singleton instancia = null; public static Singleton getInstancia () { if (instancia == null) instancia = new Singleton(); return instancia; } ... } Professor Marcelo Pacote - @profmarcelopacote 41 Singleton - Singleton() + getInstancia() : Singleton - instancia : Singleton W W W. D OMI NAND OTI .COM.B R Singleton em Java Professor Marcelo Pacote - @profmarcelopacote 42 W W W. D OMI NAND OTI .COM.B R Exercício [15] (TJ-DF/2008/CESPE/Analista) ( ) O padrão de projeto orientado a objetos denominado singleton exprime o fenômeno recorrente na análise que é a existência de muitas aplicações nas quais há um objeto que é a única instância de sua classe. Professor Marcelo Pacote - @profmarcelopacote 43 W W W. D OMI NAND OTI .COM.B R Exercício [16] (BNDES/2009/CESGRANRIO) 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? Professor Marcelo Pacote - @profmarcelopacote 44 a) Iterator. b) Visitor. c) Bridge. d) Memento. e) Singleton. W W W. D OMI NAND OTI .COM.B R Exercício [17] (CGU/2012/Esaf/Desv) O padrão de projeto singleton é usado para restringir a) a instanciação de uma classe para objetos simples. b) a instanciação de uma classe para apenas um objeto. c) a quantidade de classes. d) as relações entre classes e objetos. e) classes de atributos complexos. Professor Marcelo Pacote - @profmarcelopacote 45 W W W. D OMI NAND OTI .COM.B R Detalhamento [2] - Adapter Problema: Como fazer com que duas classes com interfaces incompatíveis possam se falar? Professor Marcelo Pacote - @profmarcelopacote 46 W W W. D OMI NAND OTI .COM.B R Adapter Professor Marcelo Pacote - @profmarcelopacote 47 W W W. D OMI NAND OTI .COM.B R Adapter Professor Marcelo Pacote - @profmarcelopacote 48 W W W. D OMI NAND OTI .COM.B R Exercício [18] (SERPRO/2008/CESPE/Analista) ( ) Adapter é um padrão estrutural utilizado para compatibilizar interfaces de modo que elas possam interagir. Professor Marcelo Pacote - @profmarcelopacote 49 W W W. D OMI NAND OTI .COM.B R Detalhamento [3] - Factory Method "Definir uma interface para criar um objeto mas deixar que subclasses decidam que classe instanciar. Permite adiar a instanciação para subclasses." [GoF] Professor Marcelo Pacote - @profmarcelopacote 50 W W W. D OMI NAND OTI .COM.B R Factory Method – Exemplo de código (1/2) Professor Marcelo Pacote - @profmarcelopacote 51 W W W. D OMI NAND OTI .COM.B R Factory Method – Exemplo de código (2/2) Professor Marcelo Pacote - @profmarcelopacote 52 W W W. D OMI NAND OTI .COM.B R Exercício [19] (CGU/2012/Esaf/Desv) O padrão de projeto Factory provê uma classe de decisão que retorna a) um objeto de uma de suas subclasses, sem fixação de parâmetros. b) um atributo de uma de suas classes conexas, com base em um parâmetro reservado. c) um objeto de uma de suas subclasses, com base em um parâmetro recebido.d) um atributo de uma de suas classes conexas, sem fixação de parâmetros. e) um objeto de uma de suas subclasses, com parâmetros fatorados. Professor Marcelo Pacote - @profmarcelopacote 53 W W W. D OMI NAND OTI .COM.B R Detalhamento [4] - Façade "Oferecer 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." [GoF] Professor Marcelo Pacote - @profmarcelopacote 54 W W W. D OMI NAND OTI .COM.B R Façade Cliente2 Cliente1 Façade doSomething() Classe1 c1 = new Classe1(); Classe2 c2 = new Classe2(); Classe3 c3 = new Classe3(); c1.doStuff(c2); c3.setProp(c1.getProp2()); return c3.doStuff2(); Pacote1 Classe1 Pacote 2 Classe2 Pacote3 Classe3 Professor Marcelo Pacote - @profmarcelopacote 55 W W W. D OMI NAND OTI .COM.B R Façade Professor Marcelo Pacote - @profmarcelopacote 56 W W W. D OMI NAND OTI .COM.B R Exercício [20] (SERPRO/2008/CESPE/Analista) ( ) Expert é um padrão que apresenta uma interface para várias funcionalidades de uma API de maneira simples e fácil de usar. Professor Marcelo Pacote - @profmarcelopacote 57 W W W. D OMI NAND OTI .COM.B R Exercício [21] (INMETRO/2009/CESPE/Analista) ( ) Alguns dos usos típicos do padrão Façade são a unificação das várias interfaces de um sistema complexo; a construção de pontos de entrada para cada uma das múltiplas camadas de um sistema; a redução de dependências entre um cliente e múltiplas classes de implementação e o encapsulamento de todas as demais interfaces públicas de um sistema. Professor Marcelo Pacote - @profmarcelopacote 58 W W W. D OMI NAND OTI .COM.B R Exercício [22] (BNDES/2009/CESGRANRIO) O presidente de uma empresa determinou que fosse disponibilizado um sistema de vendas na Internet. No entanto, o software de controle de estoque que deve ser acessado pela aplicação de vendas é muito antigo e provê uma API (Application Programming Interface) de uso muito complicado. Para que os desenvolvedores possam acessar uma interface mais simples, o arquiteto do sistema pode determinar o uso do padrão de projeto Professor Marcelo Pacote - @profmarcelopacote 59 a) Prototype. b) Decorator c) Observer. d) Façade. e) Flyweight. W W W. D OMI NAND OTI .COM.B R Detalhamento [5] - Template Method "Definir o esqueleto de um algoritmo dentro de uma operação, deixando alguns passos a serem preenchidos pelas subclasses. Template Method permite que suas subclasses redefinam certos passos de um algoritmo sem mudar sua estrutura.“ [GoF] Professor Marcelo Pacote - @profmarcelopacote 60 W W W. D OMI NAND OTI .COM.B R Template Method O que é um Template Method? Um Template Method define um algoritmo em termos de operações abstratas que subclasses sobrepõem para oferecer comportamento concreto. Quando usar? Quando a estrutura fixa de um algoritmo puder ser definida pela superclasse deixando certas partes para serem preenchidos por implementações que podem variar. Professor Marcelo Pacote - @profmarcelopacote 61 W W W. D OMI NAND OTI .COM.B R Template Method Concreto1 # operacao1() # operacao2() … # operacaoN() Generico + TemplateMethod() # operacao1() # operacao2() … # operacaoN() Concreto2 # operacao1() # operacao2() … # operacaoN() Concreto3 # operacao1() # operacao2() … # operacaoN() ... operacao1(); ... operacao2(); ... operacaoN(); ... Professor Marcelo Pacote - @profmarcelopacote 62 W W W. D OMI NAND OTI .COM.B R Template Method public abstract class Template { public abstract String link(String texto, String url); public String transform(String texto) { return texto; } public String templateMethod() { String msg = "Endereço: " + link("Empresa", "http://www.empresa.com"); return transform(msg); } public class XMLData extends Template { public String link(String texto, String url) { return "<endereco xlink:href='"+url+"'>"+texto+"</endereco>"; } } public class HTMLData extends Template { public String link(String texto, String url) { return "<a href='"+url+"'>"+texto+"</a>"; } } Professor Marcelo Pacote - @profmarcelopacote 63 W W W. D OMI NAND OTI .COM.B R Exercício [23] (PETROBRAS/2010/CESGRANRIO) 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? Professor Marcelo Pacote - @profmarcelopacote 64 a) Singleton b) Decorator c) Interpreter d) Template Method e) Observer W W W. D OMI NAND OTI .COM.B R Detalhamento [6] - Strategy Problema: Como alterar a implementação interna de um objeto dinamicamente? Exemplos: Classes onde se tenham muitos comandos switch. Qualquer problema onde se tenha que tomar uma ação diferente dependendo de algum tipo ou valor. Professor Marcelo Pacote - @profmarcelopacote 65 W W W. D OMI NAND OTI .COM.B R Strategy Classe Ordenacao pode usar qualquer uma das estratégias, chamando o método ordena(). Professor Marcelo Pacote - @profmarcelopacote 66 W W W. D OMI NAND OTI .COM.B R Exercício [24] (Inmetro/2009/Cespe) ( ) Caso se deseje incorporar a um software um conjunto de algoritmos de uma mesma família, os quais são aplicáveis de forma intercambiável a um agregado de objetos similares, no qual o conjunto é passível de expansão em tempo de manutenção do software, então é mais recomendada a adoção do padrão Composite. Professor Marcelo Pacote - @profmarcelopacote 67 W W W. D OMI NAND OTI .COM.B R Exercício [25] (CHESF/2012/CESGRANRIO) Durante o desenvolvimento de um sistema para suporte a uma rede social, um desenvolvedor decidiu criar a facilidade de uma pessoa ter uma lista de amigos para poder enviar e-mails, postagens e/ou fotos. Essa lista pode conter um número indefinido de amigos ou de outras listas de amigos, criando uma estrutura recursiva. O padrão de projeto que descreve essa estrutura é a) Abstract factory b) Chain of responsibility c) Composite d) Iterator e) Module Professor Marcelo Pacote - @profmarcelopacote 68 W W W. D OMI NAND OTI .COM.B R [26] (PETRO/2012/CESGRANRIO/Eng. Software) (1/3) Deseja-se que uma aplicação possa manipular diferentes tipos de bancos de dados de modo transparente às classes que necessitam de serviços de acesso a dados. Inicialmente será necessário fornecer suporte a bancos de dados XML e SQL, entretanto novos tipos poderão ser futuramente adicionados. A solução proposta é a seguinte: 1. Uma classe abstrata (DB) será responsável por instanciar um objeto correspondente ao tipo de banco de dados desejado.Isso será feito através do método estático getDB(), que irá retornar um objeto de uma de suas subclasses concretas, de acordo com o parâmetro (tipo) passado. 2. O objeto criado no passo anterior irá instanciar conexões e consultas correspondentes ao tipo de DB criado; isto é, caso um DB XML tenha sido instanciado, apenas consultas XML e conexões XML serão instanciadas; caso um DB SQLtenhasido instanciado, apenas consultas SQL e conexões SQL serão instanciadas. Professor Marcelo Pacote - @profmarcelopacote 69 W W W. D OMI NAND OTI .COM.B R [26] (PETRO/2012/CESGRANRIO/Eng. Software) (2/3) Professor Marcelo Pacote - @profmarcelopacote 70 W W W. D OMI NAND OTI .COM.B R [26] (PETRO/2012/CESGRANRIO/Eng. Software (3/3) Qual padrão de projeto foi utilizado na solução proposta? a) Adapter b) Builder c) Composite d) Abstract Factory e) Chain of Responsibility Professor Marcelo Pacote - @profmarcelopacote 71 W W W. D OMI NAND OTI .COM.B R [27] (PETRO/2012/CESGRANRIO/Eng. Software) (1/3) Um sistema está organizado segundo uma arquitetura em camadas, no qual cada camada corresponde a um pacote Java. A camada de serviços, ServiceLayer, possui dezenas de classes, que colaboram entre si para fornecer os serviços necessários. Para facilitar o acesso aos serviços disponíveis, o pacote em questão disponibiliza algumas interfaces, que agrupam operações de acordo com a natureza do serviço. As classes que implementam esses serviços, entretanto, não são visíveis fora do pacote. Dessa forma, o pacote fornece uma classe pública, Services, onde existem métodos estáticos que retornam objetos que implementam os serviços disponíveis. O código Java a seguir exemplifica o que foi descrito. Professor Marcelo Pacote - @profmarcelopacote 72 W W W. D OMI NAND OTI .COM.B R [27] (PETRO/2012/CESGRANRIO/Eng. Software) (2/3) Professor Marcelo Pacote - @profmarcelopacote 73 W W W. D OMI NAND OTI .COM.B R [27] (PETRO/2012/CESGRANRIO/Eng. Software) (3/3) O trecho de código a seguir mostra como os serviços disponíveis são executados. Essa arquitetura usou variações de dois padrões de projeto conhecidos, que são: Professor Marcelo Pacote - @profmarcelopacote 74 a) Adapter e Façade b) Command e Façade c) Command e Singleton d) Façade e Factory Method e) Factory Method e Singleton W W W. D OMI NAND OTI .COM.B R Gabarito dos Exercícios [01] cc [02] d [03] certo [04] errado [05] e [06] e [07] c [08] b [09] a [10] c [11] d [12] d [13] c [14] cce [15] certo [16] e [17] b [18] certo [19] c [20] errado [21] errado Professor Marcelo Pacote - @profmarcelopacote 75 [22] d [23] d [24] errado [25] c [26] d [27] d W W W. D OMI NAND OTI .COM.B R WWW.DOMINANDOTI .COM.BR Padrões de Projeto – Java EE 76 Professor Marcelo Pacote – @profmarcelopacote W W W. D OMI NAND OTI .COM.B R Introdução Camada de Apresentação Intercepting Filter Front Controller Context Object Application Controller View Helper Composite View Service to Worker Dispatcher View Camada de Negócio Business Delegate Service Locator Session Façade Application Service Business Object Composite Entity Transfer Object Value List Handler Transfer Object Assembler Camada de Integração Data Access Object Service Activator Domain Store Web Service Broker Professor Marcelo Pacote - @profmarcelopacote 77 W W W. D OMI NAND OTI .COM.B R Classificação - Memorizar! Professor Marcelo Pacote - @profmarcelopacote 78 W W W. D OMI NAND OTI .COM.B R Exercício [1] (MEC/2009/FGV/Arquiteto) (1/2) Assinale a alternativa que apresente apenas padrões de projeto utilizados na camada de apresentação no desenvolvimento de aplicações J2EE. a) Composite View, Context Object, Data Access Object,Composite Entity. b) Service Locator, Business Delegate, Business Object,Composite Entity. c) Application Controller, Intercepting Filter, Context Object,Composite View. Professor Marcelo Pacote - @profmarcelopacote 79 W W W. D OMI NAND OTI .COM.B R Exercício [1] (MEC/2009/FGV/Arquiteto) (2/2) d) Intercepting Filter, Business Delegate, Service Locator, Data Access Object. e) Application Controller, Composite View, Service Locator ,Business Delegate. Professor Marcelo Pacote - @profmarcelopacote 80 W W W. D OMI NAND OTI .COM.B R Exercício [2] (MEC/2009/FGV/Desenvolvedor) (1/2) Assinale a alternativa que apresenta apenas padrões de projeto utilizados na camada de negócios no desenvolvimento de aplicações J2EE. a) Application Controller, Intercepting Filter, Context Object e Domain Store. b) Intercepting Filter, Business Delegate, Service Locator e Data Access Object. c) Composite View, Intercepting Filter, Data Access Object, Service Activator e Business Object. Professor Marcelo Pacote - @profmarcelopacote 81 W W W. D OMI NAND OTI .COM.B R Exercício [2] (MEC/2009/FGV/Desenvolvedor) (2/2) d) Service Locator, Business Delegate, Business Object, Composite Entity e Value List Handler. e) Composite View, Context Object, Data Access Object e Composite Entity. Professor Marcelo Pacote - @profmarcelopacote 82 W W W. D OMI NAND OTI .COM.B R Exercício [3] (MEC/2008/FGV/Arquiteto) J2EE (Java 2 Enterprise Edition), ou simplesmente JEE, é um plataforma java para desenvolvimento e execução de aplicações em nível corporativo. No desenvolvimento de aplicações J2EE é comum o uso de vários padrões de projeto. Assinale a alternativa que não apresente padrões de projeto frequentemente utilizados na camada de negócios J2EE. Professor Marcelo Pacote - @profmarcelopacote 83 a) Context Object. b) Transfer Object. c) Service Locator. d) Session Façade. e) Business Delegate. W W W. D OMI NAND OTI .COM.B R Exercício [4] (MEC/2008/FGV/Desenv.) J2EE (Java 2 Enterprise Edition) é uma plataforma Java para desenvolvimento e execução de aplicações em nível corporativo. No desenvolvimento de aplicações J2EE é comum o uso de vários padrões de projeto. Assinale a alternativa que não apresente os padrões de projeto frequentemente utilizados na camada de apresentação J2EE. Professor Marcelo Pacote - @profmarcelopacote 84 a) Application Controller. b) Intercepting Filter c) Composite View. d) Service Locator. e) Context Object. W W W. D OMI NAND OTI .COM.B R Padrões Java EE – Interception Filter Problema Interceptar e manipular uma requisição, antes e depois de seu processamento Solução Encadear filtros (fracamente acoplados) para pré- processar requisições ou pós-processar respostas O processamento é genérico é não invasivo Aplicabilidade: Infraestrutura de logging e controle transacional Professor Marcelo Pacote - @profmarcelopacote 85 W W W. D OMI NAND OTI .COM.B R Padrões Java EE – Front Controller Problema Criar ponto de acesso centralizado para tratamento de requisições Solução Implementar JSP/Servlet como ponto de contato inicial para tratar um conjunto de requisições Pode existir mais de um controlador Aplicabilidade: Aparece encapsulado por frameworks de mercado como Struts e JSF. Professor Marcelo Pacote - @profmarcelopacote 86 W W W. D OMI NAND OTI .COM.B R Padrões Java EE – Context Object Problema Evitar o uso de informações de sistema específicas de um protocolo fora de seu contexto Solução Implementar Context Object para encapsular informações de estado de forma independente de protocolo, para que possa ser compartilhada pela aplicação. Aplicabilidade: Disponibilizar informações como o usuário logado em uma aplicação, seu idioma, mensagens de erro sem depender, por exemplo, de interação com a classe HttpSession. Professor Marcelo Pacote- @profmarcelopacote 87 W W W. D OMI NAND OTI .COM.B R Padrões Java EE – Composite View Problema Construir a camada de apresentação a partir da combinação de componentes modulares e atômicos, gerenciando o conteúdo e o layout de forma independente. Solução Utilizar Composite Views compostas dinamicamente de múltiplas subviews atômicas. Aplicabilidade: Composição de páginas a partir de fragmentos. Os frameworks Tiles, Facelets e Sitemesh implementam o padrão Professor Marcelo Pacote - @profmarcelopacote 88 W W W. D OMI NAND OTI .COM.B R Padrões Java EE – Business Delegate Problema Isolar a aplicação cliente da complexidade da comunicação remota com componentes de negócio Solução Encapsular o acesso a um serviço de negócio, escondendo os detalhes de implementação. Acesso remoto é um objeto é feito da mesma forma que um objeto local. Aplicabilidade: Atuar como proxies para simplificar o acesso a componentes EJB. Professor Marcelo Pacote - @profmarcelopacote 89 W W W. D OMI NAND OTI .COM.B R Padrões Java EE – Service Locator Problema Deseja-se localizar de forma transparente componentes e serviços de negócio de maneira uniforme. Solução Utilizar um Service Locator para implementar e encapsular a lógica de localização do componente ou serviço de negócio. Aplicabilidade: Simplificar a localização de recursos via JNDI. Professor Marcelo Pacote - @profmarcelopacote 90 W W W. D OMI NAND OTI .COM.B R Padrões Java EE – Session Façade Problema Deseja-se expor componentes e serviços de negócio para clientes remotos Solução Encapsular componentes da camada de negócio e expor um serviço de alta granularidade para clientes remotos. Aplicabilidade: Prover componentes EJB que funcionem como serviços, coordenando a chamada a outros componentes EJB. Professor Marcelo Pacote - @profmarcelopacote 91 W W W. D OMI NAND OTI .COM.B R Padrões Java EE – Transfer Object Problema Deseja-se transmitir múltiplos elementos de dados entre camadas. Solução Usar um Transfer Object para carregas múltiplos elementos de dados entre camadas. Aplicabilidade: Criar POJOs para evitar chamadas remotas a Entity beans, visando melhorar o desempenho. Professor Marcelo Pacote - @profmarcelopacote 92 W W W. D OMI NAND OTI .COM.B R Padrões Java EE – Data Acess Object Problema Deseja-se encapsular acesso e manipulação de dados em uma camada separada. Solução Utilizar um Data Access Object para abstrair e encapsular todo o acesso ao armazenamento persistente. O Data Access Object gerencia a conexão com a fonte de dados para obter e armazenar dados. Aplicabilidade: Trata-se de um dos padrões Java EE mais utilizados. Uma aplicação comum é o encapsulamento de consultas JDBC. Professor Marcelo Pacote - @profmarcelopacote 93 W W W. D OMI NAND OTI .COM.B R Exercício [05] (STF/2008/CESPE) (1/2) Professor Marcelo Pacote - @profmarcelopacote 94 W W W. D OMI NAND OTI .COM.B R Exercício [05] (STF/2008/CESPE) (2/2) A figura anterior, adaptada de java.sun.com, ilustra a arquitetura de uma aplicação web desenvolvida na plataforma J2EE, tendo sido alguns de seus módulos nomeados de A até I. Considere que uma aplicação com a arquitetura mostrada tenha sido instalada em um servidor de aplicação JBoss 4.0 ou superior, por meio do deploy de um arquivo com nome aplicacao.war, e se encontre em pleno funcionamento. Com base nessas informações, julgue o item ( ) Considere que, no cenário da aplicação mostrada, o framework Hibernate, versão 3.5, esteja em pleno uso. Nesse caso, considerando-se a prática recomendada no desenvolvimento de aplicações web, é correto afirmar que os módulos G e I não deverão importar classes do package org.hibernate, mas que o módulo H deverá importar classes e interfaces do package org.hibernate e, possivelmente, do package java.sql. Professor Marcelo Pacote - @profmarcelopacote 95 W W W. D OMI NAND OTI .COM.B R Exercício [06] (TCU/2008/CESPE) (1/2) - adaptada Julgue os itens a seguir, relativos aos conceitos da arquitetura J2EE. ( ) Considere que, durante o desenvolvimento de um CMS (Content Management System), tenha sido necessário controlar o acesso dos usuários a diversos portlets, de forma que menos da metade deles ficasse acessível apenas a usuários devidamente autenticados. Nesse caso, para se implementar um componente de controle do acesso, seria mais adequada, dos pontos de vista técnico, de flexibilidade e de facilidade de reuso e composição, a adoção do pattern intercepting Filter que a do pattern Front Controller. Professor Marcelo Pacote - @profmarcelopacote 96 W W W. D OMI NAND OTI .COM.B R Exercício [06] (TCU/2008/CESPE) (2/2) - adaptada ( ) Considere que, na arquitetura de um CMS, fosse necessária a criação de várias janelas de portlets que apresentam fragmentos agregados de forma hierárquica em uma única página. Nessa situação, o padrão que melhor representa uma solução para essa arquitetura é o Composite Entity. ( ) Considere que, na arquitetura de CMS, seja necessária a implantação de um sistema de alta disponibilidade, baseado em clusters de servidores de aplicação onde ocorre balanceamento de carga na camada de negócios. Nessa situação, a lógica do sistema de balanceamento de carga, se implementada dentro do próprio CMS, estaria mais bem localizada dentro do elemento que adere ao padrão Business Delegate. Professor Marcelo Pacote - @profmarcelopacote 97 W W W. D OMI NAND OTI .COM.B R Exercício [07] (CHESF/2012/CESGRANRIO) Em uma aplicação Java EE, na substituição de uma solução que usa o Transparent Façade por outra que usa o Session Façade, os clientes devem ser refatorados para interagir com objetos Data Transfer Object eventualmente criados durante essa substituição. PORQUE Em uma aplicação Java EE, o uso do Transparent Façade em vez do Session Façade aumenta a granularidade das funções definidas na fachada resultante. Analisando-se as afirmações acima, conclui-se que a) as duas afirmações são verdadeiras, e a segunda justifica a primeira. b) as duas afirmações são verdadeiras, e a segunda não justifica a primeira. c) a primeira afirmação é verdadeira, e a segunda é falsa. d) a primeira afirmação é falsa, e a segunda é verdadeira. e) as duas afirmações são falsas. Professor Marcelo Pacote - @profmarcelopacote 98 W W W. D OMI NAND OTI .COM.B R Gabarito dos Exercícios [1] c [2] d [3] a [4] d [5] c [6] cee [7] c Professor Marcelo Pacote - @profmarcelopacote 99 W W W. D OMI NAND OTI .COM.B R WWW.DOMINANDOTI .COM.BR ANEXO I Exercícios complementares – FGV Professor Marcelo Pacote – @profmarcelopacote W W W. D OMI NAND OTI .COM.B R Exercício [1] (MEC/2009/FGV/Arquiteto) (1/2) Em relação a padrões de projeto de software, assinale a afirmativa incorreta. a) Builder é um padrão utilizado quando se deseja separar a construção de um objeto complexo de sua representação de modo que o mesmo processo de construção possa criar diferentes representações. b) Factory Method é um padrão utilizado quando se deseja definir uma interface para criar um objeto e deixar as subclasses decidirem que classe instanciar. Professor Marcelo Pacote - @profmarcelopacote 101 W W W. D OMI NAND OTI .COM.B R Exercício [1] (MEC/2009/FGV/Arquiteto) (2/2) c) Adapter é um padrão utilizado quando se deseja converter a interface de uma classe em outra interface, esperada pelos clientes. d) Singleton é um padrão utilizado quando se deseja comporobjetos em estrutura de árvore para representarem hierarquias partes-todo. e) Proxy é um padrão também conhecido como surrogate utilizado quando se deseja fornecer um substituto ou marcador da localização de outro objeto para controlar o acesso ao mesmo. Professor Marcelo Pacote - @profmarcelopacote 102 W W W. D OMI NAND OTI .COM.B R Exercício [2] (MEC/2008/FGV/An. Sistemas) (1/2) 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. Professor Marcelo Pacote - @profmarcelopacote 103 W W W. D OMI NAND OTI .COM.B R Exercício [2] (MEC/2008/FGV/An. Sistemas) (2/2) Assinale a alternativa que apresenta apenas padrões de projeto comportamentais. a) Prototype, Abstract Factory e Builder. b) Singleton, Composite e Interpreter. c) Mediator, Interpreter e Command. d) Composite, Decorato e Proxy. e) Proxy, Builder e Mediator. Professor Marcelo Pacote - @profmarcelopacote 104 W W W. D OMI NAND OTI .COM.B R Exercício [3] (MEC/2008/FGV/An. Sistemas) (1/2) Em relação aos padrões de projeto de software assinale a alternativa correta. a) Singleton é um padrão utilizado quando se deseja separar a construção de um objeto complexo de sua representação de modo que o mesmo processo de construção possa criar diferentes representações. b) Builder é um padrão utilizado quando se deseja especificar os tipos de objetos a serem criados usando uma instância protótipo e criar novos objetos pela cópia desse protótipo. Professor Marcelo Pacote - @profmarcelopacote 105 W W W. D OMI NAND OTI .COM.B R Exercício [3] (MEC/2008/FGV/An. Sistemas) (1/2) c) Adapter é um padrão utilizado quando se deseja desacoplar uma abstração de sua implementação, de modo que as duas possam variar independentemente. d) Factory Method é um padrão utilizado quando se deseja definir uma interface para criar um objeto e deixar as subclasses decidirem que classe instanciar. e) Proxy é um padrão utilizado quando se quer garantir que uma classe tenha somente uma instância e fornecer um ponto global de acesso a mesma. Professor Marcelo Pacote - @profmarcelopacote 106 W W W. D OMI NAND OTI .COM.B R Exercício [4] (MEC/2008/FGV/Arquiteto) (1/2) 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. Professor Marcelo Pacote - @profmarcelopacote 107 W W W. D OMI NAND OTI .COM.B R Exercício [4] (MEC/2008/FGV/Arquiteto) (2/2) Assinale a alternativa em que todos os padrões listados são padrões de projeto criação: a) Proxy, Builder, Adapter, Mediator, Interpreter. b) Mediator, Interpreter, Iterator, Command, State. c) Adapter, Bridge, Composite, Decorator, Proxy. d) Bridge, Composite, Mediator, Interpreter, Builder. e) Singleton, Prototype, Abstract Factory, Builder, Factory Method. Professor Marcelo Pacote - @profmarcelopacote 108 W W W. D OMI NAND OTI .COM.B R Exercício [5] (MEC/2008/FGV/Arquiteto) (1/2) A respeito do padrão de projeto de software Decorator, também conhecido como Wrapper, assinale a alternativa correta: a) É um padrão utilizado quando se deseja agregar, dinamicamente, responsabilidades adicionais a um objeto. b) É um padrão utilizado quando se deseja fornecer uma interface unificada para um conjunto de interfaces em um subsistema. Professor Marcelo Pacote - @profmarcelopacote 109 W W W. D OMI NAND OTI .COM.B R Exercício [5] (MEC/2008/FGV/Arquiteto) (2/2) c) É um padrão utilizado quando se deseja converter a interface de uma classe em outra interface, esperada pelos clientes. d) É um padrão utilizado quando se deseja compor objetos em estrutura de árvore para representarem hierarquias partes-todo. e) É um padrão utilizado quando se deseja desacoplar uma abstração de sua implementação, de modo que as duas possam variar independentemente. Professor Marcelo Pacote - @profmarcelopacote 110 W W W. D OMI NAND OTI .COM.B R Exercício [6] (MEC/2008/FGV/Desenv.) Assinale a alternativa que indique apenas padrões estruturais: a) Adapter, Bridge, Composite, Decorator e Proxy. b) Proxy, Builder, Adapter, Mediator e Interpreter. c) Mediator, Interpreter, Iterator, Command e State. d) Bridge, Composite, Mediator, Interpreter e Builder. e) Singleton, Prototype, Abstract Factory, Builder e Factory Method. Professor Marcelo Pacote - @profmarcelopacote 111 W W W. D OMI NAND OTI .COM.B R Exercício [7] (MEC/2008/FGV/Desenv.) (1/2) A respeito do padrão de projeto de software Bridge, também conhecido como Handle ou Body, assinale a alternativa correta. a) É um padrão utilizado quando se quer garantir que uma classe tenha somente uma instância e fornecer um ponto global de acesso à mesma. b) É um padrão utilizado quando se deseja definir uma interface para criar um objeto e deixar as subclasses decidirem que classe instanciar. Professor Marcelo Pacote - @profmarcelopacote 112 W W W. D OMI NAND OTI .COM.B R Exercício [7] (MEC/2008/FGV/Desenv.) (2/2) c) É um padrão utilizado quando se deseja desacoplar uma abstração de sua implementação de modo que as duas possam variar independentemente. d) É um padrão utilizado quando se deseja especificar os tipos de objetos a serem criados usando uma instância protótipo e criar novos objetos pela cópia desse protótipo. e) É um padrão utilizado quando se deseja separar a construção de um objeto complexo de sua representação de modo que o mesmo processo de construção possa criar diferentes representações. Professor Marcelo Pacote - @profmarcelopacote 113 W W W. D OMI NAND OTI .COM.B R Exercício [8] (MEC/2008/FGV/Desenv.) A arquitetura em camadas do modelo MVC (Model-View- Controller) é amplamente utilizada no desenvolvimento de aplicações web Java/J2EE. As opções mais frequentemente utilizadas na camada de visão (view) do modelo MVC, são: a) JPA, JMS, Web Services e Facelets. b) JSP, JSTL, Facelets e Applets. c) JPA, JTA, JMS e Servlets. d) JSF, JMS, JSTL, JDBC. e) JSP, EJBs, JTA, JPA. Professor Marcelo Pacote - @profmarcelopacote 114 W W W. D OMI NAND OTI .COM.B R Exercício [9] (MEC/2008/FGV/Arquiteto) (1/2) A figura a seguir demonstra a arquitetura em camadas do modelo MVC (Modelo, Visualização e Controle) que fornece uma maneira de dividir a funcionalidade envolvida na manutenção e apresentação dos dados de uma aplicação. Usando o padrão MVC fica fácil mapear esses conceitos no domínio de aplicações web multicamadas. Professor Marcelo Pacote - @profmarcelopacote 115 W W W. D OMI NAND OTI .COM.B R Exercício [9] (MEC/2008/FGV/Arquiteto) (2/2) O Modelo MVC apresenta várias vantagens, à exceção de uma. Assinale-a. a) Torna a aplicação escalável. b) Gerencia múltiplos visualizadores usando o mesmo modelo. c) Requer uma quantidade maior de tempo para analisar e modelar os sistemas. d) É possível ter desenvolvimento em paralelo para o modelo, visualizador e controle. e) É muito simples incluir novos clientes, apenas incluindo seus visualizadores e controles. Professor Marcelo Pacote - @profmarcelopacote 116 W W W. D OMI NAND OTI.COM.B R Gabarito Professor Marcelo Pacote - @profmarcelopacote 117 [1] d [2] c [3] d [4] e [5] a [6] a [7] c [8] b [9] c W W W. D OMI NAND OTI .COM.B R WWW.DOMINANDOTI .COM.BR ANEXO II Exercícios complementares – Cespe Professor Marcelo Pacote – @profmarcelopacote W W W. D OMI NAND OTI .COM.B R Exercício [1] (TCU/2009/CESPE/ANALISTA) ( ) Caso seja verificado no desenvolvimento de um sistema forte acoplamento entre as classes, recomenda-se o uso do padrão de comportamento Factory Method, que evita o acoplamento do remetente de uma solicitação ao seu receptor, dando a mais de um objeto a oportunidade de tratar uma solicitação, mesmo nos casos em que o conjunto de objetos não seja conhecido a priori ou seja definido dinamicamente. 119 Professor Marcelo Pacote - @profmarcelopacote 119 W W W. D OMI NAND OTI .COM.B R Exercício [2] (TCU/2009/CESPE/ANALISTA) ( ) No desenvolvimento de um sistema estruturado em subsistemas para facilitar o acesso e minimizar a comunicação e dependências entre os subsistemas, o padrão de criação Factory Method, que fornece uma interface para a criação de famílias de objetos relacionados ou dependentes sem especificar suas classes concretas, é mais indicado que o padrão de criação Prototype. 120 Professor Marcelo Pacote - @profmarcelopacote 120 W W W. D OMI NAND OTI .COM.B R Exercício [3] (TCU/2009/CESPE/ANALISTA) ( ) Se, no desenvolvimento de uma aplicação que leia documentos do tipo txt e seja capaz de converter o documento em vários formatos distintos, houver a necessidade de facilitar acréscimos de novos tipos de conversão, será mais indicado o uso do padrão de estrutura Adapter que o uso do padrão de estrutura Bridge, pois o padrão Adapter separa a construção de um objeto complexo de sua representação para criar representações diferentes com o mesmo processo. 121 Professor Marcelo Pacote - @profmarcelopacote 121 W W W. D OMI NAND OTI .COM.B R Exercício [04] (STJ/2008/CESPE/Analista) ( ) Os padrões de projeto podem ser usados no projeto orientado a objetos para apoiar o reuso de software. Esses padrões freqüentemente empregam a herança e o polimorfismo para prover generalidade. Abstract factory, strategy e template method são padrões de projeto que podem ser empregados nos frameworks orientados a objetos para facilitar a adaptação dos frameworks. Professor Marcelo Pacote - @profmarcelopacote 122 W W W. D OMI NAND OTI .COM.B R Gabarito [01] errado [02] errado [03] errado [04] certo Professor Marcelo Pacote - @profmarcelopacote 123 W W W. D OMI NAND OTI .COM.B R WWW.DOMINANDOTI .COM.BR ANEXO III Exercícios complementares – Cesgranrio Professor Marcelo Pacote – @profmarcelopacote W W W. D OMI NAND OTI .COM.B R Um Padrão de Projeto de Software ou Padrão de Desenho de Software, também muito conhecido pelo termo original em inglês Design Pattern, descreve uma solução geral reutilizável para um problema recorrente no desenvolvimento de sistemas de software. A descrição de um padrão de projeto deve conter a) o código final, em uma linguagem de programação, da solução apresentada. b) a descrição de uma aplicação completa e concreta que contenha o padrão sendo definido. [1] (LIQUIGAS/2012/CESGRANRIO/Desv.) (1/2) Professor Marcelo Pacote - @profmarcelopacote 125 W W W. D OMI NAND OTI .COM.B R c) a indicação de uma linguagem de programação orientada a objetos que contenha os conceitos que ofereçam suporte direto à implementação dos padrões descritos e sua utilização na solução apresentada. d) a descrição do problema utilizando uma linguagem formal. e) um nome, a descrição do problema, a solução utilizando alguma notação ou linguagem própria de projeto, em quais situações a solução é aplicável, e as consequências do uso da solução apresentada. [1] (LIQUIGAS/2012/CESGRANRIO/Desv.) (2/2) Professor Marcelo Pacote - @profmarcelopacote 126 W W W. D OMI NAND OTI .COM.B R Relacione os padrões de projeto às suas indicações de uso. I - Ponte II - Observador III – Decorador As associações corretas são: a) I - P , II - Q , III - R b) I - Q , II - P , III - S c) I - Q , II - R , III - P d) I - R , II - P , III - S e) I - S , II - R , III - Q [2] (TRANSPETRO/2011/CESGRANRIO/An. Desv ) P - Mostra como adicionar responsabilidades aos objetos dinamicamente. Q - Separa a abstração de um objeto de sua implementação. R - Define e mantém dependência entre objetos. S - Define um objeto que encapsula como um conjunto de objetos que interagem. Professor Marcelo Pacote - @profmarcelopacote 127 W W W. D OMI NAND OTI .COM.B R Um programador deve criar um novo projeto que envolva vários tipos de produtos com as mesmas funções, mas com peculiaridades diferentes. Por exemplo, o produto do tipo gold realiza as mesmas funções que o produto standard, mas, a cada uma delas, armazena a última configuração para fornecer uma memória para o usuário. O padrão apropriado para representar as classes deste projeto é o a) Facade, pois ele pode juntar vários comportamentos em um só, criando uma visão simplificada do sistema. b) Strategy, pois ele permite criar uma única interface com várias implementações que diferem apenas em seu comportamento. c) Proxy, pois este permite criar uma representação menos custosa de cada um dos objetos do sistema. d) Iterator, pois este permite visitar todos os objetos do sistema sem se preocupar com a classe real de cada um deles. e) Singleton, pois este garante a existência de uma única instância de produto e evita a confusão entre as classes. [3] (PETRO/2010/CESGRANRIO/Eng. Software) Professor Marcelo Pacote - @profmarcelopacote 128 W W W. D OMI NAND OTI .COM.B R Um arquiteto de software estuda que padrões de projeto são apropriados para o novo sistema de vendas de uma empresa. Ele deve considerar que o padrão a) Bridge separa a construção de um objeto complexo de sua representação, de modo que o mesmo processo de construção possa criar diferentes representações. b) Builder garante que uma classe seja instanciada somente uma vez, fornecendo também um ponto de acesso global. c) Singleton separa uma abstração de sua implementação, de modo que os dois conceitos possam variar de modo independente. d) Chain of Responsibility evita o acoplamento entre o remetente de uma solicitação e seu destinatário, dando oportunidade para mais de um objeto tratar a solicitação. e) Template Method utiliza compartilhamento para suportar, eficientemente, grandes quantidades de objetos de granularidade fina. [4] (BACEN/2010/CESGRANRIO/Desv.) Professor Marcelo Pacote - @profmarcelopacote 129 W W W. D OMI NAND OTI .COM.B R Um padrão de projeto do catálogo GoF (Gang of Four) é o Template Method, cuja finalidade é a) definir uma família de algoritmos, encapsular cada um e fazê-los intercambiáveis. b) desacoplar uma abstração de sua implementação, de tal forma que as duas possam variar independentemente. c) encapsular uma requisição para parametrizar clientes com diferentes requisições e filas e dar suporte a ações reversíveis. d) oferecer uma interface única de nível mais elevado para um conjunto de interfaces de um subsistema. e) permitir a definição da parte invariante de um algoritmo separadamente de sua parte variante. [5] (LIQUIGAS/2012/CESGRANRIO/Infra.) Professor Marcelo Pacote - @profmarcelopacote 130 W W W. D OMI NAND OTI .COM.B R Em uma aplicação para gerenciamento de currículos profissionais, deve haver uma funcionalidade para pesquisa (busca) por informaçõespreviamente registradas. Essa funcionalidade deve ser apresentada aos usuários como um formulário da interface gráfica da aplicação cuja composição deve ser diferente em cada uma das seguintes situações. Na primeira, o formulário deve apresentar ao usuário campos que permitam realizar buscas por empresas que oferecem vagas de emprego. Na segunda situação, o formulário deve apresentar campos para permitir aos usuários a realização de buscas por currículos de candidatos a vagas de emprego. [6] (TRANSPETRO/2011/CESGRANRIO/An. Desv.) (1/2) Professor Marcelo Pacote - @profmarcelopacote 131 W W W. D OMI NAND OTI .COM.B R O engenheiro de software, encarregado da implementação dessa funcionalidade, decidiu usar um padrão de projeto do catálogo GoF (Gang of Four). Esse padrão foi escolhido porque permite construir produtos com diferentes representações de tal forma que o mesmo processo de construção possa ser usado para criar diferentes produtos. No caso da funcionalidade descrita acima, os diferentes produtos a serem criados são as duas variantes do formulário de busca. Dentre os listados abaixo, qual foi o padrão escolhido pelo engenheiro de software? [6] (TRANSPETRO/2011/CESGRANRIO/An. Desv.) (2/2) a) Abstract Factory b) Bridge c) Builder d) Mediator e) Prototype Professor Marcelo Pacote - @profmarcelopacote 132 W W W. D OMI NAND OTI .COM.B R Uma aplicação orientada a objetos deve ser construída para ler arquivos em formato RTF (Rich Text Format) e permitir aos seus usuários a exportação do conteúdo desse arquivo para diferentes formatos de saída (PDF, DOC, ASCII, HTML, etc). Uma restrição é que a aplicação deve ser construída de tal forma que os passos do processo de construção de cada arquivo de saída sejam separados das diferentes representações dos formatos de saída, ou seja, das diferentes lógicas de exportação para cada um dos formatos de saída. Dessa forma, diferentes implementações desses passos poderiam gerar diferentes representações (formatos de saída). [7] (BR-Dist/2012/CESGRANRIO/Java-Web) (1/2) Professor Marcelo Pacote - @profmarcelopacote 133 W W W. D OMI NAND OTI .COM.B R Dentre os padrões de projeto do catálogo GoF (Gang of Four) listados abaixo, qual deve ser usado na implementação dessa aplicação, de tal forma a contemplar a restrição descrita? a) Abstract Factory b) Builder c) Command d) Composite e) Singleton [7] (BR-Dist/2012/CESGRANRIO/Java-Web) (2/2) Professor Marcelo Pacote - @profmarcelopacote 134 W W W. D OMI NAND OTI .COM.B R Uma API para desenvolvimento de aplicações distribuídas deve dar aos programadores que a utilizam a possibilidade de invocar métodos definidos em objetos localizados em uma máquina remota, como se esses métodos estivessem definidos em um objeto local. Com a intenção de resolver esse problema, essa API pode usar, em sua implementação, uma variante do padrão estrutural GoF (Gang of Four) chamado [8] (BR-Dist/2012/CESGRANRIO/Java-Web) a) Decorator b) Bridge c) Fly Weight d) Proxy e) Interpreter Professor Marcelo Pacote - @profmarcelopacote 135 W W W. D OMI NAND OTI .COM.B R [9] (PETRO/2010/CESGRANRIO/Eng. Software) 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? Professor Marcelo Pacote - @profmarcelopacote 136 a) Singleton. b) Decorator. c)Interpreter. d) Template Method. e) Observer. W W W. D OMI NAND OTI .COM.B R O Controlador Frontal (Front Controller) é um dos padrões do catálogo J2EE. Esse padrão propicia ao desenvolvedor que o utiliza na construção de uma aplicação Web, em camadas, a) organizar a camada de integração. b) implementar o tratamento de todas as requisições que chegam ao lado servidor da aplicação, provenientes do cliente. c) implementar o componente View da tríade MVC (Model-View-Controller). d) implementar o controle de acesso dentro de cada caso de uso da aplicação Web. e) expor à camada de negócio as estruturas de dados da camada de apresentação. [10] (PETRO/2010/CESGRANRIO/Eng. Software) Professor Marcelo Pacote - @profmarcelopacote 137 W W W. D OMI NAND OTI .COM.B R Em uma aplicação Java EE, na substituição de uma solução que usa o Transparent Façade por outra que usa o Session Façade, os clientes devem ser refatorados para interagir com objetos Data Transfer Object eventualmente criados durante essa substituição. PORQUE Em uma aplicação Java EE, o uso do Transparent Façade em vez do Session Façade aumenta a granularidade das funções definidas na fachada resultante. Analisando-se as afirmações acima, conclui-se que a) as duas afirmações são verdadeiras, e a segunda justifica a primeira. b) as duas afirmações são verdadeiras, e a segunda não justifica a primeira. c) a primeira afirmação é verdadeira, e a segunda é falsa. d) a primeira afirmação é falsa, e a segunda é verdadeira. e) as duas afirmações são falsas. [11] (CHESF/2012/CESGRANRIO/Analista) Professor Marcelo Pacote - @profmarcelopacote 138 W W W. D OMI NAND OTI .COM.B R Exercício [12] (PETR/2006/CESGRANRIO) (1/3) Christopher Alexander afirma: "cada padrão descreve um problema no nosso ambiente e o cerne da sua solução, de tal forma que você possa usar essa solução mais de um milhão de vezes, sem nunca fazê-lo da mesma maneira". Muito embora Alexander estivesse falando acerca de padrões em construções e cidades, o que ele diz é verdadeiro em relação aos padrões de projeto orientados a objeto. Neste caso, as soluções são expressas em termos de objetos e interfaces em vez de paredes e portas, mas no cerne de ambos os tipos de padrões está a solução para um problema num determinado contexto. Quanto à indicação para o uso dos padrões de projeto é FALSO afirmar que o padrão: 139 Professor Marcelo Pacote - @profmarcelopacote 139 W W W. D OMI NAND OTI .COM.B R Exercício [12] (PETR/2006/CESGRANRIO) (2/3) a) Abstract Factory é indicado quando: um sistema deve ser independente de como seus produtos são criados, compostos ou representados; um sistema deve ser configurado como um produto de uma família de múltiplos produtos; uma família de objetos-produto for projetada para ser usada em conjunto, e você necessita garantir esta restrição; você quer fornecer uma biblioteca de classes de produtos e quer revelar somente suas interfaces, não suas implementações. b) Builder é indicado quando: uma classe não pode antecipar a classe de objetos que deve criar; uma classe quer que suas subclasses especifiquem os objetos que criam; classes delegam responsabilidade para uma dentre várias subclasses auxiliares, e você quer localizar o conhecimento de qual subclasse auxiliar que é a delegada. 140 Professor Marcelo Pacote - @profmarcelopacote 140 W W W. D OMI NAND OTI .COM.B R Exercício [12] (PETR/2006/CESGRANRIO) (3/3) c) Mediator é indicado quando: um conjunto de objetos se comunica de maneiras bem definidas, porém complexas; a reutilização de um objeto é difícil porque ele referencia e se comunica com muitos outros objetos; um comportamento que está distribuído entre várias classes deveria ser customizável, ou adaptável, sem excessiva especialização em subclasses. d) Memento é indicado quanto: uminstantâneo de estado de um objeto deve ser salvo de maneira que possa ser restaurado para esse estado mais tarde; uma interface direta para obtenção do estado exporia detalhes de implementação e romperia o encapsulamento do objeto. e) Composite é indicado quando: quiser representar hierarquias partes-todo de objetos; quiser que os clientes sejam capazes de ignorar a diferença entre composições de objetos e objetos individuais, neste caso, os clientes tratarão todos os objetos na estrutura composta de maneira uniforme 141 Professor Marcelo Pacote - @profmarcelopacote 141 W W W. D OMI NAND OTI .COM.B R Exercício [13] (PETR/2010/CESGRANRIO) (1/2) 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 agilidade 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. 142 Professor Marcelo Pacote - @profmarcelopacote 142 W W W. D OMI NAND OTI .COM.B R Exercício [13] (PETR/2010/CESGRANRIO) (2/2) 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? 143 Professor Marcelo Pacote - @profmarcelopacote 143 a) Builder. b) Factory Method c) Command d) Abstract Factory e) Prototype. W W W. D OMI NAND OTI .COM.B R Exercício [14] (PETR/2011/CESGRANRIO) O Padrão de Projeto Decorador é formado por uma hierarquia de classes cuja classe mais genérica representa um componente ou um componente abstrato. Para o padrão ser útil, essa classe deve ser diretamente especializada em, pelo menos, outras duas classes que representam um(a) a) componente cliente e um componente adaptador b) componente cliente e um decorador c) componente concreto e um decorador d) componente concreto e um componente adaptador e) instância única e um decorador 144 Professor Marcelo Pacote - @profmarcelopacote 144 W W W. D OMI NAND OTI .COM.B R [1] e [2] c [3] b [4] d [5] e [6] c [7] b [8] d Gabarito Professor Marcelo Pacote - @profmarcelopacote 145 [09] d [10] b [11] c [12] b [13] e [14] c W W W. D OMI NAND OTI .COM.B R WWW.DOMINANDOTI .COM.BR ANEXO IV Exercícios complementares – Outras bancas Professor Marcelo Pacote – @profmarcelopacote W W W. D OMI NAND OTI .COM.B R Exercício [1] (TSE/2012/CONSULPLAN) (1/2) 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, tornando-se 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. Professor Marcelo Pacote - @profmarcelopacote 147 W W W. D OMI NAND OTI .COM.B R Exercício [1] (TSE/2012/CONSULPLAN) (2/2) Essas famílias são denominadas, respectivamente, a) Structural Patterns, Standard Patterns e Creational Patterns. b) Behavioral Patterns, Structural Patterns e Standard Patterns. c) Creational Patterns, Structural Patterns e Behavioral Patterns. d) Standard Patterns, Creational Patterns e Structural Patterns. Professor Marcelo Pacote - @profmarcelopacote 148 W W W. D OMI NAND OTI .COM.B R Exercício [2] (ESAEX/2011/EsFCEx) Segundo a classificação do Gang of Four (GoF), os padrões de projeto que possuem respectivamente os propósitos COMPORTAMENTAL, CRIAÇÃO e ESTRUTURAL, são: a) ADAPTER, BUILDER e MEMENTO b) PROXY, ADAPTER e DECORATOR c) COMMAND, BUILDER e SINGLETON d) PROTOTYPE, MEDIATOR e ITERATOR e) OBSERVER, ABSTRACT FACTORY e BRIDGE Professor Marcelo Pacote - @profmarcelopacote 149 W W W. D OMI NAND OTI .COM.B R [1] c [2] e Gabarito Professor Marcelo Pacote - @profmarcelopacote 150
Compartilhar