Design patterns

Post on 28-Jun-2015

1.095 views 1 download

description

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

Transcript of Design patterns

Design Patterns

O que são e quando devem ser usados?

Lucas Teixeirahttp://github.com/loteixeira

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

NÃO é sobre design

é SIM sobre o seu código

problemas

escreveré sobre como

resolvercomuns

seu código para

conte me mais sobre isso...

vamos ter uma "SmallTalk"

Gang of four

é tudo sobre OOP

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

é comum entre diferentes linguagens para resolver os mesmos problemas

é uma linguagem comum entre programadores

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

vamos ver como são organizados

Padrões Criacionais

Abstract FactoryBuilderFactory MethodLazy InitializationMultitonObject PoolPrototypeSingletonResource acquisition is initialization

Padrões Estruturais

AdapterCompositeBridgeDecoratorFacadeFlyweightFront ControllerModuleProxy

Padrões Comportamentais

Chain of responsibilityCommandInterpreterIteratorMediatorMementoNull objectObserverServantSpecificationStateStrategyTemplate MethodVisitor

Padrões Concorrentes

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

mas cada um com um propósito especial

existem vários design patterns

vamos para ação

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."

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!

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."

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.

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"

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!

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."

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);

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)."

Resumão

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

● Foi idealizado para lidar com pequenas camadas!

● Mal compreendido pela sociedade programadora!

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

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!

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."

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!

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

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)

Tá, chega, cansei de legos...

e o que isso me ajuda no fim?

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

a se tornar um OO star! \m/

com código para orgulhar a família

desacopladotestável

legível

extensível

reutilizável

orientado a

interfaces

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

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

problema que você

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

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!

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

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

Perguntas e Cerveja?