SlideShare uma empresa Scribd logo
1 de 133
Thiago Boufleuhr
                                      Arquiteto de Soluções




Bem vindo!
segunda-feira, 10 de dezembro 2012
agenda




 f(x)
agenda




@     ?
s.o.l.i.d.




Alguns tópicos podem ferir
    seus sentimentos.
s.o.l.i.d.


  “...5 princípios básicos de programação
 orientada à objetos, quando    aplicados de
  forma conjunta visam garantir a facilidade
de manutenção e evolução ao longo do
       tempo de vida de um   software...”
                                            Uncle Bob
s.o.l.i.d.
                         Single
                       Responsibility




Dependency                                         Open
 Inversion                                             Closed


                       SOLID

         Interface                       Liskov
         Segregation                    Substitution
s.o.l.i.d.


fato!
 “...você   não programa
               orientado a   objetos...”
s.o.l.i.d.
single responsibility principle

...um objeto deve possuir apenas
    uma única responsabilidade
  e apenas um motivo para mudar...
s.o.l.i.d.
s.o.l.i.d.
open/closed principle

...uma classe deve ser aberta para extensão
        e   fechada para modificação...
s.o.l.i.d.
s.o.l.i.d.
liskov substitution principle

...objetos devem ser substituíveis pelo seu
       super tipo sem afetar o correto
  comportamento do sistema...
s.o.l.i.d.
s.o.l.i.d.
s.o.l.i.d.
interface segregation principle

...interfaces de granularidade alta para
       necessidades específicas do cliente...
s.o.l.i.d.
s.o.l.i.d.
dependency inversion principle

 ...desenvolva para abstrações,
          não para classes concretas...
s.o.l.i.d.
s.o.l.i.d.
design patterns




...soluções reutilizáveis para
      problemas recorrentes no
 desenvolvimento de software...
design patterns
design patterns
design patterns
design patterns
design patterns
design patterns
design patterns




   abstract factory
   builder
   prototype
   singleton
design patterns
abstract factory



      fornece uma interface para criar
    famílias de objetos relacionados ou
        dependentes sem especificar
           suas classes concretas
design patterns
abstract factory
design patterns
builder



separa a construção de um objeto complexo
   da sua representação, de modo que o
      mesmo processo de construção
    possa criar diferentes representações
design patterns
builder
design patterns
prototype



  especifica um tipo de objeto a ser criado
   usando uma instância como protótipo
           para criar novos objetos
design patterns
prototype
design patterns
singleton



  garante que um objeto terá apenas uma
    instância e define um ponto único
         de acesso a essa instância
design patterns
singleton
design patterns




   adapter
   bridge
   composite
   decorator
   facade
   proxy
design patterns
adapter


converte a interface de uma classe em outra
     interface esperada pelos clientes,
permite que classes trabalhem juntas mesmo
       com interfaces incompatíveis
design patterns
adapter
design patterns
bridge



     desacopla uma abstração da sua
  implementação para que ambas possam
       variar de forma independente
design patterns
bridge
design patterns
composite



compõe objetos em estruturas de árvore para
     representar hierarquias parte-todo,
         permite que clientes tratem
objetos individuais e composições de objetos
             de maneira uniforme
design patterns
composite
design patterns
decorator



     anexa responsabilidades adicionais
       a um objeto de forma dinâmica,
          fornecendo uma alternativa
  flexível para extensão de comportamento
design patterns
decorator
design patterns
facade



   fornece uma interface unificada para um
  conjunto de interfaces em um subsistema,
define uma interface de nível mais elevado para
  abstrair a lógica de subsistemas complexos
design patterns
facade
design patterns
proxy



permite abstrair o objeto em uso através de
    uma interface comum, delegando a
 execução do comportamento ao mesmo
design patterns
proxy
design patterns

 command     template method
 state       visitor
 strategy    observer
design patterns
command



encapsula uma solicitação em forma de objeto,
     permite parametrizar as requisições
    ao longo das chamadas a esse objeto
design patterns
command
design patterns
state



      permite que um objeto altere seu
     comportamento quando seu estado
  interno muda, o objeto irá alterar seu tipo
design patterns
state
design patterns
strategy



      define uma família de algoritmos,
encapsula cada um, e torna-os intercambiáveis,
        permite que o algoritmo varie
independentemente dos clientes que o utilizam
design patterns
strategy
design patterns
template method



    define o esqueleto de um algoritmo
 deixando alguns passos para as subclasses
         redefinirem algumas etapas
    sem alterar a estrutura do algoritmo
design patterns
template method
design patterns
visitor



representa uma operação a ser realizada sobre
    elementos de uma estrutura de objeto,
 permite que você defina uma nova operação
     sem alterar as classes dos elementos
              sobre os quais atua
design patterns
visitor
design patterns
observer



  define uma dependência um-para-muitos
    entre objetos, de modo que quando
         um objeto muda de estado,
 todos os seus dependentes são notificados
       e atualizados automaticamente
design patterns
observer
design patterns
design patterns
ioc – di
ioc – di
inversion of control
ioc – di
inversion of control



  uma classe não deve conhecer como suas
      dependências são criadas, somente
   a interface pública de acesso as mesmas
ioc – di
inversion of control

• desacopla componentes e camadas em um sistema

• remove a responsabilidade de um componente resolver suas dependências

• permite a troca da implementação em diferentes ambientes

• permite que o componente seja testável (mock, unit test)

• fornece um mecanismo para troca de recursos em uma aplicação
ioc – di
inversion of control
ioc – di
inversion of control
ioc – di
dependency injection
ioc – di
dependency injection



 uma forma prática de aplicar o conceito de
      IoC, diminuindo o acoplamento
   entre uma classe e suas dependências
ioc – di
dependency injection

• permite que o componente seja testável (mock, unit test)

• promove baixo acoplamento entre classes e subsistemas

• adiciona flexibilidade potencial para futuras mudanças

• habilita uma forma de reusar componentes para fins semelhantes

• A implementação é simples e não precisa de um container de DI
ioc – di
dependency injection
ioc – di
dependency injection

• Ninject - http://www.ninject.org/

• Simple Injector - http://simpleinjector.codeplex.com/

• Unity 2.1 - http://msdn.microsoft.com/en-us/library/dd203101.aspx

• Structure Map - http://docs.structuremap.net/

• Windsor - http://docs.castleproject.org/Active%20Record.MainPage.ashx

• AutoFac - http://code.google.com/p/autofac/
ioc – di
dependency injection
ioc – di
dependency injection




                 singleton
ioc – di
dependency injection




                 transient
ioc – di
dependency injection




                combined
functions
anonymous
functions
functions
anonymous



a partir do C# 2.0 foi introduzido o conceito
   de métodos anônimos (sem um nome)
functions
anonymous



permite declarar de forma in line um método
 sem a necessidade da lista de parâmetros
functions
anonymous



   todo método anônimo é um delegate
functions
anonymous
functions
lambda
functions
lambda



     uma expressão lambda é uma
             função anônima
      utilizada para criar delegates
            ou expression trees
functions
lambda



utilizada para criar funções anônimas locais,
 que podem ser passadas como parâmetros
       ou retornadas de outros métodos
functions
lambda



substitui a utilização de anonymous methods
     adicionando mais funcionalidades
                em sua execução
functions
lambda


   (input parameters) => { statement; }

             (x, y) => x == y

     (int x, string s) => s.Length > x

          ( ) => MeuMetodo()
functions
lambda
functions
lambda
functions
extensions
functions
extensions


 permite adicionar novos comportamentos
 em objetos, sem a necessidade de derivar
de um tipo base, implementar uma interface
    ou até mesmo recompilar o código
functions
extensions
tpl – async/await
tpl – async/await
conceitos

  síncrono:
     thread é bloqueada até que o
     processamento seja finalizado


  assíncrono:
    thread não é bloqueado até que
    o processamento seja finalizado
tpl – async/await
conceitos
tpl – async/await
conceitos
tpl – async/await
tpl – async/await
task parallel library


   define um conjunto de API’s públicas no
        namespace System.Threading
 responsável por abstrair a complexidade de
   trabalhar em ambientes multithreaded e
              de forma paralela
tpl – async/await
task parallel library

• trabalha com todos os processadores disponíveis

• simplifica a aplicação do conceito

• suporta cancelamento de execução (token)

• gerenciamento de estado

• melhora a performance do código particionando a execução lógica
tpl – async/await
task parallel library
tpl – async/await
task parallel library
• nem todo código é desenhado para ser executado de forma paralela

• pode criar um overhead quando utilizado de forma incorreta

• necessário conhecer conceitos de:
   • locks
   • deadlocks
   • race conditions

• não considere como sendo a forma mais rápida de execução

• evite escrever em espaços compartilhados de memória (static)

• evite chamar métodos que não são thread safe
tpl – async/await
task parallel library
tpl – async/await
task parallel library



                    demo
tpl – async/await
async/await
tpl – async/await
async/await
tpl – async/await
async/await



              demo
tdd
test-driven development
tdd
problemática

               bom




    barato           rápido
tdd
problemática


                                      mais erros
         menos testes




                        menos tempo
tdd
problemática
tdd
problemática
tdd
problemática
tdd
problemática
tdd
problemática
tdd
problemática
tdd
problemática
tdd
problemática
tdd
solução: test-driven development



                “...remove o medo no
                   desenvolvimento de software...”


                     sinpo és dédi
tdd
test-driven development
tdd
 test-driven development

3 – elimine a                                       1 – escreva um
   redundância                                          teste que falhe
                                vermelho




           refactoring                                  verde


                         2 – escreva um código
                             para passar no teste
tdd
test-driven development
tdd
test-driven development
tdd
test-driven development
• assegura a qualidade do código

• garante a existência de testes unitários

• reduz a possiblidade de erros no código

• simplifica o código, uma vez que somente o necessário é programado

• define as interfaces entre os objetos (consumidor)

• permite definir os componentes de forma desacoplada, flexível e extensível

• documentação viva (runtime documentation)

• garante seu emprego!
tdd
test-driven development
tdd
test-driven development
tdd
test-driven development
tdd
test-driven development
tdd
test-driven development
tdd
test-driven development
dúvidas
obrigado

Mais conteúdo relacionado

Mais procurados

POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosLudimila Monjardim Casagrande
 
Engenharia de Software II - Atividade: Diagramas da UML
Engenharia de Software II - Atividade: Diagramas da UMLEngenharia de Software II - Atividade: Diagramas da UML
Engenharia de Software II - Atividade: Diagramas da UMLAlessandro Almeida
 
Curso : Introdução Orientação a Objetos
Curso : Introdução Orientação a ObjetosCurso : Introdução Orientação a Objetos
Curso : Introdução Orientação a Objetosdanielrpgj30
 
Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1Marcelo Zeferino
 
Padrão de Projeto - Adapter
Padrão de Projeto - AdapterPadrão de Projeto - Adapter
Padrão de Projeto - AdapterJuliana Cindra
 
design patterns - introdução
design patterns - introduçãodesign patterns - introdução
design patterns - introduçãoelliando dias
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Adriano Teixeira de Souza
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosLeonardo Melo Santos
 
Aulas de análise
Aulas de análiseAulas de análise
Aulas de análiseFrank Lira
 
Exercitando modelagem em UML
Exercitando modelagem em UMLExercitando modelagem em UML
Exercitando modelagem em UMLinfo_cimol
 
Semana 8: Classes e instâncias, cadeias de caracteres
Semana  8: Classes e instâncias, cadeias de caracteresSemana  8: Classes e instâncias, cadeias de caracteres
Semana 8: Classes e instâncias, cadeias de caracteresManuel Menezes de Sequeira
 
Programação orientada a objetos – II
Programação orientada a objetos – IIProgramação orientada a objetos – II
Programação orientada a objetos – IIGabriel Faustino
 
Integração de Tecnologias
Integração de TecnologiasIntegração de Tecnologias
Integração de Tecnologiaselliando dias
 
Orientação a Objetos
Orientação a ObjetosOrientação a Objetos
Orientação a ObjetosEdy Segura
 

Mais procurados (20)

POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a Objetos
 
Engenharia de Software II - Atividade: Diagramas da UML
Engenharia de Software II - Atividade: Diagramas da UMLEngenharia de Software II - Atividade: Diagramas da UML
Engenharia de Software II - Atividade: Diagramas da UML
 
Curso : Introdução Orientação a Objetos
Curso : Introdução Orientação a ObjetosCurso : Introdução Orientação a Objetos
Curso : Introdução Orientação a Objetos
 
Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1
 
Aula diagrama de classes
Aula diagrama de classesAula diagrama de classes
Aula diagrama de classes
 
Padrão de Projeto - Adapter
Padrão de Projeto - AdapterPadrão de Projeto - Adapter
Padrão de Projeto - Adapter
 
Encapsulamento em oo
Encapsulamento em ooEncapsulamento em oo
Encapsulamento em oo
 
design patterns - introdução
design patterns - introduçãodesign patterns - introdução
design patterns - introdução
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetos
 
Aulas de análise
Aulas de análiseAulas de análise
Aulas de análise
 
Design Patterns - Adapter e Decorator
Design Patterns - Adapter e DecoratorDesign Patterns - Adapter e Decorator
Design Patterns - Adapter e Decorator
 
Travalho versao final
Travalho versao finalTravalho versao final
Travalho versao final
 
Programação Orientado a Objetos
Programação Orientado a ObjetosProgramação Orientado a Objetos
Programação Orientado a Objetos
 
Exercitando modelagem em UML
Exercitando modelagem em UMLExercitando modelagem em UML
Exercitando modelagem em UML
 
Semana 8: Classes e instâncias, cadeias de caracteres
Semana  8: Classes e instâncias, cadeias de caracteresSemana  8: Classes e instâncias, cadeias de caracteres
Semana 8: Classes e instâncias, cadeias de caracteres
 
Programação orientada a objetos – II
Programação orientada a objetos – IIProgramação orientada a objetos – II
Programação orientada a objetos – II
 
Trabalho uml
Trabalho umlTrabalho uml
Trabalho uml
 
Integração de Tecnologias
Integração de TecnologiasIntegração de Tecnologias
Integração de Tecnologias
 
Orientação a Objetos
Orientação a ObjetosOrientação a Objetos
Orientação a Objetos
 

Destaque

Te presento a La Rosa
Te presento a La RosaTe presento a La Rosa
Te presento a La RosaAdriana Ochoa
 
Artigo sobre-musica-e-sindrome-de-down-revista-sempem
Artigo sobre-musica-e-sindrome-de-down-revista-sempemArtigo sobre-musica-e-sindrome-de-down-revista-sempem
Artigo sobre-musica-e-sindrome-de-down-revista-sempemUNAM ENAP
 
Logros indispensables para
Logros indispensables paraLogros indispensables para
Logros indispensables paraLucio Fernandez
 
Encarte divulga purificador de água brastemp na imprensa
Encarte divulga purificador de água brastemp na imprensaEncarte divulga purificador de água brastemp na imprensa
Encarte divulga purificador de água brastemp na imprensaDM9DDB
 

Destaque (9)

Te presento a La Rosa
Te presento a La RosaTe presento a La Rosa
Te presento a La Rosa
 
Enigma 101a
Enigma 101aEnigma 101a
Enigma 101a
 
7 24 47 marte
7 24 47 marte7 24 47 marte
7 24 47 marte
 
Artigo sobre-musica-e-sindrome-de-down-revista-sempem
Artigo sobre-musica-e-sindrome-de-down-revista-sempemArtigo sobre-musica-e-sindrome-de-down-revista-sempem
Artigo sobre-musica-e-sindrome-de-down-revista-sempem
 
Como estrellar un_avion_sin_despegar
Como estrellar un_avion_sin_despegarComo estrellar un_avion_sin_despegar
Como estrellar un_avion_sin_despegar
 
Logros indispensables para
Logros indispensables paraLogros indispensables para
Logros indispensables para
 
Exposición nel
Exposición nelExposición nel
Exposición nel
 
Prueba3 impress
Prueba3 impressPrueba3 impress
Prueba3 impress
 
Encarte divulga purificador de água brastemp na imprensa
Encarte divulga purificador de água brastemp na imprensaEncarte divulga purificador de água brastemp na imprensa
Encarte divulga purificador de água brastemp na imprensa
 

Semelhante a Arquitetura mix thiagoboufleuhr

Apresentação Introdução Design Patterns
Apresentação Introdução Design PatternsApresentação Introdução Design Patterns
Apresentação Introdução Design PatternsLucas Simões Maistro
 
5507 os principais design patterns
5507   os principais design patterns5507   os principais design patterns
5507 os principais design patternsAndre Baltieri
 
DNAD 2009 - Injeção de Dependência (por Leandro Daniel)
DNAD 2009 - Injeção de Dependência (por Leandro Daniel)DNAD 2009 - Injeção de Dependência (por Leandro Daniel)
DNAD 2009 - Injeção de Dependência (por Leandro Daniel)Leandro Daniel
 
Paradigma de orientação a objetos -
Paradigma de orientação a objetos - Paradigma de orientação a objetos -
Paradigma de orientação a objetos - André Victor
 
GoF Design Patterns - Borland Conference (BorCon) 2004
GoF Design Patterns - Borland Conference (BorCon) 2004GoF Design Patterns - Borland Conference (BorCon) 2004
GoF Design Patterns - Borland Conference (BorCon) 2004Daniel Wildt
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projetoejdn1
 
Dependency injection WTF? - PHPSC Conference 2012
Dependency injection WTF? - PHPSC Conference 2012Dependency injection WTF? - PHPSC Conference 2012
Dependency injection WTF? - PHPSC Conference 2012Luís Cobucci
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Luis Ferreira
 
Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemassauloroos01
 
Script c
Script cScript c
Script cRaphael
 
Paper NOVL - Naked Objects View Language- InfoBrasil 2012
Paper NOVL - Naked Objects View Language- InfoBrasil 2012Paper NOVL - Naked Objects View Language- InfoBrasil 2012
Paper NOVL - Naked Objects View Language- InfoBrasil 2012Marcius Brandão
 

Semelhante a Arquitetura mix thiagoboufleuhr (20)

Apresentação Introdução Design Patterns
Apresentação Introdução Design PatternsApresentação Introdução Design Patterns
Apresentação Introdução Design Patterns
 
Padrões de projeto
Padrões de projetoPadrões de projeto
Padrões de projeto
 
Padrões de design orientado a objetos
Padrões de design orientado a objetosPadrões de design orientado a objetos
Padrões de design orientado a objetos
 
5507 os principais design patterns
5507   os principais design patterns5507   os principais design patterns
5507 os principais design patterns
 
Quick reference
Quick referenceQuick reference
Quick reference
 
Treinamento DDD .Net
Treinamento DDD .NetTreinamento DDD .Net
Treinamento DDD .Net
 
Padroes de Projeto
Padroes de ProjetoPadroes de Projeto
Padroes de Projeto
 
DNAD 2009 - Injeção de Dependência (por Leandro Daniel)
DNAD 2009 - Injeção de Dependência (por Leandro Daniel)DNAD 2009 - Injeção de Dependência (por Leandro Daniel)
DNAD 2009 - Injeção de Dependência (por Leandro Daniel)
 
Paradigma de orientação a objetos -
Paradigma de orientação a objetos - Paradigma de orientação a objetos -
Paradigma de orientação a objetos -
 
Design patterns
Design patternsDesign patterns
Design patterns
 
GoF Design Patterns - Borland Conference (BorCon) 2004
GoF Design Patterns - Borland Conference (BorCon) 2004GoF Design Patterns - Borland Conference (BorCon) 2004
GoF Design Patterns - Borland Conference (BorCon) 2004
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
 
Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
 
UMLIntro.pptx
UMLIntro.pptxUMLIntro.pptx
UMLIntro.pptx
 
Dependency injection WTF? - PHPSC Conference 2012
Dependency injection WTF? - PHPSC Conference 2012Dependency injection WTF? - PHPSC Conference 2012
Dependency injection WTF? - PHPSC Conference 2012
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
 
Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemas
 
Script c
Script cScript c
Script c
 
Paper NOVL - Naked Objects View Language- InfoBrasil 2012
Paper NOVL - Naked Objects View Language- InfoBrasil 2012Paper NOVL - Naked Objects View Language- InfoBrasil 2012
Paper NOVL - Naked Objects View Language- InfoBrasil 2012
 
Padroes
PadroesPadroes
Padroes
 

Arquitetura mix thiagoboufleuhr