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



Documentos relacionados
1Introdução Helder da Rocha

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

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

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

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

Design Patterns. Viviane Torres da Silva

Prof.ª Esp. Talita Pagani

Padrões de Projeto de Software Orientado a Objetos

Design Pattern Implementation in Java and AspectJ

Padrões GoF. Leonardo Gresta Paulino Murta

Testes com Design Patterns

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

Padrões de Projeto WEB e o MVC

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 de projeto 1

INF011 Padrões de Projeto. 02 Creational Patterns

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

Análise e Projeto Orientados por Objetos

Análise e Projeto Orientados por Objetos

Mas o que é mesmo Padrão de Projeto?

Prototype, um Design Patterns de Criação

PADRÕES DE PROJETO. Cleviton Monteiro

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

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

Padrões de Software (Software Patterns)

Tópicos Avançados em Engenharia de Software

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

Universidade Federal de Uberlândia Faculdade de Computação Prof. Fabiano Dorça. Introdução. Padrões de projeto

Argo Navis J931 - Padrões de Design J2EE. Introdução. Objetivos de aprender padrões J2EE. Conhecer padrões para uso na plataforma J2EE

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

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

Padrões de Software (Software Patterns)

2 Engenharia de Software

Padrões de Desenho (Design Patterns)

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

Padrões. Projeto (Design) de Software

Programação com Objectos

Refatoração de sistemas Java utilizando padrões de projeto: um estudo de caso

Capítulo 2. Processos de Software Pearson Prentice Hall. Todos os direitos reservados. slide 1

Eduardo Bezerra. Editora Campus/Elsevier

PRODUTO 1 (CONSTRUÇÃO DE PORTAL WEB)

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

Gerenciamento da Integração (PMBoK 5ª ed.)

Padrões de Projeto. Parte 1. Prof. Fellipe Aleixo

Engenharia de Software e Gerência de Projetos Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios

Autoria:Aristófanes Corrêa Silva Adaptação: Alexandre César M de Oliveira

Engenharia de Software II

TechProf Documento de Arquitetura

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

Fundamentos de Banco de Dados e Modelagem de Dados

Análise e Projeto. Padrões de Análise, Arquitetura e Projeto

Prof. Me. Marcos Echevarria

INF011 Padrões de Projeto Introdução

Padrões de Interação com o Usuário

Tema 1: Modelo Estático

Padrões de Design. Jair C Leite

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

Banco de Dados Orientado a Objetos

Histórico de revisões

Padrões de Projeto de Software Orientado a Objetos

SISTEMA TYR DIAGRAMAS DE CLASSE E SEQUÊNCIA Empresa: Academia Universitária

Implementando uma Classe e Criando Objetos a partir dela

Programação Orientada a Objetos

Padrões de Desenho Engenharia de Software

Arquitectura de Sistemas de Software

Processos de gerenciamento de projetos em um projeto

TÉCNICAS DE PROGRAMAÇÃO

Tópicos Especiais em Informática Fatec Indaiatuba

2 Diagrama de Caso de Uso

Padrões Comportamentais

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

MedEl: Uma solução de E-Learning utilizando tecnologia Microsoft ASP.NET

ÍNDICE. Delphi... 3 CAPÍTULO 1 INTRODUÇÃO CAPÍTULO 2 INSTALANDO O DELPHI... 10

Padrões de Projeto de Software

Programação com Objectos. Programação Centrada em Objectos. Home Page. Ano Lectivo 2008/2009 1º Semestre. Objectivos Programa Bibliografia Avaliação

" ##$#$!% # & #$#$ !!!!"!

Tópicos da Aula. POO e Padrões de Projetos. Considere três classes... Reuso de Classes. Locadora de DVD. Sistema Acadêmico

Uma Noção Intuitiva dos Padrões de Desenho de Software

PADRÕES DE PROJETO E FRAMEWORK NO DESENVOLVIMENTO DE SOFTWARE

Padrões. Identificando padrões

Padrões de Projeto de Software

Tecnologias Web. Padrões de Projeto - Camada de Apresentação

Especialização em web com interfaces ricas

Apesar de existirem diversas implementações de MVC, em linhas gerais, o fluxo funciona geralmente da seguinte forma:

Análise e Projeto Orientados a Objeto

Análise e Projeto de Software

Proposta para a Implementação do Cadastro de um Log de Auditoria Baseada em Padrões de Projeto

Prof. Dr. Dilermando Piva Jr. Fatec Indaiatuba

Curso - Padrões de Projeto Módulo 5: Model-View- Controller

3.1 Definições Uma classe é a descrição de um tipo de objeto.

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

Leitura. Capítulo 7 (Prog. Orient. a Obj. usando Java - 4th Edition)

Unidade II MODELAGEM DE PROCESSOS

Transcrição:

Curso - Padrões de Projeto Módulo 1: Introdução Vítor E. Silva Souza vitorsouza@gmail.com http://www.javablogs.com.br/page/engenho http://esjug.dev.java.net

Sobre o Instrutor Formação: Java: Graduação em Ciência da Computação, com ênfase em Engenharia de Software, pela Universidade Federal do Espírito Santo (UFES); Mestrado em Informática (em andamento) na mesma instituição. Desenvolvedor Java desde 1999; Especialista em desenvolvimento Web; Autor do blog Engenho www.javablogs.com.br/page/engenho. Profissional: Consultor em Desenvolvimento de Software Orientado a Objetos Engenho de Software Consultoria e Desenvolvimento Ltda. 2

Estrutura do Curso Módulo 1 Módulo 2 Módulo 3 Módulo 4 Módulo 5 Introdução Padrões de Criação Padrões de Estrutura Padrões de Comportamento O Padrão Model-View-Controller 3

Conteúdo deste módulo O que são e por que conhecê-los; Catálogos de padrões; Padrões de projeto na prática: Como resolvem os problemas; Como escolher e utilizar; Frameworks. Anti-padrões. 4

Curso - Padrões de Projeto Módulo 1: Introdução O que são Padrões de Projeto e por que utilizá-los?

Desenvolvimento de Software Desenvolver sistemas OO reutilizáveis é muito difícil; Profissionais experientes fazem bons projetos, novatos têm dificuldade; Experiência consiste em utilizar técnicas que deram certo no passado. 6

Nascem os padrões Padrões são maneiras testadas e documentadas de alcançar objetivos; Padrões são comuns nas diversas áreas da engenharia; Na Engenharia de Software temos os Padrões de Projeto Design Patterns. 7

O que são padrões de projeto Cada padrão descreve um problema que ocorre repetidas vezes no nosso ambiente e, então, descreve o núcleo da solução para aquele problema, de forma que você pode reutilizar a mesma solução milhões de vezes sem nunca fazê-la da mesma forma duas vezes. Christopher Alexander, et. al A Pattern Language (1977) 8

O que são padrões de projeto Descrição de uma solução customizada para resolver um problema genérico de projeto em um contexto específico. [...] Um padrão de projeto dá nome, abstrai e identifica os aspectos-chave de uma estrutura de projeto comum para torná-la reutilizável. Erich Gamma, et. al Design Patterns, Elements of Reusable Object-Oriented Software (1994) 9

Como é formado um padrão Quatro elementos essenciais: Nome; Descrição do problema e contexto para os quais o padrão se aplica; Descrição da solução genérica proposta; Consequências da aplicação do padrão (custos e benefícios). 10

Por que usar padrões Aprender com a experiência de outros: Ajudam a resolver os principais problemas dos iniciantes; Permitem que façamos bons projetos mais rapidamente. O jargão facilita a comunicação; Software de melhor qualidade: Melhores práticas em OO; Soluções bem testadas e documentadas. 11

Curso - Padrões de Projeto Módulo 1: Introdução Catálogos de Padrões de Projeto: classificação e resumo dos padrões mais conhecidos.

Catálogos de padrões Registram as experiências bemsucedidas de um grupo de pessoas: Livro Design Patterns Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (Gang of Four); Padrões J2EE da Sun http://java.sun.com/blueprints /patterns/ Dentre outros... 13

Descrição dos padrões do GoF Nome e classificação; Colaborações; Consequências; Intenção; Implementação; Outros nomes; Código de exemplo; Motivação; Usos conhecidos; Aplicabilidade; Estrutura; Padrões relacionados. Participantes; 14

Organização do catálogo do GoF Propósito Criação Estrutura Comportamento Classe Factory Method Adapter (classe) Interpreter Template Method Escopo Objeto Abstract Factory Builder Prototype Singleton Adapter (objeto) Bridge Composite Decorator Façade Flyweight Proxy Chain of Responsibility Command Iterator Mediator Memento Observer State Strategy Visitor 15

Organização do catálogo do GoF Propósito: Criacional: processo de criação de objetos; Estrutural: composição de classes e objetos; Comportamental: interação e distribuição de responsabilidades entre objetos e classes; Escopo: Classe: relação entre classes e subclasses (herança); Objeto: relação entre objetos (associação, composição). 16

Padrões de Criação Factory Method (Método Fábrica): Define uma interface para criação de objetos mas deixa a implementação para as subclasses. Abstract Factory (Fábrica Abstrata): Provê uma interface para criação de famílias de objetos relacionados sem especificar suas classes concretas. Builder (Construtor): Separa o processo de construção de objetos complexos, desacoplando a criação de instâncias destes objetos. 17

Padrões de Criação Prototype (Protótipo): Define um protótipo dos objetos a serem usados e cria-os clonando este protótipo. Singleton (Objeto Único): Garante que uma classe possui somente uma instância e provê um ponto de acesso global a ela. 18

Padrões de Estrutura Adapter (Adaptador): Converte uma interface de uma classe em outra que objetos clientes esperam utilizar. Bridge (Ponte): Desacopla uma abstração de sua implementação para que ambas possam variar independentemente. Composite (Composto): Agrupa objetos de mesma interface em estrutura de árvore para tratar todos eles como se fossem uma única entidade. 19

Padrões de Estrutura Decorator (Decorador): Estende a funcionalidade de um objeto dinamicamente anexando objetos que irão executar antes ou depois do objeto decorado. Façade (Fachada): Provê uma interface única (ponto central) para diversas outras interfaces do sistema. 20

Padrões de Estrutura Flyweight (Peso Mosca): Forma um pool de objetos imutáveis para serem utilizados em diversas partes do sistema. Proxy (Procurador): Provê um intermediário (procurador) que representa o objeto mas se comporta de forma diferente. 21

Padrões de Comportamento Interpreter (Interpretador): Criar uma linguagem de representação de operações e construir um interpretador para essa linguagem. Template Method (Método Modelo): Define o esqueleto do algorítmo da operação na superclasse, delegando partes do mesmo para as subclasses. Chain of Responsibility (Cadeia de Repons.): Monta uma corrente de objetos que serve a uma requisição, dando a cada um a oportunidade de respondê-la e/ou passá-la adiante. 22

Padrões de Comportamento Command (Comando): Encapsula requisições como objetos, permitindo parametrização, log ou undo de funções. Iterator (Iterador): Acessar diversos elementos de um conjunto em sequência sem expor sua representação interna. Mediator (Mediador): Delega a um objeto a responsabilidade de fazer outros objetos se comunicarem, tirando destes últimos o acoplamento entre si. 23

Padrões de Comportamento Memento (Recordação): Sem violar o encapsulamento, armazena o estado atual do objeto para que possa ser restaurado posteriormente. Observer (Observador): Define uma dependência um-para-muitos entre objetos tal que quando um objeto muda de estado, todos são notificados. State (Estado): Permite que um objeto altere seu comportamente quando mudar seu estado. 24

Padrões de Comportamento Strategy (Estratégia): Define uma família de algorítmos, encapsula-os em objetos e permite que sejam intercambiados. Visitor (Visitante): Representa operações em objetos como outros objetos com uma interface comum, permitindo que sejam criadas novas operações sem alterar o objeto. 25

Relacionamento entre os Padrões Consulte o livro do GoF para mais detalhes. 26

Outros padrões GoF é a referência clássica; Novos problemas incitam a criação de novos padrões de projeto; Muitos utilizam ou são baseados nos padrões já descritos no catálogo do GoF. É importante conhecê-los porque se referem a domínios mais específicos: Ex.: um desenvolvedor J2EE deve conhecer os padrões de projeto J2EE. 27

Outros padrões exemplos: Injeção de Dependências (ou IoC): Tira a responsabilidade do objeto encontrar sua dependência, que é automaticamente injetada por um objeto externo. Model View Controller: Utiliza Observer, Composite e Strategy para definir uma divisão entre dados (modelo), interface com o usuário (visão) e a lógica de controle. 28

Outros padrões exemplos: Value Object (VO / DTO): Cria uma cópia do objeto de domínio com algumas informações necessárias e enviaa como parâmetro no lugar do objeto original. Data Access Object (DAO): Delega a uma classe específica toda a lógica de acesso a dados persistentes (banco de dados). 29

Curso - Padrões de Projeto Módulo 1: Introdução Padrões de Projeto na Prática: como os padrões resolvem problemas, como selecionálos e utilizá-los.

Determinando os objetos mais apropriados Decompor um sistema em objetos é difícil. Várias questões: Encapsulamento, granularidade, dependências, flexibilidade, desempenho, evolução, reusabilidade, etc. Padrões de projeto podem ajudar: Identificação de abstrações menos óbvias de conceitos não presentes na natureza, como um algorítmo ou um estado. 31

Determinando a granularidade ideal Um objeto pode representar uma aplicação inteira ou um detalhe minúsculo. Como escolher? Padrões de projeto podem ajudar: Façade explica como representar sistemas inteiros num só objeto; Flyweight descreve como utilizar muitos objetos de pequena granularidade; Abstract Factory, Builder, Visitor e Command descrevem formas específicas de composição de objetos. 32

Especificando interfaces Interfaces: Conjunto de mensagens que um objeto aceita (contrato, assinaturas); Objetos são conhecidos pelas interfaces, que nada dizem sobre a implementação. Padrões de projeto podem ajudar: Identificam os elementos-chave de interfaces; Restringem o que incluir em interfaces; Estabelecem relacionamentos entre elas. 33

Especificando implementações Boa prática: programe para interfaces, não para implementações ; Padrões de projeto podem ajudar: Abstraem o processo de criação de objetos, desacoplando os objetos clientes de implementações, permanecendo somente as interfaces. 34

Tirando proveito do reuso Como construir software reutilizável? Dê preferência à composição de objetos em detrimento à herança de classes. Padrões de projeto podem ajudar: Delegação dá mais poder à composição. 35

Relacionando estruturas em tempo de compilação e execução A estrutura runtime é bem diferente do código: dinamismo e interação; Ex.: agregação e associação são codificadas da mesma forma, mas são bem diferentes em runtime. Padrões de projeto podem ajudar: Se você entende o padrão, passa a entender a distinção, que está explícita na documentação do padrão. 36

Projetando para mudanças Sistemas devem ser projetados para facilitarem a manutenção: Riscos de custos imprevistos; Retrabalho. Padrões de projeto podem ajudar: Promovem desacoplamento, permitindo maior liberdade dos objetos; Código mais robusto, legível e de maior qualidade. 37

Causas de retrabalho e padrões (GoF) que as evitam 1. Criação de objeto especifica classe explicitamente: O sistema está preso a uma implementação específica; Solução: criar objetos indiretamente com Abstract Factory, Factory Method ou Prototype. 2. Dependência em operações específicas: O sistema só tem uma forma de satisfazer a uma requisição; Solução: evitar requisições hard-coded com Chain of Responsibility ou Command. 38

Causas de retrabalho e padrões (GoF) que as evitam 1. Dependência de plataforma: O software utiliza recursos específicos de uma plataforma; Solução: limitar dependências com Abstract Factory ou Bridge. 2. Dependência em representações ou implementações de objetos: Clientes que sabem como um objeto é implementado, representado ou armazenado podem ter que ser alterados se o objeto mudar; Solução: isolar os clientes com Abstract Factory, Bridge, Memento ou Proxy. 39

Causas de retrabalho e padrões (GoF) que as evitam 1. Dependência de algorítmo: Objetos que dependem de algorítmos precisam mudar quando o algorítmo mudar; Solução: isolar os algorítmos com Builder, Iterator, Strategy, Template Method ou Visitor. 2. Forte acoplamento: Classes fortemente acopladas são difíceis de reusar, testar, manter, etc. Sistema monolítico; Solução: enfraquecer o acoplamento com Abstract Factory, Bridge, Command, Chain of Responsibility, Façade, Mediator ou Observer. 40

Causas de retrabalho e padrões (GoF) que as evitam 1. Extensão de funcionalidade por meio de subclasse: Herança é difícil de usar, composição dificulta a compreensão; Solução: usar padrões que implementem bem herança, composição e delegação como Bridge, Chain of Responsibility, Composite, Decorator, Observer ou Strategy. 2. Incapacidade de alterar classes convenientemente: Classes inacessíveis, imcompreensíveis ou difíceis de alterar; Solução: usar Adapter, Decorator ou Visitor. 41

Como selecionar um padrão Entenda como os padrões ajudam a resolver problemas em OO; Revise as intenções de cada padrão; Estude como os padrões se interrelacionam; Estude as similaridades entre os padrões de mesmo propósito; Conheça as principais causas de retrabalho; Considere o que você pode querer mudar em seu projeto no futuro. 42

Resumo do Catálogo do GoF Padrões de Criação Padrão Abstract Factory Builder Factory Method Prototype Singleton Aspectos que podem variar Famílias de objetos produto. Como um objeto composto é criado. Subclasse do objeto que é instanciado. Classe do objeto que é instanciado Uma única instância da classe. 43

Resumo do Catálogo do GoF Padrões de Estrutura Padrão Adapter Bridge Composite Decorator Façade Flyweight Proxy Aspectos que podem variar Inteface para um objeto. Implementação de um objeto. Estrutura e composição de um objeto. Responsabilidades de um objeto sem recorrer à herança. Interface para um subsistema. Custo de armazenamento de objetos. Como um objeto é acessado, sua localização. 44

Resumo do Catálogo do GoF Padrões de Comportamento Iterator Mediator Padrão Chain of Responsibility Command Interpreter Aspectos que podem variar Objeto que pode responder a uma requisição. Onde e como uma requisição é respondida. Gramática e interpretação de uma linguagem. Como elementos agregados são acessados. Como e quais objetos interagem uns com os outros. 45

Resumo do Catálogo do GoF Padrões de Comportamento Padrão Memento Observer State Strategy Template Method Visitor Aspectos que podem variar Quais informações privadas são armazenadas fora do objeto e quando. Número de objetos que dependem de outro e como estes ficam atualizados. Estados de um objeto. Um algoritmo. Passos de um algoritmo. Operações que podem ser aplicadas a objetos sem alterar suas classes. 46

Como usar um padrão 1. Leia o padrão todo uma vez; 2. Estude o código fonte de exemplo; 3. Escolha nomes para os participantes do padrão dentro do seu contexto; 4. Defina as novas classes e modifique classes existentes que são afetadas; 5. Defina nomes para as operações do padrão dentro do seu contexto; 6. Implemente as operações. 47

Curso - Padrões de Projeto Módulo 1: Introdução Anti-Padrões: soluções que você deve evitar.

O que é um anti-padrão Antipatterns são soluções que trazem mais complicação do que benefício; Pode advir de: Uso incorreto de padrões de projeto; Criação de um novo padrão sem as devidas reflexões e testes; O que era bom ontem pode não ser mais. É necessário entendê-los para não cair em armadilhas e, se cair, saber se recuperar delas. 49

Exemplos de anti-padrões Analysis paralysis; Stovepipe system; Design by committee; Copy and paste programming; Spaghetti code; God object/class; Vendor lock-in; E muitos outros... 50

Para saber mais... Neste curso iremos focar nos padrões de projeto, e não nos anti-padrões; Para saber mais: Wikipedia http://en.wikipedia.org/wiki/antipattern Antipatterns.com: http://www.antipatterns.com/ 51

Curso - Padrões de Projeto Módulo 1: Introdução Vítor E. Silva Souza vitorsouza@gmail.com http://www.javablogs.com.br/page/engenho http://esjug.dev.java.net