O documento discute padrões de projeto em Python. Explica as diferenças entre classes normais, abstratas e interfaces e demonstra exemplos de herança, polimorfismo e encapsulamento. Também define padrões de projeto como soluções para problemas comuns em desenvolvimento orientado a objetos e classifica os principais tipos de padrões.
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
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
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
Em 1987, a partir dos conceitos criados por Alexander, os programadores Kent Beck e Ward Cunningham propuseram os primeiros padr&#xF5;es de projeto para a &#xE1;rea da ci&#xEA;ncia da computa&#xE7;&#xE3;o. Em um trabalho para a confer&#xEA;ncia OOPSLA, eles apresentaram alguns padr&#xF5;es para a constru&#xE7;&#xE3;o de janelas na linguagem Smalltalk.[3] Nos anos seguintes Beck, Cunningham e outros seguiram com o desenvolvimento destas id&#xE9;ias.
O movimento ao redor de padr&#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&#xE3;o Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides, conhecidos como a "Gangue dos Quatro" (Gang of Four) ou simplesmente "GoF". Posteriormente, v&#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&#xF5;es conhecidos como GRASP (General Responsibility Assignment Software Patterns).