Baixe o app para aproveitar ainda mais
Prévia do material em texto
Padrões Gof de criação: ● Gang of Four - Gof ● Padrões de projeto divididos em três categorias ○ Criação ○ Estruturais ○ Comportamentais ● Padrões Gof de criação ajudam a construir sistemas independentes da forma com que os objetos são criados e representados. ● Os módulos não devem depender de empresa e sim de abstrações. ● Criação de vários objetos podem trazer problemas futuros por conta de dependências ● Esse padrão possibilita a conexão de duas hierarquias paralelas representadas pelos participantes genéricos Creator e Product. PADRÃO DE PROJETO FACTORY METHOD: ● Soluções utilizadas com sucesso em problemas recorrentes ● Frequentemente utilizado na implementação de frameworks ● Método que cria objetos ● Adiar a substanciação para Subclasses ● Catálogo de soluções para problemas que se repetem ● Reutilizar o conhecimento ● Flexibilidade ao poder criar novas factories sem precisar mexer na anterior ● O que o padrão factory method tenta resolver? ○ Criar objetos sem especificar a classe do objeto que será criado, ○ Permite que a classe delegue a responsabilidade de criar objetos na subclasse ○ Ex: ○ Factory Method é um padrão frequentemente utilizado na implementação de frameworks. ● Em relação à estrutura de solução proposta pelo padrão de projeto Factory Method, assinale a alternativa correta: ○ É composta por uma hierarquia de classes que especializam um participante abstrato Creator e por outra hierarquia de classes que especializam um participante abstrato Product. ● Strategy: ○ como objetivo a separação de diferentes algoritmos dos objetos de domínio sobre os quais eles atuam ● Template Method: ○ Utilizado em conjunto com o Factory Method ○ Implementação genérica definida em uma superclasse que contém passos que podem ser especializados nas subclasses ● Solução do padrão Factory Method ○ O padrão Factory Method permite que diferentes implementações de um mesmo serviço possam ser utilizadas por um cliente sem que seja necessário replicar códigos similares ou utilizar estruturas condicionais complexas, conforme ilustrado no exemplo anterior. PADRÃO DE PROJETO ABSTRACT FACTORY: ● É um padrão que fornece uma interface para a criação de famílias de objetos relacionados ou dependentes, sem criar dependências entre o cliente e as classes concretas instanciadas. ● Creator e Concrete ● O problema tratado pelo padrão Abstract Factory consiste em isolar o cliente de uma família de produtos relacionados de suas implementações específicas ■ Como podemos remover todas as instanciações dos decodificadores da classe? ● ServicoIntegracao, criando uma solução genérica que permita que esse serviço trabalhe com novos formatos de decodificação sem que seu código precise ser alterado? ● AWT - > ○ Abstract Window Toolkit é o toolkit gráfico original da linguagem de programação Java. ● MOTIF -> ○ Interface gráfica padrão para usuários do sistema operacional Unix. ● Promove o encapsulamento do processo de criação de objetos, isolando os clientes das implementações concretas. ● Permite que os clientes sejam implementados pelo uso apenas de abstrações. ● Singleton -> Cada fábrica concreta ● 1. ASSINALE A ALTERNATIVA QUE EXPRESSA A INTENÇÃO DO PADRÃO DE PROJETO ABSTRACT FACTORY: ○ E) Permitir a criação de famílias de produtos relacionados ou dependentes, de modo que não sejam criadas dependências entre os módulos clientes e as classes concretas das famílias específicas de produtos. ● 2. EM RELAÇÃO À ESTRUTURA DE SOLUÇÃO PROPOSTA PELO PADRÃO DE PROJETO ABSTRACT FACTORY, ASSINALE A ALTERNATIVA CORRETA ○ Devemos definir uma classe fábrica concreta para cada família de produtos. PADRÃO DE PROJETO BUILDER: ● É um padrão que visa separar a construção de um objeto complexo de sua representação, de forma que o mesmo processo de construção possa construir diferentes representações desse objeto. ● Solução proposta: ○ Separar a criação de objetos complexos de quem demanda esses objetos ● O objeto Builder deve dar acesso apenas ao produto pronto ● Os clientes ficam isolados da forma como esses objetos são internamente construídos. ● Builder x Abstract ○ o Builder oferece um mecanismo de construção de um objeto complexo em etapas ○ Enquanto o foco do Abstract Factory é definir famílias de produtos ● Composite: ○ representar objetos compostos por outros em uma hierarquia de especializações de um mesmo elemento comum ● 1. ASSINALE A ALTERNATIVA QUE EXPRESSA A INTENÇÃO DO PADRÃO DE PROJETO BUILDER ○ A) Permitir que um único processo de construção seja capaz de construir diferentes representações de objetos complexos, separando, em classes distintas, o processo de construção de suas diferentes representações. ● 2. EM RELAÇÃO À ESTRUTURA DE SOLUÇÃO PROPOSTA PELO PADRÃO DE PROJETO BUILDER, ASSINALE A ALTERNATIVA ○ E) Somente o participante Concrete Builder conhece a representação interna do produto que ele é responsável por construir. PADRÃO DE PROJETO PROTOTYPE: ○ Permite a instanciação de objetos a partir da geração de uma cópia de um objeto protótipo ○ o módulo cliente não precisa conhecer a classe específica que está sendo instanciada. ○ A ideia central do padrão é fazer com que uma classe cliente que precise criar instâncias de uma subclasse específica ou de diferentes subclasses registre uma instância protótipo dessa(s) subclasse(s) e chame a operação clone do protótipo registrado sempre que precisar de uma nova instância. ○ É aplicável em 3 situações específicas: ■ 1. QUANDO EXISTIREM MUITAS FÁBRICAS ESPECÍFICAS PARA A CRIAÇÃO DE DIFERENTES FAMÍLIAS DE PRODUTOS ● Permite uma solução sem que haja necessidade de implementar uma subclasse para cada família ■ 2. QUANDO AS INSTÂNCIAS DE UMA CLASSE FOREM RESULTADO DE POUCAS COMBINAÇÕES DE ESTADO ● É mais simples criar as instâncias típicas a priori e gerar cópias delas, ao invés de instanciá-las manualmente. ■ 3. QUANDO O ESTADO DE UMA CLASSE ENVOLVER MUITOS ATRIBUTOS E RELACIONAMENTOS COM UM PROCESSO DE CRIAÇÃO DE NOVAS INSTÂNCIAS MUITO CUSTOSO OU COMPLEXO ● Neste caso, necessitamos criar objetos com estados idênticos ou com poucas diferenças. ○ Pode ser modificado em tempo de execução, o contrário da Abstract ○ O padrão Prototype demanda que cada subclasse do produto a ser instanciado implemente a operação clone PADRÃO DE PROJETO SINGLETON: ● Garantir que exista uma (e apenas uma) instância de uma classe, provendo um ponto de acesso global a essa instância. ● Polimorfismo ● O atributo únicaInstância é uma referência a essa única instância a ser compartilhada pelos demais módulos. ● O padrão Singleton permite o acesso controlado a uma única instância de uma classe, sendo uma solução superior à utilização de variáveis globais. ● Ele pode dificultar a implementação de testes unitários ● Portanto, esse é um padrão que deve ser utilizado apenas em casos muito específicos para não criar acoplamentos desnecessários e tornar a estrutura do Software menos flexível ● 1. ASSINALE A ALTERNATIVA QUE EXPRESSA A INTENÇÃO DO PADRÃO DE PROJETO PROTOTYPE: ○ A) Permitir a instanciação de um objeto a partir de uma operação de clonagem fornecida por um objeto já existente. ● 2. ASSINALE A ALTERNATIVA QUE EXPRESSA A INTENÇÃO DO PADRÃO DE PROJETO SINGLETON: ○ Garantir que uma classe tenha apenas uma instância em um processo de execução,impedindo que outros módulos possam instanciar diretamente essa classe. Tema 03 - Padrões GOF estrutural ● Visão geral: ● ○ O padrão Adapter ■ Permite que módulos de um sistema possam interagir com diferentes implementações de um mesmo serviço ■ Por meio de uma interface genérica. ○ O padrão Bridge ■ separa a abstração de um objeto da sua implementação ■ Ambos possam variar de forma independente. ○ O padrão Decorator ■ Maneira de adicionar, dinamicamente, responsabilidades a objetos por meio de estruturas de composição, em vez de soluções baseadas em herança. ○ O padrão Composite descreve ■ como podemos estruturar uma hierarquia de objetosconstruída a partir de dois tipos de elementos: primitivos e compostos. ○ O padrão Facade propõe ■ Criação de uma interface de alto nível para um subsistema, ■ de modo a isolar os módulos clientes do conhecimento da estrutura interna desse subsistema. ○ O padrão Flyweight apresenta ■ Uma solução para o problema de compartilhamento de um número elevado de pequenos objetos, ■ Com o objetivo de utilizar os recursos de memória de forma mais racional. ○ Por fim, o padrão Proxy consiste ■ Na criação de um objeto substituto do real destino de uma requisição, ■ sendo útil para abstrair a complexidade na comunicação entre objetos distribuídos ■ ou para lidar com a criação sob demanda de um objeto com grande consumo de recursos, como imagens, por exemplo. ● PADRÃO DE PROJETO ADAPTER: ○ O propósito é converter a interface de uma classe existente em outra interface esperada pelos módulos clientes. ○ Especialmente útil quando estamos desenvolvendo um sistema que precisa interagir com um serviço implementado por terceiros ■ Gostaríamos que nosso software de vendas pudesse trabalhar com novos fornecedores que apareçam no mercado, sem que seja necessário alterar módulos já existentes, mas apenas adicionando novos módulos. ○ Precisamos de uma solução que nos permita conectar o módulo cliente com qualquer fornecedor de serviço de pagamento. ○ Para cada Adaptee específico, deve ser criado um adaptador ○ Target (operation) e SpecificOperation ○ A interface BrokerPagamento representa a generalização dos serviços oferecidos pelos diferentes fornecedores ○ Única interface, isolando, portanto, os módulos clientes das diferentes interfaces proprietárias 1. ASSINALE A ALTERNATIVA QUE EXPRESSA A INTENÇÃO DO PADRÃO DE PROJETO ADAPTER: B) Permitir a utilização de diferentes implementações de um mesmo serviço a partir de uma interface comum, sendo que essas implementações correspondem normalmente a componentes fornecidos por terceiros. 2. EM RELAÇÃO À ESTRUTURA DE SOLUÇÃO PROPOSTA PELO PADRÃO DE PROJETO ADAPTER, ASSINALE A ALTERNATIVA C) O participante Adapter possui a responsabilidade de converter as operações definidas pelo participante Target nas operações definidas no participante Adaptee. ● PADRÃO DE PROJETO BRIDGE: ○ Objetivo principal: ■ Desacoplar uma abstração da sua implementação, permitindo que ambas possam variar de forma independente. ■ Evita um problema de explosão combinatória de classes, resultante de soluções baseadas em herança ■ O problema que o padrão Bridge soluciona: ● é a separação da abstração (TextComponent e suas especializações do domínio, TextArea e TextField) dos aspectos de sua implementação (plataformas Windows e Motif), permitindo que ambas possam evoluir separadamente, isto é, podemos adicionar novos tipos de componentes e novas plataformas sem gerar um problema combinatório de difícil gestão. ■ Separação de hierarquia de abstrações da hierarquia de implementações ■ JAVA AWT -> Windows ■ Diferença do padrão adapter para Bridge: ● padrão Adapter é aplicado quando desejamos incorporar à solução elementos de terceiros ● O padrão Bridge, por outro lado, é uma solução definida a priori, ou seja, a interface comum de implementação é determinada de forma a permitir que diferentes implementações possam ser construídas a partir da sua definição. ■ Alguns nomes de objetos: ● TextField, TextArea, Component, ComponentPeer ■ 1. ASSINALE A ALTERNATIVA QUE EXPRESSA A INTENÇÃO DO PADRÃO DE PROJETO BRIDGE: ● E) Permitir que uma abstração e a sua representação interna ou tecnológica possam variar de forma independente, fornecendo uma ponte entre a abstração e a sua representação. ● ● PADRÃO DE PROJETO DECORATOR: ○ Padrão que permite adicionar responsabilidades a um objeto de forma dinâmica e mais flexível do que utilizando subclasses ○ Melhor que utilizar subclasses ○ Component, ConcreteComponent, Decorator,Writer, ○ O padrão Decorator oferece uma forma mais flexível de adicionar funcionalidades a objetos do que as soluções baseadas em herança, por ser baseado em composição de objetos. ○ Estrutura similar a uma cebola ○ 1. ASSINALE A ALTERNATIVA QUE EXPRESSA A INTENÇÃO DO PADRÃO DE PROJETO DECORATOR: ■ B) Adicionar funcionalidades a uma classe sem utilizar subclasses, mas por meio de uma estrutura de composição dinâmica e flexível. ● PADRÃO DE PROJETO COMPOSITE: ○ Permite representar hierarquias de composição de objetos em uma estrutura de árvore viabilizando que a manipulação dos objetos individuais e dos agregados possa ser feita com o mesmo conjunto de operações. ○ é especialmente interessante para problemas de representação de hierarquias de elementos nas quais observamos recursividade. ○ A ideia central do padrão é representar a hierarquia de modo que todos os elementos herdem de uma superclasse genérica representada pelo participante Component. ○ Leaf, Elemento, Mensagem, Pasta ○ Representa uma estrutura hierárquica de objetos, permitindo que os módulos clientes possam manipular seus elementos de maneira uniforme por meio da mesma interface. ○ 1. ASSINALE A ALTERNATIVA QUE EXPRESSA A INTENÇÃO DO PADRÃODE PROJETO COMPOSITE: ■ A) Compor hierarquias de objetos de forma que objetos individuais e agregados possam ser manipulados de forma genérica pelo mesmo conjunto de operações. ● PADRÃO DE PROJETO FACADE: ○ Tem o propósito de oferecer uma interface de alto nível para um componente ou subsistema ○ é permitir que um módulo cliente utilize um subsistema ou uma camada complexa de um sistema sem precisar conhecer e manipular diversos elementos, ○ Reduzir o acoplamento entre o subsistema e os módulos clientes. ○ Consiste, basicamente, em definir uma classe correspondente ao participante Facade, que oferece uma interface de alto nível ao participante Client ○ O padrão Facade reduz a complexidade de implementação dos módulos clientes de um subsistema, promovendo menor acoplamento entre o subsistema e os seus clientes. ○ Isso permite que os componentes internos do subsistema possam ser modificados sem afetar os módulos clientes. ○ 2. ASSINALE A ALTERNATIVA QUE EXPRESSA A INTENÇÃO DO PADRÃODE PROJETO FACADE: ■ B) Reduzir o acoplamento de um módulo cliente com os elementos que compõem o subsistema, fornecendo para o módulo cliente uma interface de alto nível aos serviços desse subsistema. ● PADRÃO DE PROJETO FLYWEIGHT: ○ O propósito do padrão Flyweight é permitir a utilização de diversos pequenos objetos de forma eficiente ○ Ex: Substâncias químicas - aplicação envolvendo substâncias químicas ○ O problema que esse padrão tenta resolver: ■ consiste em como podemos compartilhar objetos imutáveis, ou as partes imutáveis de objetos, de modo a utilizar os recursos de memória de forma mais eficiente. ○ O padrão Flyweight permite a utilização mais racional da memória em casos nos quais exista a criação de um número elevado de pequenos objetos replicados. ○ Imutável ○ 1. ASSINALE A ALTERNATIVA QUE EXPRESSA A INTENÇÃO DO PADRÃO DE PROJETO FLYWEIGHT: ■ C) Permitir a utilização mais eficiente de memória, evitando a criação de um número muito grande de objetos imutáveis simples, por meio de uma solução baseada em compartilhamento. ● PADRÃO DE PROJETO PROXY: ○ O propósito do padrão Proxy é fornecer aos clientes um objeto proxy, com a mesma interface do objeto destino real ○ EJB, J2EE ○ O padrão Proxy introduz um nível de indireção para o acesso a um objeto. ○ Além disso, é possível construir objetos grandes ou numerosos sob demanda sem mudar a interface oferecida ao módulo cliente. ○ o padrão proxy preserva a mesma interface oferecida pelo objeto alvo. ○ 2. ASSINALE A ALTERNATIVA QUE EXPRESSA A INTENÇÃO DO PADRÃO DE PROJETO PROXY: ■ B) Permitir a utilização de objetos remotos, de forma transparente, para o módulo chamador,isto é, o módulo chamador pode chamar as operações do objeto remoto como se ambos estivessem rodando no mesmo processo. Padrões de projetos comportamentais: ● Padrão Chain of Responsibility: ○Chain of Responsibility é um padrão que permite o envio de uma requisição para o primeiro elemento de uma cadeia de objetos ○ Fazendo com que o objeto requisitante não precise ficar acoplado a todos os objetos da cadeia ○ Inspirada na loja de Departamentos ○ O processamento é dividido em pequenos módulos que podem ser combinados de diferentes maneiras. ○ Cadeia de objetos ○ Requisição repassada para sucessor na cadeia. ○ O padrão Chain of Responsibility reduz a complexidade de uma classe que tenha que lidar com várias possibilidades de tratamento de uma requisição ○ Utilizado junto com o Composite ○ Questão 1 - Assinale a alternativa que expressa a intenção do padrão de projeto Chain of Responsibility: ■ A) Reduzir o acoplamento entre o objeto que envia uma requisição e todos os possíveis objetos que podem realizar algum processamento relacionado a essa requisição. ○ ● Padrão Command: ○ Command é um padrão que encapsula uma requisição em um objeto. ○ Transformar cada ação em um objeto ○ Cada ação é implementada individualmente em uma classe ○ O padrão Command promove o desacoplamento entre o objeto que faz a requisição e o objeto que realiza a operação requisitada ○ é possível reutilizar um código comum entre os comandos ○ Adição de comandos sem precisar alterar classes já existentes. ○ Maior facilidade para a implementação de testes unitários automatizados ○ Undo - redo ● Padrão Iterator: ○ O objetivo do padrão Iterator é permitir o acesso sequencial aos objetos de uma coleção, sem expor a sua representação interna ○ ArrayList, Aggregate, ArrayList, LinkedList, HashSet e TreeSet ○ A solução proposta pelo padrão Iterator consiste em colocar a responsabilidade pelo percurso e pelo acesso aos elementos de uma coleção em um objeto específico, denominado Iterator. ○ O principal benefício do padrão Iterator é permitir que os módulos clientes possam percorrer sequencialmente os elementos de uma coleção de forma independente da sua representação interna ○ Questão 2 - Assinale a alternativa que expressa a intenção do padrão de projeto Iterator: ■ C) Permitir que um módulo possa fazer o percurso por uma coleção de objetos sem precisar conhecer a representação interna dessa coleção. ● Padrão Mediator: ○ Encapsula a forma de interação entre um conjunto de objetos, com objetivo de evitar que eles tenham que referenciar uns aos outros explicitamente. ○ A solução consiste em centralizar as comunicações entre os objetos em um elemento denominado mediador. ○ O participante Mediator define uma interface padrão que cada objeto utilizará para se comunicar com os demais envolvidos em uma interação. ○ Solução de menor acoplamento para interações complexas entre objetos ○ Substitui a estrutura de muitos para muitos para um para muitos ○ Interface do usuário: Botões, campos de texto, lista de seleção ○ Comum ser aplicado com o Observer ○ ● Padrão Memento: ○ Memento é um padrão que permite capturar o estado interno de um objeto, sem quebrar o seu encapsulamento, de forma que esse estado possa ser restaurado posteriormente. ○ Desfazer o efeito produzido por uma ou mais operações em determinado objeto ou em um conjunto de objetos ○ E se oferecêssemos um recurso que possibilitasse o usuário interromper sua compra e voltar mais tarde, sem perder o conteúdo já adicionado ao pedido? ○ Operação criarMemento ■ Salva o estado do pedido em uma instância de PedidoMemento. ○ Operação restaurarMemento ■ Restaura o estado do pedido a partir do objeto PedidoMemento recebido como parâmetro. ○ O padrão Memento facilita a implementação de problemas nos quais precisamos desfazer certas modificações de estado em objetos ○ Checkpoint/restart ○ Retomar de onde parou ○ Esse padrão é frequentemente utilizado com o padrão Command, quando este implementa um mecanismo para desfazer um comando. ○ Questão 02 - Assinale a alternativa que expressa a intenção do padrão de projeto Memento: ■ E) Fornecer um mecanismo para salvar e restaurar o estado de um objeto, sem quebrar o seu encapsulamento. ● Padrão Strategy: ○ O padrão Strategy define uma família de algoritmos, encapsulando-os em objetos e permitindo que eles possam ser utilizados de forma intercambiável, ou seja, o algoritmo específico pode ser trocado sem que o módulo usuário desse algoritmo precise ser alterado. ○ O padrão Strategy é aplicável em situações nas quais existam diferentes algoritmos para gerar determinado resultado. ○ Cálculos de juros para título público ○ A ideia central consiste em separar cada algoritmo em uma classe, fazendo com que todas as classes específicas implementam uma interface comum, representada pelo participante Strategy ○ Pode ser implementado em combinação com o padrão Flyweight ○ Questão 01 - Assinale a alternativa que expressa a intenção do padrão de projeto Strategy: ■ C) Encapsular algoritmos em objetos, permitindo que eles possam ser utilizados de forma intercambiável pelos módulos clientes. ● Padrão Observer: ○ Relação de dependência dos objetos ○ Garante que quando ocorrer modificações no estado de determinados objetos, todos objetos dependentes são notificados e atualizados automaticamente. ○ Observer consiste em manter a consistência entre objetos relacionados de modo que, se o estado de um objeto mudar, todos os objetos afetados por essa mudança sejam notificados e atualizados. ○ Em Java, esse padrão pode ser implementado utilizando as classes disponíveis nas bibliotecas da linguagem ○ java.util.Observable ○ O padrão Observer permite que os objetos detentores de informação relevante possam notificar que ocorreram modificações nessa informação aos possíveis interessados. ○ Uma consequência negativa desse padrão é que a solução proposta pode dar origem a muitas chamadas da operação update. ○ O padrão Observer pode ser utilizado em conjunto com o padrão Mediator ● Padrão Visitor: ○ O padrão Visitor permite a definição de novas operações em uma hierarquia de objetos sem que haja a necessidade de modificar as classes dessa hierarquia. ○ Nos permite acrescentar novas funcionalidades sem precisar modificar as classes que representam a estrutura fundamental dos objetos. ○ O padrão Visitor permite a adição de novas funcionalidades de forma ortogonal a uma estrutura de objetos ● Padrão State: ○ Permite que um objeto modifique o seu comportamento quando o seu estado mudar, como se o objeto tivesse mudado de classe. ○ O padrão State é muito útil para problemas envolvendo a implementação de entidades com uma dinâmica de estados relevante. ○ O participante Context corresponde a uma classe que possui uma dinâmica dependente de estados. ○ O padrão State separa os comportamentos aplicáveis a cada estado de um objeto em classes distintas. ○ Questões: 1- Assinale a alternativa que expressa a intenção do padrão de projeto State: ● D) Permitir a implementação de uma máquina de estados, por meio da definição de uma classe para cada estado. Cada classe implementa o comportamento do objeto naquele estado específico. 2- Assinale a alternativa que expressa a intenção do padrão de projeto Visitor: ● C) Permitir a adição de novas funcionalidades, por meio da utilização de classes ortogonais a uma estrutura tipicamente hierárquica de objetos. ● Padrão Interpreter: ○ definir uma representação para a gramática de uma linguagem e um módulo capaz de interpretar sentenças nessa linguagem. ○ Problema resolvido: definir uma forma de representar e interpretar uma linguagem definida por uma gramática. ○ Os elementos da gramática da linguagem são definidos por objetos que formam uma árvore sintática abstrata ○ Esse padrão facilita a modifi cação e a ampliação de uma gramática ● Padrão Template Method: ○ Template Method é definir o esqueleto de um algoritmo em uma superclasse, em que os passos comuns podem ser implementados na própria superclasse e os passos específicos são implementados nas subclasses. ○ Definir um método em uma classe abstrata que implementa a estruturado algoritmo comum a todas as suas implementações específicas ○ O padrão Template Method é muito utilizado na implementação de bibliotecas genéricas de classes e de framework ○ Não nos chame, nós o chamaremos ○ O padrão Factory Method costuma ser utilizado no contexto de um TemplateMethod ○ Permite a variação de partes de um algoritmo, por meio de uma estrutura de herança. No caso do Strategy algoritmos diferentes sem estrutura comum. Questões: 1- Assinale a alternativa que expressa a intenção do padrão de projeto Interpreter: ● D) Definir uma representação para a gramática de uma linguagem é uma forma de tratar sentenças expressas com essa linguagem. 2- Assinale a alternativa que expressa a intenção do padrão de projeto Template Method: ● B) Implementar uma família de algoritmos que possuem uma estrutura comum de passos, de modo que essa estrutura seja definida apenas na superclasse, com os passos específicos sendo implementados em métodos das subclasses. Padrões GRASP ● Acrônimo ● General responsibility assignment software patterns - GRAP ● GRASP podem ser vistos como os princípios gerais de um projeto de software orientado a objetos que são aplicáveis na solução de diversos problemas específicos. ● A distribuição de responsabilidades pelos módulos do sistema é uma das tarefas mais importantes no desenvolvimento orientado a objetos. Padrão Especialista da Informação: ● Recomenda como princípio geral a atribuição correta de responsabilidade ● Atribua a responsabilidade ao especialista, isto é, ao módulo que possua o conhecimento necessário para realizá-la. ● Quando o padrão Especialista na Informação não é seguido, é comum encontrar uma solução defi ciente conhecida como God Class Questão 1 - Assinale a alternativa que expressa a intenção do padrão Especialista na Informação. ● A) Padrão que recomenda alocar as operações pelas classes do sistema de acordo com o conhecimento que cada classe possui, sendo ele dado pelos seus atributos e relacionamentos Padrão Criador: ● O padrão Criador recomenda atribuir a uma classe X a responsabilidade de criar uma instância da classe Y se uma ou mais das seguintes condições forem)verdadeira(s): ○ X é um agregado formado por instâncias de Y. ○ X contém instâncias de Y. ○ X registrar instâncias de Y. ○ X possui os dados de inicialização necessários para a criação de uma instância de Y. ● O padrão Criador é especialmente indicado para a criação de instâncias que formam parte de um agregado. Questão 2 - Marque a alternativa que expressa a intenção do padrão Criador. ● C) O padrão Criador oferece uma heurística para resolver problemas simples de instanciação de objetos, recomendando que um agregado seja responsável pela criação dos objetos que compõem 2 - Padrões Coesão Alta e Controlador Padrão Coesão Alta: ● Coesão é um conceito que nos permite avaliar se as responsabilidades de um módulo estão fortemente relacionadas e possuem o mesmo propósito. ● O objetivo é criar módulos com coesão alta, ou seja, módulos que tenham um propósito bem definido. ● A solução proposta por esse padrão consiste em definir módulos de coesão alta. ● Tipos de Coesão: ○ Coesão Coincidente: ■ Quando os elementos estão agrupados em um módulo de forma arbitrária ou por conveniência. ○ Coesão Lógica: ■ Os elementos são agrupados por estarem logicamente relacionados ou por realizarem funções diferentes, ainda que tendo a mesma natureza ■ Arquivo de texto local - Arquivo Obtido via FTP ■ Banco de dados relacionais. ○ Coesão Temporal: ■ é aquele em que os seus elementos são agrupados por serem executados em determinado instante do tempo ■ São colocadas no módulo Startup todas as operações executadas na inicialização do sistema, logs. ■ INICIALIZAÇÃO ○ Coesão Procedural: ■ Um módulo com coesão procedural é aquele cujos elementos são agrupados por eles serem executados em determinada sequência utilizando diferentes conjuntos de dados. ○ Coesão de Comunicação: ■ Os elementos são agrupados por eles realizarem funções diferentes utilizando o mesmo conjunto de dados. ○ Coesão Sequencial ■ é aquele cujos elementos são agrupados por eles conterem todos os passos de execução de um procedimento sobre um mesmo conjunto original de dados ○ Coesão Funcional: ■ Reúne elementos que, juntos,cumprem um único propósito bem definido ■ pacote java.io ■ FileOutputStream, FileInputStream, FileReader, FileWriter Questão 1 - Assinale a alternativa correta sobre o padrão GRASP Coesão. b) Buscamos produzir módulos com coesão alta, isto é, módulos que tenham um propósito bem definido. Padrão Controlador: ● A quem devemos atribuir a responsabilidade de processar eventos que correspondam a requisições lógicas de execução de operações do sistema? ● O padrão Controlador recomenda que a responsabilidade de receber um evento de sistema e de coordenar a produção da sua resposta precisa ser alocada a uma classe que representa uma das seguintes opções: ○ Uma classe correspondente ao sistema ou a um subsistema específico - Controlador Fachada ○ Uma classe corresponde ao caso de uso em que o evento ocorre. ○ O controlador não faz parte da interface com o usuário. ○ Ao receber uma requisição, um módulo Controlador normalmente coordena e controla os elementos responsáveis pela produção da resposta. ○ Imagine uma orquestra com um maestro e vários músicos. ○ Maestro (controlador) Questão 02 - Aponte a alternativa correta sobre o padrão Controlador. E) O controlador é um elemento de lógica de negócio responsável por coordenar a produção da resposta aos eventos lógicos gerada por componentes de interface do sistema com elementos externos. Padrão Acoplamento Baixo: ● Um acoplamento corresponde ao grau de dependência de um módulo em relação a outros do sistema. ● ● A solução proposta por esse padrão consiste em distribuir as responsabilidades a fim de gerar um acoplamento baixo entre os módulos ● Tipos de Acoplamento: ○ Acoplamento de conteúdo: ■ Ele ocorre quando um módulo utiliza aspectos de implementação de outro. ○ Acoplamento global: ■ Ocorre quando eles se comunicam por intermédio de recursos, como, por exemplo, variáveis globais. ○ Acoplamento externo: ■ compartilham alguma parte do ambiente externo ao software, como, por exemplo, banco de dados, arquivos ou formato de dados. ○ Acoplamento de controle: ■ Ocorre quando um módulo controla a lógica interna de outro por meio da passagem de alguma informação de controle. ○ Acoplamento de estrutura: ■ Ele acontece quando um módulo chamador passa uma estrutura de dados para um módulo chamado. ○ Acoplamento de dados: ■ O acoplamento de dados ocorre quando um módulo se comunica com outro, passando apenas os dados ■ Módulos independentes se comunicam por meio de dados. ● Os níveis de acoplamento, do mais alto para o mais baixo, são: ○ Conteúdo – Global – Externo – Controle – Estrutura – Dados ○ Buscamos produzir módulos com acoplamento baixo, minimizando o grau de dependência entre eles. Padrão Invenção Pura ● A solução proposta pelo padrão Invenção Pura diz respeito à criação de classes artificiais, isto é, classes que não representam um conceito do domínio do problema, para gerar soluções com coesão alta e acoplamento baixo ● Esse padrão permite a criação de soluções com módulos de coesão alta e acoplamento baixo. Aponte a alternativa correta em relação ao padrão Invenção Pura: D) Domínio do problema com o objetivo de gerar soluções com maior coesão e menor acoplamento daquilo que seria obtido pela aplicação do padrão Especialista na Informação. Padrão Indireção: ● A solução proposta pelo padrão Indireção consiste em substituir a conexão direta entre dois ou mais objetos por uma estrutura de comunicação mediada por um objeto intermediário. ● Trata-se de introduzir uma camada entre o cliente e o fornecedor a fim de desacopla-los, promovendo soluções mais flexíveis, reusáveis e mais fáceis de entender e evoluir. Padrão Variações Protegidas: ● Identificar pontos sujeitosà variação e isolar essas variações com a criação de interfaces estáveis no seu entorno ● Proteger os pontos de variação de um software
Compartilhar