design patterns
DESCRIPTION
Palestra sobre Design Patterns, abordando alguns principios de orientação a objetos e alguns design patterns.TRANSCRIPT
![Page 1: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/1.jpg)
Design Patterns
O que são e quando devem ser usados?
![Page 2: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/2.jpg)
Vinícius Krolow@krolowhttp://github.com/krolow
![Page 3: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/3.jpg)
Lucas Teixeirahttp://github.com/loteixeira
![Page 4: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/4.jpg)
photoshop, grids, cores, arquitetura, urbanismo, desenho, isso é outra coisa...
NÃO é sobre design
![Page 5: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/5.jpg)
é SIM sobre o seu código
problemas
escreveré sobre como
resolvercomuns
seu código para
![Page 6: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/6.jpg)
conte me mais sobre isso...
![Page 7: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/7.jpg)
vamos ter uma "SmallTalk"
![Page 8: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/8.jpg)
Gang of four
![Page 9: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/9.jpg)
é tudo sobre OOP
encapsulation, polymorphism, decouple, são palavras comuns quando se fala em design patterns
![Page 10: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/10.jpg)
é comum entre diferentes linguagens para resolver os mesmos problemas
é uma linguagem comum entre programadores
![Page 11: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/11.jpg)
let's take a look how they are organized...
vamos ver como são organizados
![Page 12: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/12.jpg)
Padrões Criacionais
Abstract FactoryBuilderFactory MethodLazy InitializationMultitonObject PoolPrototypeSingletonResource acquisition is initialization
![Page 13: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/13.jpg)
Padrões Estruturais
AdapterCompositeBridgeDecoratorFacadeFlyweightFront ControllerModuleProxy
![Page 14: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/14.jpg)
Padrões Comportamentais
Chain of responsibilityCommandInterpreterIteratorMediatorMementoNull objectObserverServantSpecificationStateStrategyTemplate MethodVisitor
![Page 15: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/16.jpg)
mas cada um com um propósito especial
existem vários design patterns
![Page 17: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/17.jpg)
vamos para ação
![Page 18: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/18.jpg)
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 19: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/19.jpg)
show me CODE
![Page 20: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/21.jpg)
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 22: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/22.jpg)
show me CODE
![Page 23: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/24.jpg)
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 25: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/25.jpg)
show me CODE
![Page 26: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/26.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/27.jpg)
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 28: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/28.jpg)
show me CODE
![Page 29: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/29.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/30.jpg)
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 31: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/31.jpg)
show me CODE
![Page 32: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/32.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/33.jpg)
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 34: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/34.jpg)
show me CODE
![Page 35: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/35.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/36.jpg)
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 37: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/37.jpg)
show me CODE
![Page 38: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/38.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/39.jpg)
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 40: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/40.jpg)
show me CODE
![Page 41: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/41.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/42.jpg)
Tá, chega, cansei de legos...
![Page 43: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/43.jpg)
e o que isso me ajuda no fim?
ma vamo lá, só mais um pouco...
![Page 44: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/44.jpg)
a se tornar um OO star! \m/
![Page 45: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/45.jpg)
com código para orgulhar a família
●
■
●
●
●
●
desacopladotestável
legível
extensível
reutilizável
orientado a
interfaces
![Page 46: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/46.jpg)
mas.... tenha em mente que Design Patternsnão é a RESPOSTA para tudo!
![Page 47: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/47.jpg)
mas que possívelmente alguém já passou pelo mesmo
problema que você
![Page 48: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/48.jpg)
design patterns estão sendo criados todos dias...
![Page 49: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/49.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/50.jpg)
![Page 51: Design patterns](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/51.jpg)
"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](https://reader034.vdocuments.mx/reader034/viewer/2022042614/558fc5241a28ab654e8b456d/html5/thumbnails/52.jpg)
Perguntas e Cerveja?