SlideShare uma empresa Scribd logo
Padrões de Projeto
   É possível com Python ?!

          Parte 01
   V Encontro do PUG-PE
      Marcel Caraciolo


                          IV Encontro do PUG-PE
Vamos ao que interessa!
Classe Normal x Classe Abstrata x Interface
class Pessoa(object):
       def __init__(self,nome=None):
           self.nome = nome

       def getNome(self):
           return self.nome

       def fala(self):
           raise Exception(‘Acao nao implementada’)

       def olha(self):
           pass

                                           IV Encontro do PUG-PE
Vamos ao que interessa!
Classe Normal x Classe Abstrata x Interface

class Ator(Pessoa):
       def __init__(self, nome):
           Pessoa.__init__(nome,self)

       def fala(self):
           print ‘Eu sou um ator !!’

       def olha(self):
           print ‘Meu olhar 43 !’



                                        IV Encontro do PUG-PE
Vamos ao que interessa!
Classe Normal x Classe Abstrata x Interface

  >>> p = Pessoa()
  >>> p.fala() #Lanca exceção
  >>> p.olha() #Nada
  >>> ator = Ator(‘Marlon Brando’)
  >>> ator.fala()
  Eu sou um ator!
  >>> ator.olha()
  Meu olhar 43!




                                     IV Encontro do PUG-PE
Vamos ao que interessa!
Classe Normal x Classe Abstrata x Interface

class Filme(object):
       def __init__(self, elenco=None):
           self.elenco = elenco

       def falas(self):
           for ator in elenco:
               print self.ator.fala()

       ...



                                          IV Encontro do PUG-PE
Vamos ao que interessa!
Classe Normal x Classe Abstrata x Interface


 >>> ...
 >>> filme = Filme([ator])
 >>> filme.falas()
 Eu sou um ator!




                                IV Encontro do PUG-PE
Vamos ao que interessa!
      IS - A Herança
 Marlon Brando é um Ator.
   Ator é uma pessoa.
    HAS - A Composição
     Filme tem Atores.

    CAN - DO Interface
   Ator pode falar, olhar.
                         IV Encontro do PUG-PE
Vamos ao que interessa!
✓            Herança

✓          Polimorfismo
✓           Abstração

         Encapsulamento




                          IV Encontro do PUG-PE
Encapsulamento em Python
 Não há modificadores de acesso em Python




   Convenção:     Mas não há uma maneira de
_nome (Protegido)   eu limitar o acesso ao
 __cpf (Privado)          atributos ?

                              IV Encontro do PUG-PE
Encapsulamento em Python
                   Vamos à prancheta!
        Objetivo: Construir um fone cujo volume vai de 0 à 100!
class Fone(object):
       def __init__(self,volume= 0.0):
           self.volume = volume

       def alterar_volume(self,volume):
           if volume > 100:
              self.volume = 100
           elif volume < 0:
              self.volume = 0
           else:
              self.volume = volume

       def pegar_volume(self):
           return self.volume                         IV Encontro do PUG-PE
.
Encapsulamento em Python
                   Vamos à prancheta!
        Objetivo: Construir um fone cujo volume vai de 0 à 100!




>>>fone = Fone(200)
>>>fone.pegarVolume()
200
>>>fone.volume
200
>>>fone.volume = -50
>> fone.volume
-50


                                                      IV Encontro do PUG-PE
Encapsulamento em Python
                   Voltando ao código!
        Objetivo: Construir um fone cujo volume vai de 0 à 100!




class Fone(object):

      (...)

      def pegar_volume(self):
          return self.volume

      volume = property(pegar_volume,alterar_volume)
.




                                                      IV Encontro do PUG-PE
Encapsulamento em Python
                   Vamos à prancheta!
        Objetivo: Construir um fone cujo volume vai de 0 à 100!



>>>fone = Fone(200)
>>>fone.pegarVolume()
100
>>>fone.volume
100
>>>fone.volume = - 50
0
>>>fone.volume = 200
>>>fone.volume
100

                                                      IV Encontro do PUG-PE
O que são Padrões de Projeto ?
  ‘São práticas ou padrões que descrevem
   soluções para problemas recorrentes no
  desenvolvimento de sistemas de software
       orientado a objetos.’ - Wikipedia

Um padrão estabelece um nome, um problema,
 a solução, quando aplicar esta solução e suas
                consequências.

                                   IV Encontro do PUG-PE
Design Patterns




                  IV Encontro do PUG-PE
Design Patterns




                  IV Encontro do PUG-PE
Classificação DP
                  Creational
   Relacionado à parte de criação do objeto

                  Structural
Relacionado à parte de composição de classes e
                   objetos
                  Behavioral
    Caracteriza como as classes/objetos se
     comunicam e distribuem seus papéis
                                 IV Encontro do PUG-PE
Cenas do próximo capítulo...




                      IV Encontro do PUG-PE
Referências


http://pt.wikipedia.org/wiki/Padr%C3%A3o_de_projeto_de_software


    http://www.suttoncourtenay.org.uk/duncan/accu/pythonpatterns.html




                                                     IV Encontro do PUG-PE
Padrões de Projeto
   É possível com Python ?!

          Parte 01
   IV Encontro do PUG-PE
      Marcel Caraciolo


                           IV Encontro do PUG-PE

Mais conteúdo relacionado

PDF
Polimorfismo em java
PDF
Cases de Startups - local - Gamepolitan
PPTX
Curso de modelo de negócios
PPTX
Plataforma Imobiliáira Inforce - Site, Extranet, CRM e Sistema Imobiliário In...
PDF
Proposta comercial marketing digital
PPTX
Como elaborar um projeto social
PDF
Economia criativa e inovação: como criar novos modelos de negócio
PDF
Conhencendo Python e por que ela importa?
Polimorfismo em java
Cases de Startups - local - Gamepolitan
Curso de modelo de negócios
Plataforma Imobiliáira Inforce - Site, Extranet, CRM e Sistema Imobiliário In...
Proposta comercial marketing digital
Como elaborar um projeto social
Economia criativa e inovação: como criar novos modelos de negócio
Conhencendo Python e por que ela importa?

Semelhante a Design Patterns with Python - Is it possible ? - Part 01 (12)

KEY
Alex Martelli's Python Design Patterns
PDF
Programando em python classes
KEY
Introdução à Linguagem de programação Python
PDF
Introdução ao Python - FTEC
PDF
Introdução a linguagem Python 2.7
PDF
Introdução à Programação em Python
ODP
Meta-programacao em python
PDF
Linguagem Python
PDF
Introdução a Linguagem Ruby
PDF
Programando em python - Classes
PDF
Objetos Pythonicos - compacto
PDF
Python - Programando em alto nível
Alex Martelli's Python Design Patterns
Programando em python classes
Introdução à Linguagem de programação Python
Introdução ao Python - FTEC
Introdução a linguagem Python 2.7
Introdução à Programação em Python
Meta-programacao em python
Linguagem Python
Introdução a Linguagem Ruby
Programando em python - Classes
Objetos Pythonicos - compacto
Python - Programando em alto nível
Anúncio

Mais de Marcel Caraciolo (20)

PDF
Como interpretar seu próprio genoma com Python
PDF
Joblib: Lightweight pipelining for parallel jobs (v2)
PDF
Construindo softwares de bioinformática para análises clínicas : Desafios e...
PDF
Como Python ajudou a automatizar o nosso laboratório v.2
PDF
Como Python pode ajudar na automação do seu laboratório
PDF
Python on Science ? Yes, We can.
PDF
Oficina Python: Hackeando a Web com Python 3
PDF
Recommender Systems with Ruby (adding machine learning, statistics, etc)
PDF
Opensource - Como começar e dá dinheiro ?
PDF
Big Data com Python
PDF
Benchy, python framework for performance benchmarking of Python Scripts
PDF
Python e 10 motivos por que devo conhece-la ?
PDF
GeoMapper, Python Script for Visualizing Data on Social Networks with Geo-loc...
PDF
Benchy: Lightweight framework for Performance Benchmarks
PDF
Construindo Sistemas de Recomendação com Python
PDF
Python, A pílula Azul da programação
PDF
Construindo Soluções Científicas com Big Data & MapReduce
PDF
Como Python está mudando a forma de aprendizagem à distância no Brasil
PDF
Novas Tendências para a Educação a Distância: Como reinventar a educação ?
PDF
Aula WebCrawlers com Regex - PyCursos
Como interpretar seu próprio genoma com Python
Joblib: Lightweight pipelining for parallel jobs (v2)
Construindo softwares de bioinformática para análises clínicas : Desafios e...
Como Python ajudou a automatizar o nosso laboratório v.2
Como Python pode ajudar na automação do seu laboratório
Python on Science ? Yes, We can.
Oficina Python: Hackeando a Web com Python 3
Recommender Systems with Ruby (adding machine learning, statistics, etc)
Opensource - Como começar e dá dinheiro ?
Big Data com Python
Benchy, python framework for performance benchmarking of Python Scripts
Python e 10 motivos por que devo conhece-la ?
GeoMapper, Python Script for Visualizing Data on Social Networks with Geo-loc...
Benchy: Lightweight framework for Performance Benchmarks
Construindo Sistemas de Recomendação com Python
Python, A pílula Azul da programação
Construindo Soluções Científicas com Big Data & MapReduce
Como Python está mudando a forma de aprendizagem à distância no Brasil
Novas Tendências para a Educação a Distância: Como reinventar a educação ?
Aula WebCrawlers com Regex - PyCursos
Anúncio

Último (8)

PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PPTX
Arquitetura de computadores - Memórias Secundárias
PPTX
Mecânico de Manutenção de Equipamentos.pptx
PDF
Manejo integrado de pragas na cultura do algodão
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Arquitetura de computadores - Memórias Secundárias
Mecânico de Manutenção de Equipamentos.pptx
Manejo integrado de pragas na cultura do algodão
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Viasol Energia Solar -Soluções para geração e economia de energia
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx

Design Patterns with Python - Is it possible ? - Part 01

  • 1. Padrões de Projeto É possível com Python ?! Parte 01 V Encontro do PUG-PE Marcel Caraciolo IV Encontro do PUG-PE
  • 2. Vamos ao que interessa! Classe Normal x Classe Abstrata x Interface class Pessoa(object): def __init__(self,nome=None): self.nome = nome def getNome(self): return self.nome def fala(self): raise Exception(‘Acao nao implementada’) def olha(self): pass IV Encontro do PUG-PE
  • 3. Vamos ao que interessa! Classe Normal x Classe Abstrata x Interface class Ator(Pessoa): def __init__(self, nome): Pessoa.__init__(nome,self) def fala(self): print ‘Eu sou um ator !!’ def olha(self): print ‘Meu olhar 43 !’ IV Encontro do PUG-PE
  • 4. Vamos ao que interessa! Classe Normal x Classe Abstrata x Interface >>> p = Pessoa() >>> p.fala() #Lanca exceção >>> p.olha() #Nada >>> ator = Ator(‘Marlon Brando’) >>> ator.fala() Eu sou um ator! >>> ator.olha() Meu olhar 43! IV Encontro do PUG-PE
  • 5. Vamos ao que interessa! Classe Normal x Classe Abstrata x Interface class Filme(object): def __init__(self, elenco=None): self.elenco = elenco def falas(self): for ator in elenco: print self.ator.fala() ... IV Encontro do PUG-PE
  • 6. Vamos ao que interessa! Classe Normal x Classe Abstrata x Interface >>> ... >>> filme = Filme([ator]) >>> filme.falas() Eu sou um ator! IV Encontro do PUG-PE
  • 7. Vamos ao que interessa! IS - A Herança Marlon Brando é um Ator. Ator é uma pessoa. HAS - A Composição Filme tem Atores. CAN - DO Interface Ator pode falar, olhar. IV Encontro do PUG-PE
  • 8. Vamos ao que interessa! ✓ Herança ✓ Polimorfismo ✓ Abstração Encapsulamento IV Encontro do PUG-PE
  • 9. Encapsulamento em Python Não há modificadores de acesso em Python Convenção: Mas não há uma maneira de _nome (Protegido) eu limitar o acesso ao __cpf (Privado) atributos ? IV Encontro do PUG-PE
  • 10. Encapsulamento em Python Vamos à prancheta! Objetivo: Construir um fone cujo volume vai de 0 à 100! class Fone(object): def __init__(self,volume= 0.0): self.volume = volume def alterar_volume(self,volume): if volume > 100: self.volume = 100 elif volume < 0: self.volume = 0 else: self.volume = volume def pegar_volume(self): return self.volume IV Encontro do PUG-PE .
  • 11. Encapsulamento em Python Vamos à prancheta! Objetivo: Construir um fone cujo volume vai de 0 à 100! >>>fone = Fone(200) >>>fone.pegarVolume() 200 >>>fone.volume 200 >>>fone.volume = -50 >> fone.volume -50 IV Encontro do PUG-PE
  • 12. Encapsulamento em Python Voltando ao código! Objetivo: Construir um fone cujo volume vai de 0 à 100! class Fone(object): (...) def pegar_volume(self): return self.volume volume = property(pegar_volume,alterar_volume) . IV Encontro do PUG-PE
  • 13. Encapsulamento em Python Vamos à prancheta! Objetivo: Construir um fone cujo volume vai de 0 à 100! >>>fone = Fone(200) >>>fone.pegarVolume() 100 >>>fone.volume 100 >>>fone.volume = - 50 0 >>>fone.volume = 200 >>>fone.volume 100 IV Encontro do PUG-PE
  • 14. O que são Padrões de Projeto ? ‘São práticas ou padrões que descrevem soluções para problemas recorrentes no desenvolvimento de sistemas de software orientado a objetos.’ - Wikipedia Um padrão estabelece um nome, um problema, a solução, quando aplicar esta solução e suas consequências. IV Encontro do PUG-PE
  • 15. Design Patterns IV Encontro do PUG-PE
  • 16. Design Patterns IV Encontro do PUG-PE
  • 17. Classificação DP Creational Relacionado à parte de criação do objeto Structural Relacionado à parte de composição de classes e objetos Behavioral Caracteriza como as classes/objetos se comunicam e distribuem seus papéis IV Encontro do PUG-PE
  • 18. Cenas do próximo capítulo... IV Encontro do PUG-PE
  • 19. Referências http://pt.wikipedia.org/wiki/Padr%C3%A3o_de_projeto_de_software http://www.suttoncourtenay.org.uk/duncan/accu/pythonpatterns.html IV Encontro do PUG-PE
  • 20. Padrões de Projeto É possível com Python ?! Parte 01 IV Encontro do PUG-PE Marcel Caraciolo IV Encontro do PUG-PE

Notas do Editor

  • #15: Em 1987, a partir dos conceitos criados por Alexander, os programadores Kent Beck e Ward Cunningham propuseram os primeiros padr&amp;#xF5;es de projeto para a &amp;#xE1;rea da ci&amp;#xEA;ncia da computa&amp;#xE7;&amp;#xE3;o. Em um trabalho para a confer&amp;#xEA;ncia OOPSLA, eles apresentaram alguns padr&amp;#xF5;es para a constru&amp;#xE7;&amp;#xE3;o de janelas na linguagem Smalltalk.[3] Nos anos seguintes Beck, Cunningham e outros seguiram com o desenvolvimento destas id&amp;#xE9;ias. O movimento ao redor de padr&amp;#xF5;es de projeto ganhou popularidade com o livro Design Patterns: Elements of Reusable Object-Oriented Software, publicado em 1995. Os autores desse livro s&amp;#xE3;o Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides, conhecidos como a &quot;Gangue dos Quatro&quot; (Gang of Four) ou simplesmente &quot;GoF&quot;. Posteriormente, v&amp;#xE1;rios outros livros do estilo foram publicados, como Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development, que introduziu um conjunto de padr&amp;#xF5;es conhecidos como GRASP (General Responsibility Assignment Software Patterns).