Programação Orientada A Objetos Com Python
Programação Orientada A Objetos Com Python
objetos (POO)
@decarvalhogui
[1]
Objetivo Geral
[2]
Pré-requisitos
[3]
Percurso
[4]
Etapa 1
O que é POO
[5]
Paradigmas de programação
[6]
Exemplo
[7]
Alguns paradigmas
● Imperativo ou procedural
● Funcional
● Orientado a eventos
[8]
Programação orientada a
objetos
O paradigma de programação orientada a objetos estrutura o
código abstraindo problemas em objetos do mundo real,
facilitando o entendimento do código e tornando-o mais
modular e extensível. Os dois conceitos chaves para aprender
POO são: classes e objetos.
[9]
Percurso
[10]
Links Úteis
● https://github.com/digitalinnovationone/trilha-python-
dio
[11]
Dúvidas?
> Fórum/Artigos
> Comunidade Online (Discord)
[12]
Classes e objetos
@decarvalhogui
[13]
Objetivo Geral
[14]
Pré-requisitos
[15]
Percurso
[16]
Etapa 1
Conceito de classes e
objetos
[17]
Classes e objetos?
[18]
[19]
Classe
class Cachorro:
def __init__(self, nome, cor, acordado=True):
self.nome = nome
self.cor = cor
self.acordado = acordado
def latir(self):
print("Auau")
def dormir(self):
self.acordado = False
print("Zzzzz...")
[20]
Objeto
cao_1 = Cachorro("chappie", "amarelo", False)
cao_2 = Cachorro("Aladim", "branco e preto")
cao_1.latir()
print(cao_2.acordado)
cao_2.dormir()
print(cao_2.acordado)
[21]
Nosso primeiro programa POO
[22]
Percurso
[23]
Links Úteis
● https://github.com/digitalinnovationone/trilha-python-
dio
[24]
Dúvidas?
> Fórum/Artigos
> Comunidade Online (Discord)
[25]
Construtores e destrutores
@decarvalhogui
[26]
Objetivo Geral
[27]
Pré-requisitos
[28]
Percurso
[29]
Etapa 1
Conhecendo os métodos
__init__ e __del__
[30]
Método construtor
[31]
__init__
class Cachorro:
def __init__(self, nome, cor, acordado=True):
self.nome = nome
self.cor = cor
self.acordado = acordado
[32]
Método destrutor
O método destrutor sempre é executado quando uma
instância (objeto) é destruída. Destrutores em Python não são
tão necessários quanto em C++ porque o Pyton tem um coletor
de lixo que lida com o gerenciamento de memória
automaticamente. Para declarar o método destrutor da classe,
criamos um método com o nome __del__.
[33]
__del__
class Cachorro:
def __del__(self):
print("Destruindo a instância")
c = Cachorro()
del c
[34]
Percurso
[35]
Links Úteis
● https://github.com/digitalinnovationone/trilha-python-
dio
[36]
Dúvidas?
> Fórum/Artigos
> Comunidade Online (Discord)
[37]
Herança
@decarvalhogui
[38]
Objetivo Geral
[39]
Pré-requisitos
[40]
Percurso
[41]
Etapa 1
Herança em POO
[42]
O que é herança?
[43]
Benefícios da herança
● Representa bem os relacionamentos do mundo real.
● *Fornece reutilização de código, não precisamos escrever o
mesmo código repetidamente. Além disso, permite
adicionar mais recursos a uma classe sem modificá-la.
● *É de natureza transitiva, o que significa que, se a classe B
herdar da classe A, todas as subclasses de B herdarão
automaticamente da classe A.
[44]
Sintaxe da herança
class A:
pass
class B(A):
pass
[45]
Percurso
[46]
Etapa 2
[47]
Herança simples
Quando uma classe filha herda apenas uma classe pai, ela é
chamada de herança simples.
[48]
Exemplo
class A:
pass
class B(A):
pass
[49]
Herança múltipla
[50]
Exemplo
class A:
pass
class B:
pass
[51]
Percurso
[52]
Links Úteis
● https://github.com/digitalinnovationone/trilha-python-
dio
[53]
Dúvidas?
> Fórum/Artigos
> Comunidade Online (Discord)
[54]
Encapsulamento
@decarvalhogui
[55]
Objetivo Geral
[56]
Pré-requisitos
[57]
Percurso
Etapa 3 Properties
[58]
Etapa 1
O que é encapsulamento?
[59]
Proteção de acesso
O encapsulamento é um dos conceitos fundamentais em
programação orientada a objetos. Ele descreve a ideia de
agrupar dados e os métodos que manipulam esses dados em
uma unidade. Isso impõe restrições ao acesso direto a
variáveis e métodos e pode evitar a modificação acidental de
dados. Para evitar alterações acidentais, a variável de um
objeto só pode ser alterada pelo método desse objeto.
[60]
[61]
Percurso
Etapa 3 Properties
[62]
Etapa 2
[63]
Modificadores de acesso
[64]
Definição
[65]
Público/Privado
Todos os recursos são públicos, a menos que o nome inicie
com underline. Ou seja, o interpretador Python não irá
garantir a proteção do recurso, mas por ser uma convenção
amplamente adotada na comunidade, quando encontramos
uma variável e/ou método com nome iniciado por underline,
sabemos que não deveríamos manipular o seu valor
diretamente, ou invocar o método fora do escopo da classe.
[66]
Exemplo
class Conta:
def __init__(self, saldo=0):
self._saldo = saldo
def depositar(self,valor):
pass
def sacar(self,valor):
pass
[67]
Percurso
Etapa 3 Properties
[68]
Etapa 3
Properties
[69]
Para que servem?
[70]
Exemplo
class Foo:
def __init__(self, x=None):
self._x = x
@property
def x(self):
return self._x or 0
@x.setter
def x(self, value):
_x = self._x or 0
_value = value or 0
self._x = _x + _value
@x.deleter
def x(self):
self._x = -1
foo = Foo(10)
print(foo.x)
foo.x = 10
print(foo.x)
del foo.x
print(foo.x)
[71]
Percurso
Etapa 3 Properties
[72]
Links Úteis
● https://github.com/digitalinnovationone/trilha-python-
dio
[73]
Dúvidas?
> Fórum/Artigos
> Comunidade Online (Discord)
[74]
Polimorfismo
@decarvalhogui
[75]
Objetivo Geral
[76]
Pré-requisitos
[77]
Percurso
[78]
Etapa 1
O que é polimorfismo?
[79]
Muitas formas!
[80]
Exemplo
len("python")
len([10, 20, 30])
[81]
Percurso
[82]
Etapa 2
[83]
Mesmo método com
comportamento diferente
Na herança, a classe filha herda os métodos da classe pai. No
entanto, é possível modificar um método em uma classe filha
herdada da classe pai. Isso é particularmente útil nos casos em
que o método herdado da classe pai não se encaixa
perfeitamente na classe filha.
[84]
Exemplo
class Passaro:
def voar(self): pass
class Pardal(Passaro):
def voar(self):
print("Pardal voa")
class Avestruz(Passaro):
def voar(self):
print("Avestruz não voa")
def plano_de_voo(passaro):
passaro.voar()
plano_de_voo(Pardal())
plano_de_voo(Avestruz())
[85]
Percurso
[86]
Links Úteis
● https://github.com/digitalinnovationone/trilha-python-
dio
[87]
Dúvidas?
> Fórum/Artigos
> Comunidade Online (Discord)
[88]
Variáveis de classe e variáveis
de instância
@decarvalhogui
[89]
Objetivo Geral
[90]
Pré-requisitos
[91]
Percurso
[92]
Etapa 1
[93]
Atributos do objeto
[94]
Exemplo
class Estudante:
escola = "DIO"
def __str__(self):
return f"{self.nome} ({self.numero}) - {self.escola}"
[95]
Percurso
[96]
Links Úteis
● https://github.com/digitalinnovationone/trilha-python-
dio
[97]
Dúvidas?
> Fórum/Artigos
> Comunidade Online (Discord)
[98]
[99]
Métodos de classe e métodos
estáticos
@decarvalhogui
[100]
Objetivo Geral
[101]
Pré-requisitos
[102]
Percurso
[103]
Etapa 1
[104]
Métodos de classe
[105]
Métodos estáticos
[106]
Métodos de classe x métodos
estáticos
● Um método de classe recebe um primeiro parâmetro que
aponta para a classe, enquanto um método estático não.
● Um método de classe pode acessar ou modificar o estado
da classe enquanto um método estático não pode acessá-
lo ou modificá-lo.
[107]
Quanto utilizar método de
classe ou estático
● Geralmente usamos o método de classe para criar métodos
de fábrica.
● Geralmente usamos métodos estáticos para criar funções
utilitárias.
[108]
Hands On!
“Falar é fácil.
Mostre-me o código!”
Linus Torvalds
[109]
Percurso
[110]
Links Úteis
● https://github.com/digitalinnovationone/trilha-python-
dio
[111]
Dúvidas?
> Fórum/Artigos
> Comunidade Online (Discord)
[112]
Classes abstratas
@decarvalhogui
[113]
Objetivo Geral
[114]
Pré-requisitos
[115]
Percurso
[116]
Etapa 1
[117]
Importante!
[118]
Python tem interface?
[119]
Percurso
[120]
Etapa 2
[121]
ABC
Por padrão, o Python não fornece classes abstratas. O Python
vem com um módulo que fornece a base para definir as classes
abstratas, e o nome do módulo é ABC. O ABC funciona
decorando métodos da classe base como abstratos e, em
seguida, registrando classes concretas como implementações
da base abstrata. Um método se torna abstrato quando
decorado com @abstractmethod.
[122]
Hands On!
“Falar é fácil.
Mostre-me o código!”
Linus Torvalds
[123]
Percurso
[124]
Links Úteis
● https://github.com/digitalinnovationone/trilha-python-
dio
● https://docs.python.org/pt-br/3/library/abc.html
[125]
Dúvidas?
> Fórum/Artigos
> Comunidade Online (Discord)
[126]