POO - Python.pptx
POO - Python.pptx
seja bem-vindo/a!
Disciplina: Linguagem de Programação
Prof: Alyson Trindade Fernandes
www.ifnmg.edu.br/diamantina
CLASSES E OBJETOS
class Conta:
def __init__(self, numero, titular, saldo, limite):
self.numer = numero
self.titular = titular
self.saldo = saldo
self.limite = limite
__init__() - CONSTRUTOR
class Conta:
# método __init__() omitido
def deposita(self, valor):
self.saldo += valor
MÉTODOS
conta1.deposita(20.0)
MÉTODOS COM RETORNO
Exemplo de uso:
minha_conta.saldo = 1000
consegui = minha_conta.saca(2000)
if(consegui):
print(“consegui sacar”)
else:
print(“não consegui sacar”)
OBJETOS SÃO ACESSADOS POR
REFERÊNCIA
Quando criamos uma variável para associar a um objeto, na verdade,
essa variável não guarda o objeto, e sim uma maneira de acessá-lo,
chamada de referência (o self). Podemos definir a referência de um objeto
como sendo o endereço inicial da memória ram onde este objeto está
armazenado.
c1 = Conta()
class Conta:
# código omitido
def transfere(self, destino, valor):
retirou = self.saca(valor)
if (retirou == False):
return False
else:
destino.deposita(valor)
return True
ATRIBUTOS COM VALOR PADRÃO
No exemplo abaixo, o atributo limite possui valor padrão definido no
construtor. Portanto ele não necessita obrigatoriamente ser definido na
instanciação de um novo objeto.
class Conta:
def __init__(self, numero, titular, saldo,
limite=1000.0):
self.numero = numero
self.titular = titular
self.saldo = saldo
self.limite = limite
ATRIBUTOS COM VALOR PADRÃO
Veja que agora não somos obrigados a passar o valor do limite já que ele
possui um valor padrão
de 1000.0
print(type(conta.numero))
#<class 'str'>
print(type(conta.saldo))
#<class 'float'>
print(type(conta.titular))
#<class '__conta__.Cliente'>
MÉTODOS MÁGICOS
Caso você queira saber quais são todos os métodos implementados pela
classe Conta , você pode usar a função embutida dir(), que irá listar todos
métodos e atributos que a classe possui.
dir(Conta)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__',
'__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__',
'__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__',
'__str__', '__subclasshook__', '__weakref__', 'extrato', 'deposita', 'limite' ,
'numero', 'saca', 'saldo', 'transfere_para', 'titular']
MÉTODOS MÁGICOS
Um outro atributo bastante útil é o __dict__ , que retorna um
dicionário com os atributos da classe.
class Pessoa:
def __init__(self, idade):
self.__idade = idade
MODIFICADORES DE ACESSO E
MÉTODOS DE CLASSE
Os atributos com __ no nome ainda podem ser acessados por:
p._Pessoa__idade
É muito comum, e faz todo sentido, que seus atributos sejam privados e
quase todos seus métodos sejam públicos.
ENCAPSULAMENTO
conta = Conta(1000.0)
conta.saldo = -300.0
"saldo não pode ser negativo"
ENCAPSULAMENTO
Java:
conta3.set_saldo(conta1.get_saldo() + conta2.get_saldo())
Python:
conta3.saldo = conta1.saldo + conta2.saldo
ATRIBUTOS DE CLASSE
● Variável própria da classe, sendo única e compartilhada por todos os
objetos da mesma. Dessa maneira, quando a mesma fosse mudada
através de um objeto, o outro enxergaria o mesmo valor
>>>
class Conta:
_total_contas = 0
def__init__(self, saldo):
self._saldo = saldo
Conta._total_contas += 1
ATRIBUTOS DE CLASSE
c1 = Conta(100.0)
print(c1._total_contas)
#1
c2 = Conta(200.0)
print(c2._total_contas)
#2
ATRIBUTOS DE CLASSE
>>> Conta._total_contas
MÉTODOS ESTÁTICOS
Métodos estáticos não precisam de uma referência, não
recebem um primeiro argumento especial (self). É como uma
função simples que, por acaso, reside no corpo de uma classe em
vez de ser definida no nível do módulo.
>>>
@staticmethod
def get_total_contas():
return Conta._total_contas
MÉTODOS DE CLASSE
Métodos de classe servem para definir um método que opera na
classe, e não em instâncias. Já os métodosestáticos utilizamos
quando não precisamos receber a referência de um objeto especial
(seja da classe ou de uma instância) e funciona como uma função
comum, sem relação.
class Conta:
_total_contas = 0
def __init__(self):
Conta._total_contas += 1
@classmethod
def get_total_contas(cls):
return cls._total_contas
PROTEÇÃO DE CLASSES COM SLOTS
class Conta:
__slots__ = ['_numero', '_titular', '_saldo', '_limite']
def__init__(self, numero, titular, saldo,
limite=1000.0):
# inicialização dosatributos
…
HERANÇA E POLIMORFISMO
…
HERANÇA E POLIMORFISMO
…
HERANÇA E POLIMORFISMO (REESCRITA DE
MÉTODOS)
HERANÇA E POLIMORFISMO (REESCRITA DE
MÉTODOS)
HERANÇA E POLIMORFISMO (REESCRITA DE
MÉTODOS)
HERANÇA E POLIMORFISMO
…
HERANÇA E POLIMORFISMO
● No dia em que criarmos uma classe Secretaria , por exemplo, que é filha
de Funcionario, precisaremos mudar a classe ControleDeBonificacoes ?
…
HERANÇA E POLIMORFISMO
…
HERANÇA E POLIMORFISMO
…
CLASSES ABSTRATAS
…
CLASSES ABSTRATAS
…
CLASSES ABSTRATAS
…
CLASSES ABSTRATAS
…
CLASSES ABSTRATAS
…
CLASSES ABSTRATAS
…
CLASSES ABSTRATAS
…
CLASSES ABSTRATAS
…
CLASSES ABSTRATAS
…
CLASSES ABSTRATAS
…
CLASSES ABSTRATAS
…
OBRIGADO!
Esperamos que você consiga
desenvolver todo seu potencial
conosco.