Design patterns

52
Design Patterns O que são e quando devem ser usados?

description

Palestra sobre Design Patterns, abordando alguns principios de orientação a objetos e alguns design patterns.

Transcript of Design patterns

Page 1: Design patterns

Design Patterns

O que são e quando devem ser usados?

Page 3: Design patterns

Lucas Teixeirahttp://github.com/loteixeira

Page 4: Design patterns

photoshop, grids, cores, arquitetura, urbanismo, desenho, isso é outra coisa...

NÃO é sobre design

Page 5: Design patterns

é SIM sobre o seu código

problemas

escreveré sobre como

resolvercomuns

seu código para

Page 6: Design patterns

conte me mais sobre isso...

Page 7: Design patterns

vamos ter uma "SmallTalk"

Page 8: Design patterns

Gang of four

Page 9: Design patterns

é tudo sobre OOP

encapsulation, polymorphism, decouple, são palavras comuns quando se fala em design patterns

Page 10: Design patterns

é comum entre diferentes linguagens para resolver os mesmos problemas

é uma linguagem comum entre programadores

Page 11: Design patterns

let's take a look how they are organized...

vamos ver como são organizados

Page 12: Design patterns

Padrões Criacionais

Abstract FactoryBuilderFactory MethodLazy InitializationMultitonObject PoolPrototypeSingletonResource acquisition is initialization

Page 13: Design patterns

Padrões Estruturais

AdapterCompositeBridgeDecoratorFacadeFlyweightFront ControllerModuleProxy

Page 14: Design patterns

Padrões Comportamentais

Chain of responsibilityCommandInterpreterIteratorMediatorMementoNull objectObserverServantSpecificationStateStrategyTemplate MethodVisitor

Page 15: Design patterns

Padrões Concorrentes

Active ObjectBalkingBinding propertiesDouble-checked lockingEvent-based asynchronousGuarded suspensionLockMessaging design pattern (MDP)Monitor objectReactorRead-write lockSchedulerThread poolThread-specific storage

Page 16: Design patterns

mas cada um com um propósito especial

existem vários design patterns

Page 17: Design patterns

vamos para ação

Page 18: Design patterns

Observer

"O padrão Observer define uma dependência de um-para-muitos entre objetos, onde os observadores serão notificados sobre mudanças no estado interno do objeto central."

Page 20: Design patterns

Resumão

● Acoplamento fraco;

● Possui implementação nativa em várias linguagens modernas;

● Normalmente usado com o padrão MVC para a comunicação entre suas camadas;

● Auxilia na comunicação de objetos distantes;

● É Async provavelmente tem ele!

Page 21: Design patterns

Adapter

"O padrão Adapter (também chamado de Wrapper), é usado para conectar diferentes interfaces de forma consistente. Ele provê uma interface compatível com o código-cliente usando internamente a interface original."

Page 23: Design patterns

Resumão

● Mesmo princípio dos adaptadores de tomadas elétricas;

● É uma caixa preta capaz processor um input para produzir o output desejado;

● Facilita a conversão de tipos e a integração entre diferentes bibliotecas.

Page 24: Design patterns

Factory

"O padrão Factory é responsável pela criação de objetos. Ele pode fornecer uma interface para criação de famílias de objetos sem a necessidade de especificar sua classe concreta"

Page 26: Design patterns

Resumão

● Comum em bibliotecas de GUI - onde todos elementos possuem a mesma interface, embora o comportamento interno seja particular a cada um

● É normal aparecer junto de outros padrões de projeto (strategy, dependency injection, etc)

● Auxilia na implementação de testes automatizados

● É o cara para criar objetos dinâmicamente!

Page 27: Design patterns

Iterator

"O padrão Iterator permite a iteração entre os elementos de uma coleção qualquer, sem levar em consideração sua implementação e/ou como esses dados são armazenados."

Page 29: Design patterns

Resumão

● Interface única e simplificada para iterar sobre todos elementos de uma coleção

● A estrutura interna, usada para armazenar os itens da coleção, torna-se irrelevante para o programador-usuário

● Possibilita a criação de Coleção de Objetos ao invês de uso de tipos nativos (array, map);

Page 30: Design patterns

MVC

"Model-view-controller é um padrão de projeto que visa modularizar o sistema em três partes independentes: model (dados/informação), controller (lógica da aplicação) e view (interação com o usuário)."

Page 32: Design patterns

Resumão

● Separa as camadas de negócio da sua aplicação;

● Foi idealizado para lidar com pequenas camadas!

● Mal compreendido pela sociedade programadora!

Page 33: Design patterns

Proxy

"Um proxy, em sua forma mais geral, é uma classe que funciona como uma interface para outra classe. A classe proxy poderia conectar-se a qualquer coisa: uma conexão de rede, um objeto grande em memória, um arquivo, ou algum recurso que é difícil ou impossível de ser duplicado." Wikipédia

Page 35: Design patterns

Resumão

● LazyLoad é com ele!

● Auxilia acesso remoto de classes;

● Operações custosas, vão começar a custar barato :)

● Null pattern pode ser com ele também!

Page 36: Design patterns

Singleton

"O Singleton é uma classe de uma instância única com um ponto de acesso global. Seu objetivo é ser um objeto "solitário", independente do ciclo de vida da aplicação."

Page 38: Design patterns

Resumão

● Não é o mesmo que uma classe com métodos estáticos

● Classe de um único objeto

● Amplamente usada com bibliotecas de logging/debugging

● Controverso, muitas vezes considerado um anti-pattern

● É um inferno para testar!

Page 39: Design patterns

Dependecy Injection

"O modelo isola a "lógica" (A lógica da aplicação) da interface do usuário (Inserir e exibir dados), permitindo desenvolver, editar e testar separadamente cada parte." Wikipédia

Page 41: Design patterns

Resumão

● Esse cara sou eu (DI)!

● Chega a nem ser um padrão de tão simples!

● Torna seu código testável e auxilia no desacoplamento do código (avoid no new)

●DIC ajudam na instância de objetos com multiplas depêndecias (aninhados)

Page 42: Design patterns

Tá, chega, cansei de legos...

Page 43: Design patterns

e o que isso me ajuda no fim?

ma vamo lá, só mais um pouco...

Page 44: Design patterns

a se tornar um OO star! \m/

Page 45: Design patterns

com código para orgulhar a família

desacopladotestável

legível

extensível

reutilizável

orientado a

interfaces

Page 46: Design patterns

mas.... tenha em mente que Design Patternsnão é a RESPOSTA para tudo!

Page 47: Design patterns

mas que possívelmente alguém já passou pelo mesmo

problema que você

Page 48: Design patterns

design patterns estão sendo criados todos dias...

Page 49: Design patterns

Nome: Hack ThursdayExemplo: Apresentação de HojeContexto: Aplicável todas as quintasProblema: Sede de "conhecimento"Solução: Vir todas as quintas

você também pode criar os seus!

Page 50: Design patterns
Page 51: Design patterns

"Herança pode ser o câncer do seu código!" by Nós

lembre é Orientação a Objetos não a Classes.

Page 52: Design patterns

Perguntas e Cerveja?