Padrões de Desenho. ---------Engenharia de Software---------



Documentos relacionados
Programação Orientada a Objetos. Padrões de Criação

Programação com Objectos

Testes com Design Patterns

Padrões GoF. Leonardo Gresta Paulino Murta

Curso - Padrões de Projeto Módulo 1: Introdução

Padrões de Projeto. Prof. Jefersson Alex dos Santos

Análise e Projeto Orientados por Objetos

Padrões de Projeto de Software Orientado a Objetos

1Introdução Helder da Rocha

J930. Padrões. Projeto. Introdução. argonavis.com.br. Helder da Rocha

Categorias de Padrões

Prototype, um Design Patterns de Criação

Programação Avançada. Padrões de Projeto de Software. Fonte: Oswaldo B. Peres e K19 Treinamentos

Prof.ª Esp. Talita Pagani

Design Patterns. Viviane Torres da Silva

Java. Marcio de Carvalho Victorino

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

Universidade Federal de Itajubá Instituto de Engenharia de Sistemas e Tecnologias da Informação-IESTI PCO203 Tópicos Especiais em Programação

Programação com Objectos Teste Teórico 04 de Janeiro de 2010, 09:00 (120 minutos)

Curso - Padrões de Projeto Módulo 2: Padrões de Criação

Padrões de projeto 1

Pasteur Ottoni de Miranda Junior. Alguns Padrões de Projeto Gamma

Uma Introdução aos Padrões de Projeto com Java. Roberto Willrich INE-CTC-UFSC

PADRÕES DE SOFTWARE. Jerffeson Teixeira de Souza, Ph.D. Tarciane de Castro Andrade. Grupo de Padrões de Software da UECE (GPS.

Padrão Básico de Projeto: Interfaces e Polimorfismo

Especialização em web com interfaces ricas. Padrões de Projeto - Estruturais

Análise e Projeto Orientados por Objetos

Tópicos em Engenharia de Computação

Programação Concorrente em java - Exercícios Práticos Abril 2004

Padrões de Projeto. Padrões de Projeto. Além dos 23 Padrões GoF. Os 23 Padrões de Projeto. Documentação de um Padrão. Classificação dos Padrões

Decorator Pattern. SISMO - Sistemas e Mobilidade Junho de Departamento de Informática / UFMA

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio

Desenho de Software. Desenho de Software 1

Padrões clássicos ou padrões GoF O livro "Design Patterns (1994) de Erich Gamma, John Vlissides, Ralph Jonhson e Richard Helm, descreve 23 padrões de

Padrões. Projeto (Design) de Software

Análise e Projeto de Sistemas de Informação. Andrêza Leite andreza.lba@gmail.com

Orientação a Objetos

Padrões de Desenho (Design Patterns)

Eduardo Bezerra. Editora Campus/Elsevier

Flexibilidade e Reusabilidade em Sistemas Orientados a Objetos - Uma Proposta para Implementação no EB

Design Patterns na plataforma Java

PADRÕES DE PROJETO. Cleviton Monteiro

Padrões de Projeto em PHP

Desenvolvimento de Sistemas Orientados a Objetos com UML UP/RUP: Projeto

Guia de Fatores de Qualidade de OO e Java

PADRÕES DE PROJETO FAÇADE, FLYWEIGHT E VISITOR

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Padrões de Projeto. Singleton

2 Diagrama de Caso de Uso

Orientação a Objeto e UML Questões 2014 Prof. Felipe Leite

Como foi exposto anteriormente, os processos podem ter mais de um fluxo de execução. Cada fluxo de execução é chamado de thread.

Programação Orientada por Objetos

UFG - Instituto de Informática

Frameworks O que é um framework?

Padrão Básico de Projeto: Herança versus Composição

INF011 Padrões de Projeto. 02 Creational Patterns

Introdução aos Computadores

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

Java 2 Standard Edition Como criar classes e objetos

Grupo I [6v] Considere o seguinte extracto de um programa de definição de uma calculadora apenas com a função soma de dois valores reais

Introdução a Java. Hélder Nunes

Padrões Comportamentais

Abstract Factory Pattern

3 Classes e instanciação de objectos (em Java)

Sistemas Operacionais

Universidade Federal de Uberlândia Disciplina: POO2 Prof. Fabiano Dorça. Padrões de Projeto. Padrão Command

Mas o que é mesmo Padrão de Projeto?

Universidade Federal de Uberlândia Faculdade de Computação Prof. Fabiano Azevedo Dorça Programação Orientada a Objetos II. Padrões de Projeto

UML Aspectos de projetos em Diagramas de classes

PHP Profissional. Alexandre Altair de Melo Mauricio G. F. Nascimento

Profº. Enrique Pimentel Leite de Oliveira

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

O AMBIENTE DE TRABALHO DO WINDOWS

Capítulo 11. Conceitos de Orientação a Objetos. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Programação Estruturada e Orientada a Objetos. Fundamentos Orientação a Objetos

Análise e Projeto Orientados por Objetos

Capítulo 14. Herança a e Polimorfismo. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Programação Orientada a Objetos em Java. Herança

SISTEMAS OPERACIONAIS

Resumo: Perguntas a fazer ao elaborar um projeto arquitetural

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

Unidade 8: Padrão MVC e DAO Prof. Daniel Caetano

FBV - Linguagem de Programação II. Um pouco sobre Java

Banco de Dados Aula 1 Introdução a Banco de Dados Introdução Sistema Gerenciador de Banco de Dados

Computação Orientada aos Serviços. WF (parte 1) Semestre de Inverno 12/13

ESTUDO DE CASO WINDOWS VISTA

Tabela de roteamento

A ) O cliente terá que implementar uma interface remota. . Definir a interface remota com os métodos que poderão ser acedidos remotamente

Programação Orientada a Objetos Padrões de Projeto (design patterns) Fernando Vanini IC - UNICAMP

Transcrição:

Padrões de Desenho

Objectivos: Compreender o que são os padrões de desenho? Vantagens e desvantagens em usar os padrões de desenho? Qual o formato de um padrão de desenho? Conhecer as varias secções de padrões;

O QUE SÃO OS PADRÕES DE DESENHO? São soluções para problemas conhecidos e recorrentes no desenvolvimento de software; Descrevem soluções que evoluíram ao longo do tempo; Padrões são dispositivos que permitem que os programas compartilhem conhecimento sobre o seu desenho.

Exemplo Prático Programa 1 -> > problema a Programa 2 -> > problema a Programa 3 -> > problema a

Considere-se se o jogo de xadrez: Movimentos permitidos -> primitivas Modo de jogar -> princípios Estudar jogos -> padrões

Vantagens Reflectem a experiência, conhecimento e soluções São reutilizáveis

Desvantagens Falta de experiência; (A descrição do padrão indica quando ele pode ser aplicado, mas apenas a experiência pode proporcionar o entendimento de quando um padrão particular irá melhorar o desenho do sistema)

Formato de um padrão de desenho pelo GoF Nome do padrão e classificação; Intenção; Também conhecido como ; Motivação; Aplicabilidade; Estrutura; Colaboração; Consequências; Implementação; Amostra de código; c Utilidade; Padrões relacionados. Participantes;

O GoF contém m 23 padrões e está, basicamente, dividido em três secções: Creational (Criacional) Structural (Estrutural) Behavioral (Comportamental)

Creational Patterns Factory method pattern; Builder; Abstract factory pattern; Prototype; Singleton;

Factory Method Pattern Define uma interface para criar objectos, mas deixa as classes descendentes decidir que classe instanciar.

Estrutura

class Control { public void display() { //... } //... } class TextBox : Control { //... } class CheckBox : Control { //... } abstract class Field { public void display() { Control c = createcontrol(); c.display(); } Exemplo public abstract Control createcontrol(); } class TextField : Field { private string value; public Control createcontrol() { TextBox t = new TextBox(); t.settext(this.value); return t; } } class BooleanField : Field { private boolean value; public Control createcontrol() { CheckBox c = new CheckBox(); c.setchecked(this.value); return c; } }

Utilidade Usado em ferramentas e frameworks onde o código da biblioteca precisa de criar objectos de tipos que vão ser subclassificados por aplicações usando o framework.

Builder Separa a construção de um objecto complexo da sua representação, para que o mesmo processo de construção possa ser usado para criar diferentes representações.

Estrutura

Diagrama de Colaboração

Abstract Factory Method Fornecer uma interface para criar famílias de objectos sem ter de especificar as classes concretas desses objectos.

Exemplo C++ class Control { }; class PushControl : public Control { }; class Factory { public: // Returns Factory subclass based on classkey. Each // subclass has its own getcontrol() implementation. // This will be implemented after the subclasseshave // been declared. static Factory * getfactory(int classkey); virtual Control * getcontrol() const = 0; }; class ControlFactory : public Factory { public: virtual Control * getcontrol() const { return new PushControl(); } }; Factory * Factory::getFactory(int classkey) { // Insert conditional logic here. Sample: switch(classkey) { default: return new ControlFactory(); } }

Prototype Especificar os tipos de objectos a criar usando um protótipo, tipo, que será usado para criar novos objectos por clonagem.

Estrutura

Exemplo em Java /** * Record is the Prototype */ public abstract class Record implements Cloneable { public abstract Object clone(); } /** * PersonRecord is the Concrete Prototype */ public class PersonRecord extends Record { String name; int age;... public Object clone() { return new PersonRecord(); } }

Singleton Pattern Assegura que apenas existirá uma instância da classe e fornece um ponto de acesso global para ela.

Exemplo em Java public classeton { Singl private static Singleton INSTANCE = null; // Private constructor suppresses private Singleton() {} //synchronized creator to defend against multi-threading issues //another if check here to avoid multiple instantiation private synchronized static void createinstance() { if (INSTANCE == null) { INSTANCE = new Singleton(); } } public static Singleton getinstance() { ifstance == null) createinstance(); (IN return INSTANCE; } }

Structural Patterns Adapter Bridge Composite Decorator Façade ade Flyweight Proxy

Adapter (Structural Patterns) O Padrão de Desenho adaptador adapta um interface de uma classe em um que um cliente espera. Um adaptador permite que classes trabalhem juntas.

Adapter (Structural Patterns) Há dois tipos de padrões adaptadores: Object Adapter pattern o adaptador contém uma instância da classe que envolve

Adapter (Structural Patterns) Class Adapter pattern o adaptador usa herança a múltipla m relativamente aos interfaces

Bridge (Structural Patterns) Este padrão de desenho é feito para desacoplar uma abstracção da sua implementação de modo a que os dois possam variar independentemente. A bridge (ponte) usa encapsulamento, agregação, e pode usar herança a para separar responsabilidades em classes diferentes.

Estrutura Bridge (Structural Patterns)

Composite (Structural Patterns) Composite em POO é um objecto (p.e. uma forma) desenhado como uma composição de um ou mais objectos semelhantes (outros tipos de formas), todos eles com uma funcionalidade semelhante como uma composição de um ou mais objectos semelhantes.

Estrutura Composite (Structural Patterns)

Decorator (Structural Patterns) Permite adicionar dinamicamente novos comportamentos a um método m jáj existente. Faz-se envolvendo o novo objecto "decorator" em torno do objecto original (passando o objecto original como parâmertro ao construtor do decorator implementando este a nova funcionalidade)

Decorator (Structural Patterns) O interface do objecto original tem que ser mantida pelo decorator. Decorators são alternativas ao subclassing. Subclassificação adiciona comportamentos em tempo de compilção time ao passo que os decoradores fornecem um novo comportamento em tempo de execução.

Façade ade (Structural Patterns) Façade é um objecto que fornece um interface simplificado a um corpo de código maior p.e., uma biblioteca de classe.

Façade ade (Structural Patterns) Uma façade ade pode: Facilitar a utilização e a compreensão de uma biblioteca de software tem métodos m apropriados para tarefas comuns; Reduzir dependências de código c exterior nos trabalhos internos da biblioteca maior flexibilidade no desenvolvimento do sistema; Envolver uma colecção de APIs (Application( Program Interface ) mal desenhada numa única e bem desenhada API.

Flyweight (Structural Patterns) Apropriada quando muitos objectos têm que ser manipulados e não nos podemos dar ao luxo de utilizar dados externos. Os dados não têm ponteiros para métodos m de tipos de dados porque isso iria consumir muito espaço. Em vez disso, as sub-rotinas são chamadas directamente.

Proxy (Structural Patterns) Proxy em geral é uma classe que funciona como interface para outra coisa; essa outra coisa pode ser uma ligação de rede, um objecto grande em memória, um ficheiro, ou outro recurso dispendioso ou impossível de duplicar.

Proxy (Structural Patterns) Este padrão pode ser usado quando múltiplas cópias c de um objecto complexo têm que existir é criada uma instância desse objecto complexo de modo a reduzir a memória utilizada pela aplicação; são criados múltiplos m objectos proxy, todos eles contendo uma referência para o único objecto complexo original.

Proxy (Structural Patterns) Quaisquer operações executadas nos proxys são reenviadas para o objecto original. Uma vez que todas as instâncias do proxy estejam fora do âmbito (scope), a memória do objecto complexo pode ser desalocada.

Proxy (Structural Patterns) Tipos de Padrão de Proxy: Remote Proxy: fornece uma referência para um objecto alocado num espaço o de endereçamento diferente na mesma máquina m ou noutra. Virtual Proxy: permite a criação, quando necessário, de um objecto de memória o objecto sós é criado quando é realmente necessário. Copy-On On-Write Proxy: Adia a clonagem de um objecto alvo até ele ser requerido pelas acções do cliente é realmente uma forma de proxy virtual. Protection (Access) Proxy: fornece clientes diferentes, com níveis n de acesso diferentes, a um objecto cliente.

Proxy (Structural Patterns) Cache Proxy: fornece armazenamento temporário rio dos resultados de operações alvo dispendiosas de modo a que múltiplos m clientes possam partilhar resultados. Firewall Proxy: protege alvos de maus clientes (ou vice versa). Synchronization Proxy: fornece acesso múltiplo m a um objecto alvo. Smart Reference Proxy: fornece acções adicionais quando quer que um objecto alvo seja referenciado - tal como contar o número n de referências a um objecto.

Behavioral Patterns Chain of responsibility Command Interpreter Iterator Mediator Memento Observer State Strategy Template method Visitor

Chain of Responsibility (Behavioral Patterns) Consiste numa fonte de objectos de comando e numa série s de objectos de processamento. Cada objecto de processamento contém m um conjunto lógico l que descreve os tipos de objectos de comando que pode manipular, e como passar aqueles que não pode manipular para o próximo objecto de processamento na cadeia também m existe um mecanismo para adicionar novos objectos de processamento nesta cadeia.

Chain of Responsibility (Behavioral Patterns) Permutações ões: : Comandos que podem ser enviados em direcções alternadas, formando uma árvore de responsabilidade. A recursividade pode continuar até o comando ser processado, ou até a árvore ser completamente explorada. Um bom exemplo poderia ser um interpretador XML. Este padrão promove a ideia de acoplamento solto uma prática de programação.

Command (Behavioral Patterns) Neste padrão os objectos são usados para representar acções um objecto de comando encapsula uma acção e os seus parâmetros.

Interpreter (Behavioral Patterns) A ideia básica b é implementar uma linguagem de computador especializada para resolver rapidamente uma classe definida de problemas - linguagens especializadas permitem, frequentemente, resolver um problema muito mais rapidamente que uma linguagem de carácter cter geral. Um exemplo comum são as linguagens especializadas de busca em bases de dados tais como o SQL; outro exemplo é o de linguagens especializadas vulgarmente utilizadas para descrever protocolos de comunicação; outro exmplo ainda é o de a maioria das linguagens de uso mais geral conterem várias v lingugens especializadas: uma para definir dados, outra para definir operações sobre os dados, outra para definir quando executar as operações, e outra ainda para definir como traduzir o programa para linguagem máquina. m

Iterator (Behavioral Patterns) Trata-se de um objecto que permite percorrer toda a sequência de elementos ou partes contidas num outro objecto tipicamente, uma lista ou um contentor; é também m chamado um cursor, especialmente no contexto de uma base de dados. Descrição Um iterador pode ser entendido como um ponteiro com duas operações básicas: referenciar um elemento particular de uma colecção (acesso ao elemento), e modificar-se a si próprio prio de modo a apontar para o próximo elemento. O objectivo primordial de um iterador é permitir a um utilizador processar cada elemento de um contentor isolando o utilizador da estrutura interna do contentor. Isto permite ao contentor armazenar elementos como entender permitindo ao utilizador tratá-lo como uma simples sequência ou lista. Normalmente o contentor fornece métodos m para criar iteradores.

Mediator (Behavioral Patterns) Fornece um interface unificado a um conjunto de interfaces num subsistema. Normalmente um programa é feito de uma quantidade, por vezes grande, de classes. Quando mais classes são desenvolvidas num programa, durante a manutenção, por exemplo, o problema da comunicação entre estas classes pode tornar-se complexo. Isto dificulta a leitura e a manutenção do programa, e pode dificultar também m as alterações pela repercussão no código c das outras classes. O padrão mediator direcciona este prolema promovendo acoplamento solto entre estas classes sendo a única classe que tem conhecimento detalhado dos métodos m das outras classes. As classes enviam mensagens à mediator quando precisam e esta passa-as às s classes que precisam de ser informadas.

Memento (Behavioral Patterns) Fornece a possibilidade para restaurar um objecto no seu estado anterior (fazer undo). O padrão memento é usado por dois objectos: o originator e o caretaker.. O originator é um objecto que tem um estado interno. O caretaker vai fazer algo ao originator, mas quer ser capaz de desfazer a modificação. O caretaker pede primeiro ao originator um objecto memento. Depois faz a operação, ou sequência de operações que ía a fazer. Para voltar atrás s retorna o objecto memento ao originator. O objecto memento é um objecto opaco que o caretaker não pode nem deve mudar. Exemplos clássicos do padrão memnto incluem a semente de um gerador de números n pseudo-aleat aleatório e o estado numa máquina m de estados finita.

Observer (Behavioral Patterns) Também m conhecida por publish subscribe é um padrão de desenho usado para observar o estado de um objecto num programa. A sua essência consiste em um ou mais objectos (observadores ou ouvintes) serem registados (ou registarem-se se eles próprios) prios) para observar um evento que pode ser levantado pelo objecto observado (o sujeito). (O objecto que pode levantar um evento mantém, m, geralmente, uma colecção de observadores.)

Observer (Behavioral Patterns)

State (Behavioral Patterns) Usado para representar o estado de um objecto. É um modo limpo de um objecto mudar parcialmente o seu tipo em tempo de execução. Por exemplo, num programa de desenho pode haver um interface abstracto que representa uma ferramenta; então, instâncias concretas dessa classe podiam representar um tipo de ferramenta. Quando um utilizador selecciona um tipo diferente de ferramenta, a apropriada seria instanciada. i O estado da ferramenta de desenho é representado inteiramente pela instância da AbstractTool. Isto torrna fácil f adicionar mais ferramentas e manter o seu comportamento localizado nessa subclasse de AbstractTool. ttool. Em oposição ao uso de um switch O padrão state pode ser usado para substituir um switch(), que pode p ser difícil de manter e são menos seguros.

Strategy (Behavioral Patterns) Por este padrão podem ser seleccionados algoritmos em tempo de execução, dependendo das condições (como estratégias em tempo de guerra). O padrão strategy é útil para situações onde é necessário trocar dinamicamente de algoritmos usados na aplicação. É suposto que este padrão forneça a meios para definir uma família de algoritmos, encapsule cada um como um objecto, e os torne cambiáveis. Este padrão permite que os algoritmos variem independentemente dos clientes que os usam.

Template Method (Behavioral Patterns) Um método m template define o esqueleto de um algoritmo em termos de operações abstractas as quais são sobrepostas por subclasses que fornecem um comportamento concreto.

Visitor (Behavioral Patterns) O padrão visitor é um modo de separar um algoritmo de uma estrutura de um objecto. Um resultado prático desta separação é a capacidade de adicionar novas operações às s estruturas de objectos existentes sem modificar essas estruturas. A ideia é usar uma estrutura de classes de elementos, cada uma das quais tem um método m de aceitação que toma o objecto visitor como argumento. O visitor é um interface que tem um método m visit() diferente para cada classe elemento. O método m accept() para uma classe elemento chama o método m visit() para a sua classe. Classes visitor concretas separadas podem p então ser escritas para executar operações particulares. Um destes métodos m visit() de um visitor concreto pode ser visto como método, m não de uma única classe, mas como métodos m de um par de classes: o visitor concreto e uma classe elemento particular. Este padrão especifica como ocorre a iteração sobre a estrutura do objecto.

Referências Floyd Marinescu, EJB Design Patterns http://www.guj.com.br www.guj.com.br/java.tutorial.artigo.1 37.1.guj James W. Cooper, The Design Patterns Java Companion