27
1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

Embed Size (px)

Citation preview

Page 1: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

1

Design Pattern(Padrões de Projeto)

Prof. Alexandre Monteiro

Recife

Page 2: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

Contatos

Prof. Guilherme Alexandre Monteiro Reinaldo

Apelido: Alexandre Cordel

E-mail/gtalk: [email protected]

[email protected]

Site: http://www.alexandrecordel.com.br/fbv

Celular: (81) 9801-1878

Page 3: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

Origem Padrão de Projeto Christopher Alexander em seus livros (1977/1979) Notes on the

Synthesis of Form, The Timeless Way of Building e A Pattern Language, estabelece que um padrão deve ter, idealmente, as seguintes características:

• Encapsulamento: um padrão encapsula um problema ou solução bem definida. Ele deve ser independente, específico e formulado de maneira a ficar claro onde ele se aplica.

• Generalidade: todo padrão deve permitir a construção de outras realizações a partir deste padrão.

• Equilíbrio: quando um padrão é utilizado em uma aplicação, o equilíbrio dá a razão, relacionada com cada uma das restrições envolvidas, para cada passo do projeto. Uma análise racional que envolva uma abstração de dados empíricos, uma observação da aplicação de padrões em artefatos tradicionais, uma série convincente de exemplos e uma análise de soluções ruins ou fracassadas pode ser a forma de encontrar este equilíbrio.

• Abstração: os padrões representam abstrações da experiência empírica ou do conhecimento cotidiano.

• Abertura: um padrão deve permitir a sua extensão para níveis mais baixos de detalhe.

• Combinatoriedade: os padrões são relacionados hierarquicamente. Padrões de alto nível podem ser compostos ou relacionados com padrões que endereçam problemas de nível mais baixo.

Page 4: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

Características de Padrão de Projeto

Alexander definiu que um padrão deve ser descrito em cinco partes:

• Nome: uma descrição da solução, mais do que do problema ou do contexto.

• Exemplo: uma ou mais figuras, diagramas ou descrições que ilustrem um protótipo de aplicação.

• Contexto: a descrição das situações sob as quais o padrão se aplica.

• Problema: uma descrição das forças e restrições envolvidos e como elas interagem.

• Solução: relacionamentos estáticos e regras dinâmicas descrevendo como construir artefatos de acordo com o padrão, freqüentemente citando variações e formas de ajustar a solução segundo as circunstâncias. Inclui referências a outras soluções e o relacionamento com outros padrões de nível mais baixo ou mais alto.

Page 5: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

Introdução à Padrão de Projeto

É uma solução geral reutilizável para um problema que ocorre com frequência dentro de um determinado contexto no projeto de software.

Um padrão de projeto não é um projeto finalizado que pode ser diretamente transformado em código fonte ou de máquina, ele é uma descrição ou modelo (template) de como resolver um problema que pode ser usado em muitas situações diferentes.

Padrões são melhores práticas formalizadas que o programador pode usar para resolver problemas comuns quando projetar uma aplicação ou sistema.

Page 6: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

Introdução à Padrão de Projeto

Padrões de projeto orientados a objeto normalmente mostram relacionamentos e interações entre classes ou objetos, sem especificar as classes ou objetos da aplicação final que estão envolvidas.

Padrões que implicam orientação a objetos ou estado mutável mais geral, não são tão aplicáveis em linguagens de programação funcional.

Page 7: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

Padrão GoF Livro Design Patterns: Elements of Reusable Object-Oriented

Software, publicado em 1995.

Autores: Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides, são conhecidos como a "Gangue dos Quatro" (Gang of Four) ou simplesmente "GoF".

Os padrões "GoF" são organizados em 3 famílias :• Padrões de criação: relacionados à criação de objetos

• Padrões estruturais: tratam das associações entre classes e objetos.

• Padrões comportamentais: tratam das interações e divisões de responsabilidades entre as classes ou objetos.

Padrão "GoF" é classificado em 2 outros grupos :• Padrões com escopo de classe : definido por relacionamentos de

herança e em tempo de compilação.

• Padrões com escopo de objeto : encontrados no relacionamento entre os objetos definidos em tempo de execução.

Page 8: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

Alguns Padrões de Projeto

Padrões de criação• Abstract Factory | Builder | Factory Method | Prototype | Singleton

Padrões estruturais• Adapter | Bridge | Composite | Decorator | Façade (ou Facade) |

Flyweight | Proxy

Padrões comportamentais• Chain of Responsibility | Command | Interpreter | Iterator |

Mediator | Memento | Observer | State | Strategy | Template Method | Visitor

Utilizaremos em nosso projeto 2 desses padrões:

• Facade e Singleton

Page 9: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

Facade ou Fachada

É um objeto que disponibiliza uma interface simplificada para uma das funcionalidades de uma aplicação.

Page 10: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

Singleton

Este padrão garante a existência de apenas uma instância de uma classe, mantendo um ponto global de acesso ao seu objeto.

Ex.: Conexão com banco de dados, Log de sistema, Sessão de Aplicação, etc.

Page 11: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

Fachada + Singleton

(DADOS) (VIEW)

(CONTROLLER)

MODEL(Objet

o)

Browser

JSP

JAVA

JAVA

SQL

HIBERNATE HQL

Linguagens

MODEL(Objet

o)

TABELA(Registr

o)

Mapeamento Objeto-

Relacional

Evolução dos Dados

(MODEL)

Fachada

Page 12: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

Fachada + Singleton

Singleton

Fachada

Page 13: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

Continuação: Fachada + Singleton

Page 14: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

Controlador

Deverá ser criado um pacote “controlador” ou “controller”, no qual deverá constar um conjunto de classes de controle referentes a cada uma da Entidades manipuladas para o projeto.

Page 15: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

Controlador

Page 16: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

Controlador: saveUsuario(u)

Page 17: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

Controlador: deleteUsuario(u)

Page 18: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

Controlador: updateUsuario(u)

Page 19: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

Controlador: listUsuarios()

Page 20: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

Controlador: searchUsuario_(...)

Page 21: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

Exception

Deverá ser criado um pacote “exception”, no qual deverá constar um conjunto de classes de exceções referentes a cada uma da Entidades manipuladas para o projeto.

Page 22: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

DAO (Data Access Object)

Objetivo•Prover isolamento da tecnologia de persistência.

Propósito•O padrão Data Access Object (DAO) é um padrão

introduzido no ambiente JEE [3] para simplificar e desacoplar a interação das aplicações Java com a API JDBC.

Page 23: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

DAO (Data Access Object)

O problema que o padrão DAO tenta resolver tem, na realidade, três perspectivas:

• Legado: Queremos encapsular lógicas de persistência legadas escritas com SQL ou outras tecnologias de forma simples. Queremos apenas utilizar as tecnologias java, mas manter as mesmas regras de negócio.

• Isolamento: Queremos que a aplicação seja isolada da API com que está comunicando. Queremos poder alterar a API utilizada internamente sem alterar o contrato de acesso aos dados.

• Mapeamento de Objetos: Queremos utilizar objetos no ambiente Java. Queremos poder utilizar os mesmos objetos independentemente da API de persistência. Normalmente isto passa por respeitar algum Mapeamento Objeto-Relacional - ORM (Object-Relational Mapping).

Page 24: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

DAO (Data Access Object)

A principal vantagem do DAO é ter um local onde todo o acesso a dados será concentrado, ao invés de ter várias classes que manipulam dados espalhadas pela aplicação.

A desvantagem é acrescentar mais uma camada (interface), aumentar o nível de complexidade, ficar um pouco mais pesado por ter que instanciar mais classes.

Page 25: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

DAO (Data Access Object)

A interface do padrão original é simples. São fornecidos métodos para as operações CRUD, sendo que a operação de recuperação é distribuída em diferentes métodos de pesquisa especializados. São estes métodos especializados que encapsulam facilmente lógicas de pesquisa de sistemas legados.

Page 26: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

DAO (Data Access Object)

Page 27: 1 Design Pattern (Padrões de Projeto) Prof. Alexandre Monteiro Recife

DAO Genérico