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

1,894 views

Published on

Presentation from Marcel Caraciolo about Design Patterns with Python. This is the first part. Lectured at V Meeting of PUG-PE (Python Users Group of Pernambuco) at POLI- Recife,Pernambuco, Brazil. Day: 03/07/2010

Published in: Technology
1 Comment
5 Likes
Statistics
Notes
  • Ué, pq quando vou fazer o download vem como arquivo .key?
    A palestra ficou muito boa. Parabéns!
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
1,894
On SlideShare
0
From Embeds
0
Number of Embeds
221
Actions
Shares
0
Downloads
69
Comments
1
Likes
5
Embeds 0
No embeds

No notes for slide













  • Em 1987, a partir dos conceitos criados por Alexander, os programadores Kent Beck e Ward Cunningham propuseram os primeiros padrões de projeto para a área da ciência da computação. Em um trabalho para a conferência OOPSLA, eles apresentaram alguns padrões para a construção de janelas na linguagem Smalltalk.[3] Nos anos seguintes Beck, Cunningham e outros seguiram com o desenvolvimento destas idéias.
    O movimento ao redor de padrões de projeto ganhou popularidade com o livro Design Patterns: Elements of Reusable Object-Oriented Software, publicado em 1995. Os autores desse livro são Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides, conhecidos como a "Gangue dos Quatro" (Gang of Four) ou simplesmente "GoF". Posteriormente, vá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ões conhecidos como GRASP (General Responsibility Assignment Software Patterns).







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

    1. 1. Padrões de Projeto É possível com Python ?! Parte 01 V Encontro do PUG-PE Marcel Caraciolo IV Encontro do PUG-PE
    2. 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. 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. 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. 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. 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. 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. 8. Vamos ao que interessa! ✓ Herança ✓ Polimorfismo ✓ Abstração Encapsulamento IV Encontro do PUG-PE
    9. 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. 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. 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. 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. 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. 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. 15. Design Patterns IV Encontro do PUG-PE
    16. 16. Design Patterns IV Encontro do PUG-PE
    17. 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. 18. Cenas do próximo capítulo... IV Encontro do PUG-PE
    19. 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. 20. Padrões de Projeto É possível com Python ?! Parte 01 IV Encontro do PUG-PE Marcel Caraciolo IV Encontro do PUG-PE

    ×