1 - Introdução a Padrões de Projeto

Slides:



Advertisements
Apresentações semelhantes
Soluções elegantes para problemas recorrentes
Advertisements

Padrão de Projeto Iterator
PADRÕES DE PROJETO..
Design Patterns Patrícia Mateus nº3343 Carla Guerreiro nº3157
Engenharia de Software
Modelagem de Software Orientado a Objetos
Design Patterns Builder Pattern
Projeto de Sistemas de Software
Projeto de Sistemas de Software
Projeto de Sistemas de Software
Abstract Factory – Gustavo Lopes Mourad.
1 Introdução aos padrões de projeto (GoF) Conceitos preliminares –Mecanismos de herança –Princípio de Substituição de Liskov –Acoplamento concreto x Acoplamento.
Análise e Projeto de Sistemas
Padrões - introdução O que é um padrão?
Trabalho de Conclusão de Curso Moisés Alves Carneiro Filho
Design Pattern e a Reusabilidade de Software
Padrão de Construção Factory Method
Design Patterns Projeto de Sistemas de Software.
Fundamentos da Engenharia de Software
Visão crítica sobre padrões: Over Engineering
Padrões de projeto detalhados Factory Method, Abstract Factory
Vector To Raster Factory & Strategy Eric Silva Abreu São José dos Campos - 15 de dezembro de 2006.
Módulo III Padrões GOF Professores
Projeto de Sistemas de Software
Padrões de Projeto Aplicações empresariais são complexas
Design Patterns e você. Jay Moretti Grupo de desenvolvedores Actionscripts do Brasil
Rodrigo Cândido da Silva Instrutor VOffice / Globalcode
Padrões de Projeto These slides complement the E-book, Programming in the Large With Design Patterns available on both Kindle and Nook. Additional supporting.
Design Pattern (Padrões de Projeto)
Padrões de Projeto.
Introdução Padrões de Projeto
April 05 Prof. Ismael H. F. Santos - 1 Módulo I Princípios e Padrões de Projeto de SW em Java Professores Eduardo Bezerra –
Design Patterns (Padrões de Projeto)
Padrão de Projeto Iterator Projeto de Sistemas de Software Thiago Pinheiro de Araújo.
Padrões de Design Toacy Cavalcante de Oliveira. 2 April 20, 2015 Problema.
Padrões de Projeto Abstract Factory.
Design Patterns Fundamentos da engenharia de softaware. 19/1/2003.
Padrões de Projeto.
Padrão de desenvolvimento
April 05 Prof. Ismael H. F. Santos - 1 Modulo I Princípios e Padrões de Projeto de SW em Java Professores Eduardo Bezerra –
April 05 Prof. Ismael H. F. Santos - 1 Módulo III Padrões GOF: AbstractMethod Professores Eduardo Bezerra –
Design Patterns A adoção dos padrões terá um efeito profundo e duradouro sobre a forma de escrevermos programas Ward Cunningham e Ralph Johnson.
Padrões de Projeto de Software Orientado a Objetos
Padrões de Projeto Alcides Calsavara
1 Padrões: Composite (p. 163) Objetivo: compor objetos em estruturas de árvores para representar relações de parte/todo. “Composite” permite tratar objetos.
Padrões de projeto M.Sc. Sílvio Bacalá Jr..
1 Design Patterns Israel Rios. 2 Origens A idéia de padrões de projeto não teve origem na ciência da computação Christopher Alexander A Pattern Language:
Padrão Composite Definição
Objetos Distribuídos Frameworks Orientados a Objetos.
Frameworks e Componentes Daniel Fernando Pavelec.
Jobson Ronan Padrões GoF Jobson Ronan
CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 1: INTRODUÇÃO Prof. Cesar Augusto Tacla UTFPR/Campus.
Análise e Projeto de Sistemas Orientado a Objetos Profa. Ana Karina Barbosa.
CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS Prof. Cesar Augusto Tacla UTFPR/Campus Curitiba.
Módulo II Capítulo 1: Orientação a Objetos
Padrões de Projetos Professora Lucélia. Conceitos É uma solução conhecida para um problema comum São técnicas que nos dão uma boa solução para determinados.
Padrões de Projetos Orientados a Objetos I Wolley W. Silva.
PADROES DE PROJETO PROF. OSIEL MARLON. PADRÕES DE PROJETO INTRODUÇÃO Padrões de projeto têm emergido como uma das mais promissoras abordagens para a melhoria.
Padrões de Projeto. O que são?  Soluções provenientes de diversos projetos e utilizados por diversos programadores;  Documentados em catálogos como.
UCSal – Bacharelado em Informática Tópicos Especiais em Informática II Profa. Semíramis Assis
©2003, Alexandre Vasconcelos & Augusto Sampaio CIn-UFPE1/65 Padrões de Projeto.
Padrões de Projeto de Criação Padrões de Projeto Orientados a Objetos Prof a. Danielle Martin Universidade de Mogi das Cruzes.
Jadson Xavier Muller Oliveira.  É difícil encontrar alguma definição consensual de padrão.  Definição aceitável: - São idéias que foram úteis em algum.
1 Padrões de Projeto de Software Orientado a Objetos Programação Orientada a Objetos Prof. Fabio Kon - IME/USP.
1 Introdução aos Padrões de Projetos Créditos: Prof. Fabio Kon - IME/USP Adaptações: Prof. Nécio de Lima Veras.
Introdução a Padrões de Projeto Padrões de Projeto Orientado a Objetos Profa. Danielle Martin Universidade de Mogi das Cruzes.
Programação Orienta a Objetos (SI) Análise e Projetos de Sistemas (LCC) 1 - Introdução a Padrões de Projeto Eduardo de Lucena Falcão.
Introdução a Padrões de Projeto Padrões de Projeto Orientado a Objetos Profa. Danielle Martin Universidade de Mogi das Cruzes.
Padrões de Projeto Estruturais
Padrões de Projeto.
Transcrição da apresentação:

1 - Introdução a Padrões de Projeto Eduardo de Lucena Falcão

Site da disciplina: http://edufalcao.me/design-patterns/ Grupo (facebook): Padrões de Projeto - DCX/UFPB Contato: eduardolfalcao@dcx.ufpb.br Padrões de Projeto - Introdução

Apresentação 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 Essa disciplina não é uma introdução à tecnologia orientada a objetos ou a padrões orientados a objetos. Pra essa disciplina seria interessante que vocês já tivessem um contato com alguma linguagem OO (no nosso caso Java) e conhecessem pelo menos os conceitos básicos de OO como herança e polimorfismo... Na disciplina de padrões de projetos o nosso objetivo não é mais aprender a programar de forma orientada a objetos. Nós usamos esta técnica que aprendemos anteriormente para implementar soluções utilizando padrões de projetos. A ideia dos padrões de projetos é que nós utilizemos soluções simples para problemas específicos no projeto de software orientado a objetos. Nessa disciplina nós vamos reaproveitar os esforços que vários desenvolvedores de software fizeram para modelar seus sistemas de modo flexível e modularizado, e posteriormente documentaram isso. Nosso objetivo é entender essas soluções de maneira sucinta e a partir de alguns exemplos, termos noção de como as aplicaríamos em uma situação real. Geralmente os padrões de projetos utilizam recursos comuns da linguagem OO. Nenhum truque que você utilize para impressionar alguém (seu gerente ou seu amigo). Porém, podem exigir um pouco mais de trabalho do que soluções ad hoc. Todavia, esse esforço adicional vale a pena. Com ele, nós conseguimos desenvolver um software mais modularizado e flexível, de modo que facilite a manutenção. Quando a gente compreende bem e passa a saber utilizar os padrões de projetos, a gente nunca mais volta a pensar no projeto orientado a objetos da maneira com que fazíamos. Os nossos projetos vão se tornando cada vez mais flexíveis, modulares, reutilizáveis e compreensíveis – o real motivo para nós estarmos estudando esse assunto.

A Inspiração A ideia de padrões foi apresentada por Christopher Alexander em 1977 no contexto de Arquitetura (de prédios e cidades): “Cada padrão descreve um 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 Exemplo de analogias: cinema e novela Cinema: um “amor impossível”, como no filme do Titanic Novela: novelas românticas do SBT (maria do bairro, maria mercedes, maria alguma coisa)

A ideia é reutilizar experiências bem sucedidas ao invés de redescobri-las! Padrões de Projeto - Introdução Sempre que formos resolver um novo problema, nunca devemos partir do zero, mas sim utilizar um padrão consistente que já foi amplamente utilizado e testado por muitas pessoas, e que nós sabemos que verdadeiramente funciona. A ideia é reutilizar projetos bem sucedidos e basear os novos projetos na experiência anterior.

Gang of Four (GoF) 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) 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

Características Descrever e justificar soluções para problemas concretos e bem definidos (não são estratégias de implementação); 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

Os 4 elementos de um padrão Na ótica de programação/implementação os padrões de projeto podem ser explicados como descrições de objetos e classes comunicantes que precisam ser personalizadas para resolver um problema geral de projeto num contexto particular. Padrões de projeto permitem que os desenvolvedores concentrem seus esforços nos aspectos inéditos do problema. Nome do padrão Uma referência que podemos usar para descrever um problema de projeto, suas soluções e consequências em uma ou duas palavras. Problema Descreve em que situação aplicar poderíamos aplicar o padrão. Algumas vezes isto inclui uma lista de condições que devem ser satisfeitas para que faça sentido aplicar o padrão. Solução Descreve os elementos que compõem os padrões de projetos, seus comportamentos, responsabilidades e colaborações. 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 Comentários Nome do padrão: Dar nome a um padrão aumenta imediatamente o nosso vocabulário de projeto. Isso nos permite projetar em um nível mais alto de abstração. Ter um vocabulário para padrões permite-nos conversar sobre eles com nossos colegas, em nossa documentação e até com nós mesmos. O nome torna mais fácil pensar sobre projetos e a comunicá-los, bem como os custos e benefícios envolvidos, a outras pessoas. Problema: Ele explica o problema e seu contexto. Pode descrever problemas de projeto específicos, tais como representar algoritmos como objetos. Pode descrever estruturas de classe ou objeto sintomáticas de um projeto inflexível. Algumas vezes, o problema incluirá uma lista de condições que devem ser satisfeitas para que faça sentido aplicar o padrão. Solução: A solução não descreve um projeto concreto ou uma implementação em particular porque um padrão é como uma “técnica” que pode ser aplicado em muitas situações diferentes. Em vez disso, o padrão fornece uma descrição abstrata de um problema de projeto e de como um arranjo geral de elementos (classes e objetos, no nosso caso) o resolve. Consequência: Embora as conseqüências sejam raramente mencionadas quando descrevemos decisões de projeto, elas são críticas para a avaliação de alternativas de projetos e para a compreensão dos custos e benefícios da aplicação do padrão. As conseqüências para o software freqüentemente envolvem balanceamento entre espaço e tempo. Elas também podem abordar aspectos sobre linguagens e implementação. Uma vez que a reutilização é freqüentemente um fator no projeto orientado a objetos, as conseqüências de um padrão incluem o seu impacto sobre a flexibilidade, a extensibilidade ou a portabilidade de um sistema. Relacionar essas conseqüências explicitamente ajuda a compreendê-las e avaliá-las.

Vantagens no uso de Padrões de Projeto 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

Exemplo 1: abordagem MVC Observer Observer Observer Padrões de Projeto - Introdução Este é um exemplo de projeto que separa visões, lógica de negócios (controller) e modelo. A abordagem MVC separa, por exemplo, visão e modelos através de noticações subscribe/notify. Esta abordagem permite ligar várias views a um modelo. Cada view se inscreve (subscribe) para receber atualizações de um modelo, que por sua vez notificará as views de que o modelo foi atualizado, de modo que as views também possam ser atualizadas. Se analisarmos com cautela, com esse projeto nós podemos separar objetos de maneira que mudanças ocorridas em um possam afetar um número qualquer de outros objetos, sem exigir que o objeto alterado (modelo, no nosso exemplo) conheça detalhes desses outros objetos.

Exemplo 1: Observer Padrões de Projeto - Introdução

Descrevendo Padrões de Projeto Nome e classificação do padrã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. 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

Descrevendo Padrões de Projeto Aplicabilidade 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? 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. Colaborações Como as classes participantes colaboram para executar suas responsabilidades. Padrões de Projeto - Introdução

Descrevendo Padrões de Projeto Consequências 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? 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

Tipos de Padrões de Projeto Categorias de Padrões do GoF Padrões de criação Padrões estruturais Padrões comportamentais Padrões de Projeto - Introdução

Classificação Padrões de Criaçã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 Por exemplo, através de um método create() podemos criar vários tipos de objetos. E não somente através dos construtores específicos desses objetos... Mais detalhes nas aulas dos padrões, de forma específica.

Classificação Padrões Estruturais Lidam com a composição de classes ou objetos para formar grandes estruturas no sistema. Padrões de Projeto - Introdução

Classificação Padrões Comportamentais Caracterizam a forma como classes ou objetos interagem e distribuem responsabilidade. Padrões de Projeto - Introdução

Cardápio 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 Projeto - Introdução Padrões de Criação Padrões Estruturais Padrões de Comportamento

Exercício Proposto Qual a importância dos padrões de projeto? Por que usar padrões de projetos? Quais são as vantagens? Quais são os três tipos de padrões e quais as diferenças entre eles? Padrões de Projeto - Introdução

Para pesquisar em casa 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 O Use a Cabeça é bem mais didático do que o GoF. Para iniciantes, recomendaria ele.

Referências 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