Abstract Factory Builder Factory Method Prototype Singleton Adapter Bridge Composite Decorator Facade Flyweight Proxy Chain of Responsibility Command Interpreter Iterator Mediator Memento Observer State Strategy Template Method Visitor Padrões de Criação Padrões Estruturais Padrões de Comportamento Padrões de Projeto da GoF Padrões de projeto do POSA Categoriza os padrões em 3 categorias Padrões Arquiteturais Padrões de Projeto Idiomas Padrões Arquiteturais
Expressam um esquema de organização estrutural para sistemas de software Oferecem um conjunto de subsistemas pré-definidos, especifica suas respectivas responsabilidades e inclui regras e diretrizes para organizar as relações entre eles. Exemplos MVC Broker Layer Reflection Padrões de Projeto Oferece um esquema para refinar os subsistemas ou componentes de um sistema de software ou as relações entre eles. São considerados padrões de média escala Exemplos Singleton Observer Adapter Command Strategy Idiomas Padrão de baixo nível específico de uma linguagem de programação Mostra como se pode implementar um dado componente/classe ou interação entre componentes/classes usando os recursos de uma LP Exemplos Singleton em C++ ou em Java Counted Pointer: gerência de memória em C++
A maioria das aplicações web tem algumas funcionalidades (por exemplo, segurança), que são aplicáveis a todas as requisições da aplicação. Para adicionar essa funcionalidade separadamente para cada requisição da aplicação seria demorado, propenso a erros e difícil de manter. Para resolver esse problema pode ser utilizado o design pattern Intercepting Filter. Propósito do Intercepting Filter: Executar pré e pós processamentos de algum processamento Design pattern da J2EE Aplicabilidade O processamento desejado pode ter uma cadeia de processamentos ligados Pré e pós processamentos Ex: Traduções Intercepting Filter Create Pluggable filters to process common services in a standard manner, without requiring changes to the core request. Introduced in Servlet specification 2.3 Filters allow on the fly transformations of payload and header of both the request into a resource and the response from a resource. Filters do not generally create a response or respond to a request as servlets do, rather they are used to modify the request or the response. Related to the decorator ( GOF ) pattern Front controller provides similar functionality, but is better suited to handling core processing. Examples of filter use - authentication filters, logging & auditing, Image conversion, data compression, encryption How to write a filter? Implement the javax.servlet.filter interface Container will call the dofilter() method. The dofilter method will modify the request or response and then call the next filter in the filter chain.
Padrão que encapsula a lógica de apresentação de dados de negócios dinâmicos ou, ainda, especifica que são usados ajudantes para adaptar os dados do modelo para a camada de apresentação da aplicação. Trata-se de View Helper. Considere: I. Fornecer uma interface para criação de famílias de objetos relacionados ou dependentes, sem especificar suas classes concretas. Possibilitar o adiamento da instanciação para as subclasses. II. Garantir a existência de apenas uma instância de uma classe, mantendo um ponto global de acesso ao seu objeto. 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: Factory Method, Singleton e Memento. O catálogo de padrões de projeto (design patterns) do GoF contém 23 padrões e está, basicamente, dividido em três seções: Creational, Structural e Behavioral. 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 Façade e Bridge Na engenharia de software, os padrões de projetos comportamentais tratam das interações e divisões de responsabilidades entre as classes ou objetos. São exemplos típicos dessa família: Chain of Responsability, Interpreter e Iterator.
Os design patterns: podem ser modelados utilizando-se a linguagem UML que fornece um meio eficiente de modelar padrões de projeto representando-os como colaborações. Sobre os design patterns, é correto afirmar: O padrão é uma descrição de conhecimento e experiência acumulados, uma solução comprovada para um problema comum. Sobre design pattern considere: I. No framework pode incluir código de programação e conter vários design patterns. II. No design pattern pode incluir código de programação e conter vários frameworks. III. Os design patterns são bastante abstratos e os frameworks menos abstratos. Está correto o que consta em I e III Questão TRT Creational Pattern Java que tem por objetivo separar a construção de um objeto complexo da sua representação, de tal forma que diversas representações podem ser criadas em razão da necessidade do programa. Trata-se de Builder Pattern. Os padrões de projeto (design patterns) I. foram testados: refletem a experiência e conhecimento dos desenvolvedores que utilizaram estes padrões com sucesso em seu trabalho; II. são reutilizáveis: fornecem uma solução pronta que só não pode ser adaptada para diferentes problemas; III. são expressivos: formam um vocabulário comum para expressar grandes
soluções sucintamente; IV. facilitam o aprendizado: reduzem o tempo de aprendizado de uma determinada biblioteca de classes; V. diminuem retrabalho: quanto mais cedo são usados, menor será o retrabalho em etapas mais avançadas do projeto. Está INCORRETO o que consta APENAS em II Em relação aos padrões de projetos orientados a objetos, separar dados ou lógica de negócios da interface do usuário e do fluxo da aplicação para permitir que uma mesma lógica de negócios possa ser acessada e visualizada através de várias interfaces, sem saber de quantas nem quais interfaces com o usuário estão exibindo seu estado, é característica do padrão de projeto arquitetural Model-View-Controller Acerca desses padrões, avalie: I. Em termos de padrões de criação de projetos, algumas classes, tais como um spooler de impressão ou um sistema de arquivos, devem ser instanciadas uma única vez e prover um ponto de acesso global a esta instância. --> Singleton II. Pertencente ao grupo de padrões estruturais, é utilizado para permitir que dois objetos se comuniquem mesmo que tenham interfaces incompatíveis. --> Adapter III. Encapsula uma requisição como um objeto, permitindo que os clientes parametrizem diferentes requisições e filas, ou façam o registro de log de requisições e dêem suporte a operações que podem ser desfeitas. --> Command IV. Atribuir a responsabilidade do tratamento de um evento do sistema a uma classe que representa o próprio sistema ou à classe que representa um caso de uso. --> Controller Analise: I. É o responsável pela especificação dos tipos de objetos a serem criados usando uma "instância" prototípica e pela criação de novos objetos copiando
este protótipo. --> Prototype II. Define uma interface de nível mais alto que torna o subsistema mais fácil de usar e fornece uma interface única para um subsistema com diversas interfaces; compõe o grupo de padrões estruturais. --> Façade III. Integrante do grupo de padrões comportamentais, ele provê uma forma de acessar sequencialmente os elementos de um agregado de objetos, sem expor a representação interna desse agregado. --> Iterator IV. As consequências do uso deste padrão é que o encapsulamento é mantido, já que objetos usam sua própria informação para cumprir responsabilidades; leva ao fraco acoplamento entre objetos e à alta coesão, uma vez que objetos fazem tudo que é relacionado à sua própria informação. --> Expert As associações entre classes e objetos são tratadas pelos Padrões de Projeto de Software (Design Patterns) da família de Padrões GoF Estruturais Um padrão de projeto de software (design pattern) que fornece uma interface para criação de famílias de objetos relacionados ou dependentes, sem especificar suas classes concretas, denomina-se factory method Considere: I. Permite a instanciação de objetos em tempo de execução. --> Factory II. Define objetos para possibilitar iterações em uma lista de itens. --> foreach III. Define situação onde é necessário haver somente uma instância de classe. --> Singleton 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 SQL tenha sido instanciado, apenas consultas SQL e conexões SQL serão instanciadas. O diagrama de classe a seguir ilustra a estrutura descrita acima. Qual padrão de projeto foi utilizado na solução proposta?
a) Adapter b) Builder c) Composite d) Abstract Factory e) Chain of Responsibility Software Design Pattern descreve uma solução geral reutilizável para um problema recorrente no desenvolvimento de sistemas de software orientados a objetos. Não é um código final, é uma descrição ou modelo de como resolver o problema do qual trata, que pode ser usada em muitas situações diferentes. Os Padrões de Projeto normalmente definem as relações e interações entre as classes ou objetos, sem especificar os detalhes das classes ou objetos envolvidos, ou seja, estão num nível de generalidade mais alto. Abstract Factory: permite a criação de famílias de objetos relacionados ou dependentes, através de uma única interface e sem que a classe concreta seja especificada. utilizado na implementação de um toolkit que disponibilize controles que funcionem em diferentes interfaces gráficas, tal como Motif, GTK+ (GNOME) ou Qt (KDE). Builder: permite a separação da construção de um objeto complexo da sua representação, de forma que o mesmo processo de construção possa criar diferentes representações. Composite: Aqui, o objeto composto possui um conjunto de outros objetos que estão na mesma hierarquia de classes a que ele pertence. O padrão composite é normalmente utilizado para representar listas recorrentes - ou recursivas - de elementos. Além disso, esta forma de representar elementos compostos em uma hierarquia de classes permite que os elementos contidos em um objeto composto sejam tratados como se fossem um único objeto. Desta forma, todos os métodos comuns às classes que representam objetos atômicos da hierarquia poderão ser aplicáveis também ao conjunto de objetos agrupados no objeto composto. Chain Of Responsibility: epresenta um encadeamento de objetos receptores para o processamento de uma série de solicitações diferentes. Esses objetos receptores passam a solicitação ao longo da cadeia até que um ou vários objetos a tratem. Cada objeto receptor possui uma lógica descrevendo 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.
Um exemplo da aplicação desse padrão é o mecanismo de herança nas linguagens orientadas a objeto: um método chamado em um objeto é buscado na classe que implementa o objeto e, se não encontrado, na superclasse dessa classe, de maneira recursiva. 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. 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. 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. Podem ser classificados por propósito Padrões de Criação: Abstraem o processo de criação de objetos a partir da instanciação de classes Padrões Estruturais:Tratam da forma como classes e objetos estão organizados para formar estruturas maiores Padrões Comportamentais: Preocupam-se com algoritmos e responsabilidades dos objetos 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 Composite é, normalmente, utilizado para representar listas recorrentes ou recursivas de elementos Dá pra matar pelo final da questão "O padrão de projeto que descreve essaestrutura é". Composite é o único estrutural. Abstract Factory (Criação) Chain of Responsability (Comportamental) Composite (Estrutural) Iterator (Comportamental) Module (não exite, ou pelo menos não faz parte do GoF) Façade: Classificado como estrutural e escopo objeto. Objetivo: Prover uma interface unificada para o conjunto de interfaces de um subsistema. Define uma interface de alto nível que faz um subsistema mais fácil de usar. Motivação: Estruturar um sistema em subsistemas contribui para reduzir sua complexidade. A dependência entre subsistemas pode ser minimizada através do uso de um objeto Fachada, o qual provê uma interface única e uniforme para as diversas funcionalidades de um subsistema. Consequências: Promove acoplamento fraco entre o subsistema e seus clientes; No entanto, não evita que aplicações possam acessar diretamente as subclasses do sistema, se assim o desejarem. Para facilitar a manutenção da aplicação, há um design pattern que tem como objetivo principal centralizar o acesso aos dados em uma única camada. Esse design pattern é o DAO DAO (acrônimo de Data Access Object), é um padrão para persistência de dados que permite separar regras de negócio das regras de acesso a banco de dados. Numa aplicação que utilize a arquitetura MVC, todas as funcionalidades de bancos de dados, tais como obter as conexões, mapear objetos Java para tipos de dados SQL ou executar comandos SQL, devem ser feitas por classes de DAO.
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. 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. Os padrões de projeto que tem a classificação pelo propósito são as seguintes: # Criação Abrange a configuração e inicialização de objetos e classes.(um exemplo seria o padrão de projeto Builder) # Estrutura Lida com as interfaces e a implementação das classes e dos objetos.(um exemplo da uma interface que lida com a implementação dos objetos seria o padrão de projeto Facade) #comportamento: Lida com as interações dinâmicas entre grupos de classes e objetos.(um exemplo seria o padrão de projeto Observer no escuta um grupo de Objetos) Analise o texto: É um design pattern que permite que uma aplicação seja desenvolvida de forma que a camada de acesso aos dados seja isolada das camadas superiores. Numa aplicação que utiliza a arquitetura MVC, todas as funcionalidades de bancos de dados, tais como estabelecimento de conexões, mapeamento de objetos Java para tipos de dados SQL ou execução de comandos SQL, devem ser feitas por classes representadas nesse design pattern. O texto faz referência ao design pattern a) Data Business Object.
b) Data Access Object. c) Data Command Object. d) Session Façade. e) Data Transfer Object. O DAO abstrai a implementação de acesso a base de dados para o Business Objectpara permitir o acesso transparente à fonte de dados. O BO delega também dados de carga e operações de armazenamento para o DAO.