






Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Introdução aos principais conceitos básicos de programação orientada a objeto em python.
Tipologia: Resumos
1 / 12
Esta página não é visível na pré-visualização
Não perca as partes importantes!







'Este algoritmo é um resumo dos principais conceitos de programação orientada a objeto.'
Em python uma função pode ser o argumento de outra função. Ou o retorno de uma determinada função pode ser outra função.
result_1= 6, result_2= 9 Uma função retornando outra função
Alô, Quem fala? Chamada perdida :( Uma função sendo usada no corpo de uma outra funcão
In [180…^ #^ Version^ :^ 0.0.
'''Este algoritmo é um resumo dos principais conceitos de programação orientada a objeto.
Out[180…
In [42]: #importando bibliotecas import numpy as np import matplotlib.pyplot as plt
In [208…^ #função^ sendo^ usada^ como^ argumento^ de^ outra^ função def soma_1(x): return x + 1
def subt_1(x): return x - 1
def calculadora(operação, x): #Usando a função operação dentro do argumento da função calc resultado = operação(x) return resultado
In [219…^ #Usando^ as^ funções result_1 = calculadora(soma_1, 5) result_2 = calculadora(subt_1, 10)
print(f'result_1= {result_1}, result_2= {result_2}')
In [240…^ #Composição^ de^ funções def chamada_telefone(responder: bool):#Só aceita valores True ou False (valor booleano) if responder: def aceitar(): print('Alô, Quem fala ?') return None #Retorno da função aceitar() return aceitar()#Retorno da função chamada_telefone() else : def desligar(): print('Chamada perdida :(') return None #Mostrar que a função aceitar() não retorna nada só 'printa' return desligar()
In [241…^ #Usando^ a^ composição^ de^ funções.^ função^ chamada_telefone() aceitando_ligação = chamada_telefone( True ) Recusando_ligação = chamada_telefone( False )
email: [email protected], com 22 anos
Acessando variáveis globais código
[email protected] Não conseguimos acessar as variáveis internas (locais) das funções, mas podemos de objetos. Exemplo:
NameError Traceback (most recent call last) **** in ----> 1 print ( meu_nome , nova_idade )
NameError : name 'meu_nome' is not defined
Até as funções acima são 'tratadas' como objeto de uma classe
def pessoa e def fazer_aniversário são na verdade uma classe 'function' dentro de python
In [242…^ #função^ pessoa def pessoa(meu_nome, meu_sobrenome, minha_idade): email = f'{meu_nome}.{meu_sobrenome}@unesp.br' nova_idade = fazer_aniversário(minha_idade) #usando a função aniversário dentro da f return email, nova_idade #Retornando 2 parâmetros
#função fazer aniversário def fazer_aniversário(idade): idade += 1 return idade
In [243…^ #Usando^ a^ função^ pessoa email, idade = pessoa('Arthur', 'Chabole', 21)
#Usando a função aniversário minha_idade = fazer_aniversário(25)
#Ver as variavéis retornadas da função print(f'email: {email}, com {idade} anos')
In [244… print(minha_idade) print(email)
In [245…^ print(meu_nome, nova_idade)
In [44]:^ #Vendo^ tipo^ das^ funções print(type(pessoa)) print(type(fazer_aniversário))
In [2]:^ #Criando^ sua^ classe class Pessoa():
#Método construtor da classe Pessoa
Nome: Rafael Sobrenome: Chabole Idade: 6 Altura: 1. Humor: feliz
Diferença entre atributos e métodos
AttributeError Traceback (most recent call last) **** in ----> 1 p1. email #Atributos
AttributeError : 'Pessoa' object has no attribute 'email' Erro pois o atributo email do objeto só é criado após a execução da método email(). Assim, o atributo email do objeto p1 ainda não existe.
A Pessoa Rafael tem 6 anos, 1.25m e está feliz
A Pessoa Rafael tem 6 anos, 1.4m e está feliz
A Pessoa Rafael tem 6 anos, 1.45m e está feliz
A Pessoa Rafael tem 7 anos, 1.45m e está feliz
print(f'Sobrenome: {p1. sobrenome}') print(f'Idade: {p1. idade}') print(f'Altura: {p1. altura}') print(f'Humor: {p1. humor}')
In [19]:^ p1. email #Atributo
In [24]:^ p1. criar_Email() #Método
In [25]: p1. email #Atributo
Out[25]:
In [23]:^ p1. apresentar() #Método
In [38]: #Métodos p1. crescer_15cm()
p1. apresentar()
In [39]:^ #Métodos p1. crescer_Xcm(5)
p1. apresentar()
In [40]:^ #Métodos p1. aniversário()
p1. apresentar()
In [91]: #Informações que queremos construir
[<main.Pessoa at 0x1f6da3c0880>, <main.Pessoa at 0x1f6da3c08e0>, <main.Pessoa at 0x1f6da3c0250>, <main.Pessoa at 0x1f6da3c0d90>]
A Pessoa Arthur tem 21 anos, 1.86m e está Feliz A Pessoa Gabriel tem 20 anos, 1.8m e está Neutro A Pessoa Maria tem 20 anos, 1.7m e está Triste A Pessoa Thiago tem 23 anos, 1.82m e está Neutro Buscando informações dos objetos
[('Arthur', 'Chabole', 1.86, 'Feliz'), ('Gabriel', 'Messias', 1.8, 'Neutro'), ('Maria', 'Alcantara', 1.7, 'Triste'), ('Thiago', 'Cacique', 1.82, 'Neutro')]
A Pessoa Arthur tem 24 anos, 2.31m e está feliz Quando a classe Funcionário herda a classe Pessoa. Ganhamos de presente os atributos e métodos desenvolvida anteriormente na classe Pessoa para dentro da classe Funcionário. Assim, podemos de maneira simples reutilizar o trabalho antigo ou de outras pessoas.
nomes = np. array(('Arthur', 'Gabriel', 'Maria', 'Thiago')) sobrenomes = np. array(('Chabole', 'Messias', 'Alcantara','Cacique')) idades = np. array((21, 20, 20, 23)) alturas = np. array((1.86, 1.80, 1.7, 1.82)) humores = np. array(('Feliz', 'Neutro', 'Triste', 'Neutro'))
#Iterando pessoas = [] for (nome, sobrenome, idade, altura, humor) in zip(nomes, sobrenomes, idades, alturas, hum pessoas. append((Pessoa(nome, sobrenome, idade, altura, humor)))
pessoas
Out[91]:
In [92]:^ #Mostrando^ as^ pessoas^ criadas for pessoa in pessoas: pessoa. apresentar()
In [93]:^ info = [] for pessoa in pessoas: info. append((pessoa. nome, pessoa. sobrenome, pessoa. altura, pessoa. humor)) #importante info
Out[93]:
In [104… #Herdando os atributos e métodos da classe Pessoa class Funcionário(Pessoa): pass
In [105… f1 = Funcionário('Arthur', 'Chabole', 21, 1.86, 'feliz')
In [108… f1. humor = 'neutro'
f1. aniversário() f1. crescer_15cm()
f1. apresentar()
In [85]:^ #Acrescentando^ um^ construtor^ &^ novos^ métodos
São métodos para serem chamados como com atributo. Sem a necessidade de utilizar '()'
Arthur, engenheiro salário de R$5000. Taxa de aumento 0.05% anual
São métodos reservados para serem usados pela classe. Suas modificações alteram para todos os objetos da classe.
#Variáveis da classe Funcionário cont_func = 0 #Contador de funcionário Taxa_aumento = 1.05 #Taxa de aumento
def init(self, nome, sobrenome, idade, altura, humor, cargo, salário):
#Chamando os atributos herdados de Pessoa super(). init(nome, sobrenome, idade, altura, humor)
#Acrescentando novos atributos ("variável do objeto") self. cargo = cargo self. salário = salário
#Métodos da classe Funcionário. add_Funcionário()
#Novos métodos def aumento_salárial(self): self. salário = self. salário ***** Funcionário. Taxa_aumento
#Este método irá sobrescrever o apresentar de pessoa, pois tem o mesma assinatura (nom #Métodos especiais sinalizados por decorators #Chamando o método como um atributo @property def apresentar(self): print(f'''{self. nome}, {self. cargo} salário de R${self. salário}. Taxa de aumento {
#Chamando o método como sendo da classe e não do objeto @classmethod def add_Funcionário(cls): cls. cont_func += 1
@classmethod def classe_Info(cls): print(f'Temos: {cls. cont_func} funcionário(s)') print(f'Aumento salarial de {round(cls. Taxa_aumento - 1, 3)}% ao ano')
#Chamando o método independentemente do objeto @staticmethod def dia_Util(dia): semana = {'Domingo': False , 'Segunda': True , 'Terça': True , 'Quarta': True , 'Quinta': True , 'Sexta': True , 'Sábado': False } #Dicioná
Resultado = semana. get(dia) return Resultado
In [19]: f1 = Funcionário('Arthur', 'Chabole', 21, 1.86, 'feliz', 'engenheiro', 5_000) f2 = Funcionário('Rafael', 'Silveira', 35, 1.75, 'triste', 'Gerente', 7_000)
In [20]: f1. apresentar #Método chamado como um atributo
Temos: 2 funcionário(s) Aumento salarial de 0.05% ao ano Podem ser utizadas com os objetos, mas as informações são as mesmas para todos os objetos.
Temos: 2 funcionário(s) Aumento salarial de 0.05% ao ano None
Temos: 2 funcionário(s) Aumento salarial de 0.05% ao ano None
São métodos independentes do objeto. Usados quando não se alteram nenhum atríbuto da classe ou do objeto, mas podem ser úteis durante a aplicações ou implementações da classe.
True
False
Vamos implementar o seguinte diagrama abaixo onde já temos a classe Pessoa e Funcionário. As classes Vendedores e Gerentes que herdam atributos e métodos da classe Funcionário que por sua vez herdam da classe Pessoa (herança de 2 geração) e Cliente herda somente a classe Pessoa. O simbolo '~' esta sendo usado como conotação para uma variável da classe.
In [21]:^ Funcionário. classe_Info()
In [24]:^ print(f1. classe_Info()) print('----------------') print(f2. classe_Info())
In [41]: Funcionário. dia_Util('Segunda')
Out[41]:
In [25]: Funcionário. dia_Util('Domingo')
Out[25]:
Classe vendedor
Classe Gerente
def apresentar(self): print(f'{self. nome}, cliente comprou {self. qtd_Compras} produtos vendidos por {sel
In [122… class Vendedor(Funcionário): def init(self, nome, sobrenome, idade, altura, humor, cargo, salário, qtd_Vendas
super(). init(nome, sobrenome, idade, altura, humor, cargo, salário)
self. cargo = 'vendedor' self. qtd_Vendas = qtd_Vendas self. meta = meta
def vender_Produto(self, num_prod): self. qtd_Vendas += num_prod
def apresentar(self): if self. qtd_Vendas >= self. meta: print(f'{self. nome}, {self. cargo} vendeu {self. qtd_Vendas} produtos e bateu a else : print(f'{self. nome}, {self. cargo} vendeu {self. qtd_Vendas} produtos e não bat
In [160… class Gerente(Funcionário): def init(self, nome, sobrenome, idade, altura, humor, cargo, salário, subordinado super(). init(nome, sobrenome, idade, altura, humor, cargo, salário) self. cargo = 'gerente' self. subordinados = subordinados
def contratar(self, Funcionário): self. subordinados. append(Funcionário)
def demitir(self, Funcionário): #Comunicação entre a classe gerente e funcionário self. subordinados. remove(Funcionário)
def apresentar(self): print(f'{self. nome}, {self. cargo} com salário de R${self. salário} ')
print('----------------------------------') print('----- Lista de subordinados ------') print('----------------------------------')
for subordinado in self. subordinados: subordinado. apresentar()
In [163…^ #Instanciando^ os^ objetos #Vendedores v1 = Vendedor('Gabriel', 'Messias', 20, 1.8, 'Neutro', 'Vendedor', 4000, 18, 25) v2 = Vendedor('Maria', 'Alcantara', 20, 1.7, 'Triste', 'Vendedor', 4000, 26, 25) v3 = Vendedor('Rafael', 'Silva', 22, 1.78, 'Feliz', 'Vendedor', 4000, 14, 25) v4 = Vendedor('Guilherme', 'Modesto', 24, 1.65, 'Triste', 'Vendedor', 4000, 28, 25)
#Cliente c1 = Cliente('Thiago', 'Cacique', 24, 1.82, 'Neutro', 5, v1)
#Gerente g1 = Gerente('Arthur', 'Chabole', 21, 1.86,'Feliz', 'Gerente', 5000, [v1, v2])
Apresentando os objetos criados. Cada classe tem seu método apresentar próprio.
Gabriel, vendedor vendeu 18 produtos e não bateu a meta Maria, vendedor vendeu 26 produtos e bateu a meta!!! Rafael, vendedor vendeu 14 produtos e não bateu a meta Guilherme, vendedor vendeu 28 produtos e bateu a meta!!!
Thiago, cliente comprou 5 produtos vendidos por Gabriel
Gabriel, vendedor vendeu 18 produtos e não bateu a meta Maria, vendedor vendeu 26 produtos e bateu a meta!!!
Thiago, cliente comprou 5 produtos vendidos por Gabriel Idade 25 anos Thiago, cliente comprou 6 produtos vendidos por Maria
Gabriel 21 anos com e-mail [email protected] e salário R$4200. Gabriel, vendedor vendeu 18 produtos e não bateu a meta
In [164…^ #Vendedores v1. apresentar() v2. apresentar() v3. apresentar() v4. apresentar()
In [165… #Cliente c1. apresentar()
In [166… #Gerente g1. apresentar()
In [178…^ c1. idade
Out[178…
In [168…^ c1. aniversário() c1. apresentar()
c1. comprar(v2)
print(f'Idade {c1. idade} anos') c1. apresentar()
In [169… v1. idade, v1. salário
Out[169…
In [170…^ v1. aniversário() v1. criar_Email() v1. aumento_salárial()
print(f'{v1. nome} {v1. idade} anos com e-mail {v1. email} e salário R${v1. salário}') v1. apresentar()