Padrões de Projeto 1 - Introdução a Padrões de Projeto Eduardo de Lucena Falcão Padrões de Projeto - Introdução • Site da disciplina: http://edufalcao.me/design-patterns/ • Grupo (facebook): Padrões de Projeto - DCX/UFPB • Contato: [email protected] 2 • Expectativas? • OO e Design Patterns • Padrões de projeto são resultados da experiência dos melhores projetistas de software OO. • Objetivo: reuso dos padrões/ideias (!código) • Soluções ad hoc vs soluções baseadas em padrões Flexibilidade, modularidade e reuso Padrões de Projeto - Introdução Apresentação 3 A Inspiração problema que ocorre repetidamente de novo e de novo em nosso ambiente, e então descreve a parte central da solução para aquele problema de uma forma que você pode usar esta solução um milhão de vezes, sem nunca implementa-la duas vezes da mesma forma.” - Christopher Alexander Padrões de Projeto - Introdução • A ideia de padrões foi apresentada por Christopher Alexander em 1977 no contexto de Arquitetura (de prédiospadrão e cidades): “Cada descreve um 4 Padrões de Projeto - Introdução A ideia é reutilizar experiências bem sucedidas ao invés de redescobri-las! 5 • E. Gamma and R. Helm and R. Johnson and J. Vlissides. Design Patterns - Elements of Reusable Object-Oriented Software. Addison-Wesley, 1995. Padrões de Projeto - Introdução Gang of Four (GoF) 6 • Passamos a ter um vocabulário comum para conversar sobre projetos de software. • Soluções que não tinham nome passam a ter nome. • Ao invés de discutirmos um sistema em termos de pilhas, filas, árvores e listas ligadas, passamos a falar de coisas de muito mais alto nível como Fábricas (Factory), Fachadas (Façades), Observador (Observer), Estratégia (Strategy), Objetos Singulares (Singleton), etc. • A maioria dos autores eram entusiastas de Smalltalk, principalmente o Ralph Johnson. • Mas acabaram baseando o livro em C++ para que o impacto junto à comunidade de C fosse maior. E o impacto foi enorme, o livro vendeu centenas de milhares de cópias. Padrões de Projeto - Introdução Gang of Four (GoF) 7 Características • Ser comprovados, isto é, devem ter sido previamente experimentados e testados; • Tratar problema que ocorram em diferentes contextos; • Descrever relações entre conceitos, mecanismos e estruturas existentes nos sistemas, seus pontos fortes e fracos; • Ser utilizados em conjunto com outros padrões, compondo linguagens de padrões. Padrões de Projeto - Introdução • Descrever e justificar soluções para problemas concretos e bem definidos (não são estratégias de implementação); 8 • Nome do padrão Na ótica programação/implementação osproblema padrões • Umade referência que podemos usar para descrever um de projeto, suas soluções e consequências em uma ou duas de projeto podem ser explicados como descrições de palavras. objetos e classes comunicantes que precisam ser • Problema personalizadas para resolver um problema geral de • Descreve em que situação aplicar poderíamos aplicar o padrão. projeto particular. Algumas vezes istonum inclui contexto uma lista de condições que devem ser satisfeitas para que faça sentido aplicar o padrão. • Solução Padrões de projeto permitem que os desenvolvedores • Descreve os elementos que compõem os padrões de projetos, concentrem seus esforços nos aspectos inéditos do seus comportamentos, responsabilidades e colaborações. problema. • Consequências • Os resultados e análise das vantagens e desvantagens (trade-off) da aplicação do padrão. Padrões de Projeto - Introdução Os 4 elementos de um padrão 9 • • • • • • • • Evita a redescoberta de soluções; Propicia o uso de soluções corretas; Melhora a qualidade do software; Permitem que os desenvolvedores concentrem seus esforços nos aspectos inéditos do problema; Economiza esforço e tempo de desenvolvimento e manutenção; Melhora a confiabilidade do software; Conduz ao bom uso de orientação a objetos; Provê uma linguagem comum entre desenvolvedores: • Compõem um vocabulário de alto nível para discussão de questões relativas ao projeto de sistemas de software. Padrões de Projeto - Introdução Vantagens no uso de Padrões de Projeto 10 Exemplo 1: abordagem MVC Observer Observer Padrões de Projeto - Introdução Observer 11 Padrões de Projeto - Introdução Exemplo 1: Observer 12 Descrevendo Padrões de Projeto • Nome e classificação do padrão • Intenção e objetivo • É uma curta declaração que responde às seguintes questões: o que faz o padrão de projeto? Quais os seus princípios e sua intenção? Que tópico ou problema particular de projeto ele trata? • Também conhecido como • Outros nomes bem conhecidos para o padrão, se existirem. • Motivação • Um cenário que ilustra um problema de projeto e como as estruturas de classes e objetos no padrão solucionam o problema. Padrões de Projeto - Introdução • O nome do padrão expressa a sua própria essência de forma sucinta. Um bom nome é vital, porque ele se tornará parte do seu vocabulário de projeto. 13 Descrevendo Padrões de Projeto • Aplicabilidade • Estrutura • Uma representação gráfica das classes do padrão usando uma notação baseada na Object Modeling Technique (OMT) • Participantes • As classes e/ou objetos que participam do padrão de projeto e suas responsabilidades. Padrões de Projeto - Introdução • Quais são as situações nas quais o padrão de projeto pode ser aplicado? Que exemplos de maus projetos ele pode tratar? Como você pode reconhecer essas situações? • Colaborações • Como as classes participantes colaboram para executar suas responsabilidades. 14 Descrevendo Padrões de Projeto • Consequências • Implementação • Que armadilhas, sugestões ou técnicas você precisa conhecer quando da implementação do padrão? Existem considerações específicas de linguagem? • Exemplo de código • Usos conhecidos • Exemplos do padrão encontrados em sistemas reais. • Padrões relacionados • Que padrões de projeto estão intimamente relacionados com este? Quais são as diferenças importantes? Com quais outros padrões este deveria ser usado? Padrões de Projeto - Introdução • Como o padrão suporta a realização de seus objetivos? Quais são os seus custos e benefícios e os resultados da sua utilização? Que aspecto da estrutura de um sistema ele permite variar independentemente? 15 • Categorias de Padrões do GoF • Padrões de criação • Padrões estruturais • Padrões comportamentais Padrões de Projeto - Introdução Tipos de Padrões de Projeto 16 Classificação • Padrões responsáveis pelo processo de criação dos objetos; • Abstraem o processo de instanciação; • Tornam um sistema independente da forma como os objetos são criados, compostos e representados. Padrões de Projeto - Introdução • Padrões de Criação 17 Classificação • Lidam com a composição de classes ou objetos para formar grandes estruturas no sistema. Padrões de Projeto - Introdução • Padrões Estruturais 18 Classificação • Caracterizam a forma como classes ou objetos interagem e distribuem responsabilidade. Padrões de Projeto - Introdução • Padrões Comportamentais 19 1.Abstract Factory 2.Builder 3.Factory Method 4.Prototype 5.Singleton 6.Adapter 7.Bridge 8.Composite 9.Decorator 10.Facade 11.Flyweight 12.Proxy 13.Chain of Responsibility 14.Command 15.Interpreter 16.Iterator 17.Mediator 18.Memento 19.Observer 20.State 21.Strategy 22.Template Method Padrões de Criação 23.Visitor Padrões Estruturais Padrões de Comportamento Padrões de Projeto - Introdução Cardápio 20 1. Qual a importância dos padrões de projeto? Por que usar padrões de projetos? Quais são as vantagens? 2. Quais são os três tipos de padrões e quais as diferenças entre eles? Padrões de Projeto - Introdução Exercício Proposto 21 • Dê uma olhada no GoF ou no Use a Cabeça! Padrões de Projetos • a biblioteca deve possuir algumas cópias! • Buscar por “GoF patterns” no google • Minha recomendação para quem está iniciando nesse tema é o da serie Use a Cabeça – Padrões de Projetos. Padrões de Projeto - Introdução Para pesquisar em casa 22 • E. Gamma and R. Helm and R. Johnson and J. Vlissides. Design Patterns - Elements of Reusable Object-Oriented Software. Addison-Wesley, 1995. • Notas de Aula do Prof. Nécio Lima Veras Padrões de Projeto - Introdução Referências 23