• Nenhum resultado encontrado

Algoritmos e Estrutura de Dados Aula 06 Programação Orientada a Objetos em Python

N/A
N/A
Protected

Academic year: 2021

Share "Algoritmos e Estrutura de Dados Aula 06 Programação Orientada a Objetos em Python"

Copied!
28
0
0

Texto

(1)

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

(2)

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

(3)

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

(4)

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

(5)

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

(6)

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

(7)

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

(8)

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

(9)

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.

(10)

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...

(11)

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

(12)

Professora... Estou começando

a entender... Mais ainda falta

algo...

23

Vamos ver um exemplo de

(13)

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”

(14)

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', '']

(15)

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?

(16)

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!)

(17)

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)

(18)

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.

(19)

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 classe

Definição de Classes

• Uma classe, sempre terá:

• Um identificador

• Um conjunto de atributos (características)

(20)

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

(21)

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’

(22)

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’

(23)

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’

(24)

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

(25)

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

(26)

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

(27)

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()

(28)

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!!

Referências

Documentos relacionados

Nessa situação temos claramente a relação de tecnovívio apresentado por Dubatti (2012) operando, visto que nessa experiência ambos os atores tra- çam um diálogo que não se dá

Este trabalho buscou, através de pesquisa de campo, estudar o efeito de diferentes alternativas de adubações de cobertura, quanto ao tipo de adubo e época de

Neste estudo foram estipulados os seguintes objec- tivos: (a) identifi car as dimensões do desenvolvimento vocacional (convicção vocacional, cooperação vocacio- nal,

Considerando que, no Brasil, o teste de FC é realizado com antígenos importados c.c.pro - Alemanha e USDA - USA e que recentemente foi desenvolvido um antígeno nacional

By interpreting equations of Table 1, it is possible to see that the EM radiation process involves a periodic chain reaction where originally a time variant conduction

O desenvolvimento desta pesquisa está alicerçado ao método Dialético Crítico fundamentado no Materialismo Histórico, que segundo Triviños (1987)permite que se aproxime de

Assim procedemos a fim de clarear certas reflexões e buscar possíveis respostas ou, quem sabe, novas pistas que poderão configurar outros objetos de estudo, a exemplo de: *

5 “A Teoria Pura do Direito é uma teoria do Direito positivo – do Direito positivo em geral, não de uma ordem jurídica especial” (KELSEN, Teoria pura do direito, p..