Algoritmos e Estrutura de Dados
Aula 06 – Programação Orientada a Objetos em Python
Profa. Alana Oliveira e Prof. Davi Viana alanaslz@gmail.come davi.viana@lsdi.ufma.br
Evolução
Profa. Alana Oliveira, ECP / UFM A 3
PROGRAMAÇÃO DE BAIXO NÍVEL PROGRAMAÇÃO LINEAR PROGRAMAÇÃO ESTRUTURADA PROGRAMAÇÃO MODULAR PROGRAMAÇÃO ORIENTADA A OBJ.
Por volta da década de 40 onde tinhamos que programar em código de máquina (Hexadecimais, binários, …)
Instruções de ”alto nível”, uma seguida da outra, sem muitos desvios, sem rotinas internas Blocos de comandos lineares, podendo ser organizados fora da ordem natural
Permitia pequenos modulos estruturados protegidas em ’capsulas’ que poderiam ser usados em sistemas cada vez maiores
Propõe a aproximação do mundo digital do mundo real. Através da modelagem de problemas reais
Programação estruturada
Em `Dados Globais’, estão todas as suas variáveis.
Uma função (ou
procedimento) toma um conjunto delas como parâmetro e retorna algum resultado DADOS GLOBAIS PROCEDIMENTO PROCEDIMENTO PROCEDIMENTO PROCEDIMENTO PROCEDIMENTO PROCEDIMENTO …
Programação Orientada a Objetos
Agora, os dados
são pertinentes ao
objeto e acessivel
apenas por eles
Profa. Alana Oliveira, ECP / UFM A 5
MÉTODO MÉTODO … Dados Objeto MÉTODO MÉTODO … Dados Objeto MÉTODO MÉTODO … Dados Objeto
Programação Orientada a Objeto
•
Objetivo: É trazer o mundo digital mais
Como trabalhávamos até hoje...
• Escrevendo código de forma imperativa (ou procedural)
• Isto é, a forma que você já viu
7
L = [3,2,7,4,1]
for index in range(len(L)): print index
Como vamos trabalhar a partir de hoje
• Utilizando o paradigma de orientação à objetos!
• Primeiro vamos explicar a diferença de paradigmas
• Imperativo (visto até a última aula) x Orientado à objetos (OO)
• Irei apresentar quatro exemplos/analogias para melhorar a compreensão
Como vamos trabalhar a partir de hoje
• Exemplos para melhorar a compreensão
• 1ª: Desenhos (Esquema)
• 2ª: Exemplo do mundo real
• 3ª: Código
• 4ª: Definição
9
Paradigmas
1ª. Tentativa: Desenhos
• São formas de enxergar o mundo, os problemas, a vida, um código de um
programa
• Imperativa
•Orientada a procedimentos (procedural)
Dados
Paradigmas
1ª. Tentativa: Desenhos
• São formas de enxergar o mundo, os problemas, a vida, um código de um
programa
• Imperativa
•Orientada a procedimentos
11 Dados
Função 1 Função 2 Equação 1
Você está acostumado a encarar o código de uma maneira que os dados possuem um “estado” e ele
é compartilhado pelas funções
Paradigmas
1ª. Tentativa: Desenhos
• São formas de enxergar o mundo, os problemas, a vida, um código de um
programa
• Imperativa
•Orientada a procedimentos
Dados
Função 1 Função 2 Equação 1
Nesse fluxo de dados, estão todas as suas variáveis. Uma função toma um conjunto delas
Paradigmas
1ª. Tentativa: Desenhos
• São formas de enxergar o mundo, os problemas, a vida, um código de um
programa • Na orientação à objetos 13 Objeto 1 Objeto 3 Objeto 2 Objeto 4 msg msg
Paradigmas
1ª. Tentativa: Desenhos
• São formas de enxergar o mundo, os problemas, a vida, um código de um
programa
• Na orientação à objetos
Agora, existem objetos que se comunicam entre si por meio de mensagens (msg)
trocadas por suas interfaces
Objeto 1 Objeto 3 Objeto 2 Objeto 4 msg msg
Paradigmas
1ª. Tentativa: Desenhos
• São formas de enxergar o mundo, os problemas, a vida, um código de um
programa
• Na orientação à objetos
15
Cada objeto responde às mensagens recebidas de uma maneira própria, os chamados métodos, de acordo com procedimentos internos, a implementação,
que só aquele objeto conhece
Objeto 1 Objeto 3 Objeto 2 Objeto 4 msg msg
Paradigmas
1ª. Tentativa: Desenhos
• São formas de enxergar o mundo, os problemas, a vida, um código de um
programa
• Na orientação à objetos
Não interessa ao objeto 2 a maneira como uma determinada mensagem foi tratada pelo objeto 1, nem como o objeto 1 chegou a uma determinada resposta. O objeto 2 recebe a mensagem, executa seu código e
responde para o objeto 3
Objeto 1 Objeto 3 Objeto 2 Objeto 4 msg msg
•
Professora... ainda estou
confuso...
17
Paradigmas
2ª. Tentativa: Exemplos do mundo real
• Digamos que você tenha que desenvolver um código que faça a alimentação em um zoológico
• Seu programa procedural pode ficar desta forma
Procedimento 1: comprar uma banana; Procedimento 2: aguardar meio-dia; Procedimento 3: servir a banana.
Paradigmas
2ª. Tentativa: Exemplos do mundo real
• Digamos que você tenha que desenvolver um código que faça a alimentação em um zoológico
• Seu programa procedural pode ficar desta forma
19
Procedimento 1: comprar uma banana; Procedimento 2: aguardar meio-dia; Procedimento 3: servir a banana.
Se suas variáveis forem macacos, ótimo! Seu
programa funciona!! J
Paradigmas
2ª. Tentativa: Exemplos do mundo real
Procedimento 1: comprar uma banana;Procedimento 2: aguardar meio-dia; Procedimento 3: servir a banana.
Esse código não vale para todas as variáveis do zoológico! Pois elefantes
não se contentam com UMA banana, leões não comem banana, corujas não comem ao meio dia...
Paradigmas
2ª. Tentativa: Exemplos do mundo real
• Digamos que você tenha que desenvolver um código que faça a alimentação em um
zoológico
• Na orientação a objetos
21
Mensagem: alimente-se!
Paradigmas
2ª. Tentativa: Exemplos do mundo real
Mensagem: alimente-se!Cada objeto que conhece seus atributos (se é herbívoro ou carnívoro) e métodos (se prefere caçar ou esperar a fruta cair do pé) vai se virar
•
Professora... Estou começando
a entender... Mais ainda falta
algo...
23
•
Vamos ver um exemplo de
Paradigmas
3ª. Tentativa: OO no código
• Supondo que seu problema seja que a partir de um valor “b”, calcule a raiz quadrada de “b” e salve o resultado em “a”.
• O código procedural fica da seguinte maneira
25
from math import *
a = sqrt(b) #utilizando o modulo math
Paradigmas
3ª. Tentativa: OO no código
• Supondo que seu problema seja que a partir de um valor “b”, calcule a raiz quadrada de “b” e salve o resultado em “a”.
• Como fica o código em OO?
a = b.sqrt() sobre si o método “sqrt” e retorna Estamos dizendo que “b” aplica o resultado para o objeto “a”
Paradigmas
3ª. Tentativa: OO no código
• Supondo que seu problema seja que a partir de um valor “b”, calcule a raiz quadrada de “b” e salve o resultado em “a”.
• Como fica o código em OO?
27
a = b.sqrt() sobre si o método “sqrt” e retorna Estamos dizendo que “b” aplica o resultado para o objeto “a”
Vocês já utilizaram algum comando que tenha uma “cara” parecida? Algo aqui
não soa familiar?
Paradigmas
3ª. Tentativa: OO no código
• Vejam este código
a = ‘araraquara’ L = a.split(‘a’) print L
>>> ['', 'r', 'r', 'qu', 'r', '']
Paradigmas
3ª. Tentativa: OO no código
• Vejam este código
29
Dizemos ao objeto para aplicar sobre si o seu método split, tendo como argumento ‘a’. A resposta a esta
mensagem é a lista ['', 'r', 'r', 'qu', 'r', '']
a = ‘araraquara’ L = a.split(‘a’) print L
>>> ['', 'r', 'r', 'qu', 'r', '']
Paradigmas
4ª. Tentativa: O que é OO afinal?
• Orientação a Objetos é um paradigma que considera que um programa é um grande e animado diálogo entre entidades chamadas objetos
• Os objetos conhecem muito bem a si mesmos
• Respondem às mensagens de acordo com seus
atributos (características) com seus próprios métodos (ações)
Como eu defino um objeto?
Seus atributos e métodos?
Definição de Objeto
• Objeto é uma coisa material ou abstrata que pode ser percebida pelos sentidos e descrita por meio das suas características,
comportamentos e estado atual
31
Caneta é um objeto?
Caneta é um objeto?
• Ela é material ou abstrata? (Sim!)
• Pode ser percebida pelos sentidos (Pode!)
• Pode ser descrita (classificada) por meio de suas características,
comportamento e estado atual? (Pode!)
Caneta é um objeto!
33
CLASSE OBJETOS
Definição de Classes
• As classes definem os atributos e métodos de um conjunto de objetos semelhantes
• Podem ser consideradas templates (modelos) para a produção de instâncias (objetos)
Definição da Classe
• O que eu tenho?
• Modelo, Cor, Ponta (fina ou grossa), Carga
• O que eu faço?
• Escrever, rabiscar, pintar, tampar, destampar…
• Como eu estou agora? • A maneira que o objeto está no
momento.
Profa. Alana Oliveira, ECP / UFM A 35
Definição da Classe
• Atributos
• Modelo, Cor, Ponta (fina ou grossa), Carga
• Métodos
• Escrever, rabiscar, pintar, tampar, destampar…
• Estado
• A maneira que o objeto está no momento.
Classe Cachorro
Profa. Alana Oliveira, ECP / UFM A 37
Objetos Cachorros
Bolt Rex Bob Anda Come Dorme pegaOsso Anda Come Dorme pegaOsso Anda Come Dorme pegaOsso Possíveis atributos: nome, peso, altura, cor... Objetos são instâncias definidas a partir de uma classeDefinição de Classes
• Uma classe, sempre terá:
• Um identificador
• Um conjunto de atributos (características)
Definição de Classes
• No Python, a criação de classes se dá por meio da palavra reservada class
39
class Cachorro: pass
Definição de Classes
• No Python, a criação de classes se dá por meio da palavra reservada class
class Cachorro: pass
Apesar da definição das classes, em geral, o que utilizamos durante a execução dos programas são
Definição de Classes: atributos
• Atributos são características que ao definir em uma classe se tornarão presentes em todos os objetos instanciados a partir desta classe
41 class Cachorro: cobertura = ‘pelos’ alimento = ‘carne’ patas = 4 habitat = ‘domestico’ nome = ‘Rex’ class Galinha: cobertura = ‘penas’ alimento = ‘graos’ patas = 2 habitat = ‘domestico’ bico = ‘pequeno’
Definição de Classes: atributos
Snoopy = Cachorro() Lala = Galinha() print Snoopy.cobertura print Lala.alimento Print Snoopy.bico class Cachorro: cobertura = ‘pelos’ alimento = ‘carne’ patas = 4 habitat = ‘domestico’ nome = ‘Rex’ class Galinha: cobertura = ‘penas’ alimento = ‘graos’ patas = 2 habitat = ‘domestico’ bico = ‘pequeno’
Definição de Classes: atributos
43
Snoopy = Cachorro() Lala = Galinha()
print Snoopy.cobertura #sairá na tela ‘pelos’ print Lala.alimento #sairá na tela ‘graos’
Print Snoopy.bico #ERRO – não existe atributo bico class Cachorro: cobertura = ‘pelos’ alimento = ‘carne’ patas = 4 habitat = ‘domestico’ nome = ‘Rex’ class Galinha: cobertura = ‘penas’ alimento = ‘graos’ patas = 2 habitat = ‘domestico’ bico = ‘pequeno’
Definição de Classes: atributos
Snoopy = Cachorro() Lala = Galinha()
print (Snoopy.nome + ‘ late sem parar’) class Cachorro: cobertura = ‘pelos’ alimento = ‘carne’ patas = 4 habitat = ‘domestico’ nome = ‘Rex’ class Galinha: cobertura = ‘penas’ alimento = ‘graos’ patas = 2 habitat = ‘domestico’ bico = ‘pequeno’
Definição de Classes: atributos
45
Snoopy = Cachorros() Lala = Galinhas()
print (Snoopy.nome + ‘ late sem parar’) # sairá na tela Rex late sem parar. class Cachorro: cobertura = ‘pelos’ alimento = ‘carne’ patas = 4 habitat = ‘domestico’ nome = ‘Rex’ class Galinha: cobertura = ‘penas’ alimento = ‘graos’ patas = 2 habitat = ‘domestico’ bico = ‘pequeno’
Definição de Classes: métodos
• Imaginem agora: que classe chata!
• Todos os objetos definidos dessa classe Cachorro possuem o mesmo nome ‘Rex’
• Na verdade cada cachorro no mundo real possui um nome! class Cachorro: cobertura = ‘pelos’ alimento = ‘carne’ patas = 4 habitat = ‘domestico’ nome = ‘Rex’
Definição de Classes: métodos
• Métodos são funções definidas dentro da classe
• Usadas para definir ações que serão executadas por uma instância (objeto) desta classe
• Primeiro método a ser utilizado para criar atributos no momento que a instância (objeto) for criado
• É conhecido como método Construtor da
classe
47
class <nome da classe>: def __init__ (self):
<commandos>
Definição de Classes: métodos
• Voltando para o exemplo do cachorro
class Cachorro:
cobertura = ‘pelos’ alimento = ‘carne’ patas = 4
habitat = ‘domestico’
def __init__ (self, nome): self.nome = nome
Definição de Classes: métodos
• Voltando para o exemplo do cachorro
49 class Cachorro: cobertura = ‘pelos’ alimento = ‘carne’ patas = 4 habitat = ‘domestico’
def __init__ (self, nome): self.nome = nome
d1 = cachorro(‘Flash’) print d1.nome
Definição de Classes: métodos
• Outro exemplo...
class Circulo:
def __init__ (self): self.raio = 25.4
Definição de Classes: métodos
• Outro exemplo...
51
Class Circulos:
def __init__ (self): self.raio = 25.4
O parâmetro “self” é uma maneira de fazer referência a própria instância (objeto) que o
método se aplica
Definição de Classes: métodos
• Outro exemplo...
class Circulo:
def __init__ (self): self.raio = 25.4
Cria dinamicamente o atributo “raio” e atribui a ele o valor 2.14
Definição de Classes: métodos
• Em seguida, outros métodos podem ser definidos
53
class Circulo:
def __init__ (self): self.raio = 25.4 def calcula_Area (self):
self.area = 3.14*(self.raio**2) def calcula_Volume (self,altura):
self.volume = 3.14*(self.raio**2)*altura C1 = Circulo()
print C1.raio #sairá na tela 25.4
print C1.area #o que acontece aqui???
Definição de Classes: métodos
• Em seguida, outros métodos podem ser definidos
class Circulo:
def __init__ (self): self.raio = 25.4 def calcula_Area (self):
self.area = 3.14*(self.raio**2) def calcula_Volume (self,altura):
self.volume = 3.14*(self.raio**2)*altura C1 = Circulo()
Definição de Classes: métodos
• Em seguida, outros métodos podem ser definidos
55
class Circulo:
def __init__ (self): self.raio = 25.4 def calcula_Area (self):
self.area = 3.14*(self.raio**2) def calcula_Volume (self,altura):
self.volume = 3.14*(self.raio**2)*altura C1 = Circulo() print C1.raio C1.calcula_Area() print C1.area
Referencias / Material
Complementar
• Material baseado na apostila
• http://www.dcc.ufrj.br/~fabiom/mab225/pythonoo.p
df
• Livro Nilo Menezes
• Assistam!!