Introdução à Programação Aula 19 Programação com objetos Pedro Vasconcelos DCC/FCUP 2015 Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 19 Programação com objetos 2015 1 / 20
Nesta aula 1 Programação com objetos 2 Exemplos Módulo turtle Passeio aleatório 3 Tipos de dados Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 19 Programação com objetos 2015 2 / 20
Nesta aula 1 Programação com objetos 2 Exemplos Módulo turtle Passeio aleatório 3 Tipos de dados Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 19 Programação com objetos 2015 3 / 20
Programação com objetos Programação procedimental e funcional: decompomos problemas em sub-problemas; compomos programas definimos funções e procedimentos. Programação com objetos: agregamos dados e operações em entidades chamada objetos; compomos programas definindo objectos que interagem. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 19 Programação com objetos 2015 4 / 20
O que é um objeto? É uma entidade que agrega dados e operações sobre eles. Permite agrupar conceitos e funcionalidade relacionados Propriedades dos objetos: identidade podemos distinguir um objeto de qualquer outro; estado valores internos ao objeto; comportamento operações que o objeto expõe ao exterior (métodos). Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 19 Programação com objetos 2015 5 / 20
Nesta aula 1 Programação com objetos 2 Exemplos Módulo turtle Passeio aleatório 3 Tipos de dados Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 19 Programação com objetos 2015 6 / 20
Módulo turtle Até agora usamos o turtle de forma procedimental. Este módulo também pode ser usado com objetos. Cada tartaruga é um objeto: estado a posição e orientação, côr do traço, etc.; comportamento métodos para movimentar e desenhar (forward, left, right, etc); identidade podemos criar múltiplas tartarugas distintas na janela. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 19 Programação com objetos 2015 7 / 20
Módulo turtle (cont.) >>> import turtle >>> alice = turtle.turtle() # uma tartaruga >>> bob = turtle.turtle() # outra tararuga >>> alice.forward(200) # mover a Alice >>> bob.left(90) # mudar estado do Bob >>> bob.pencolor( blue ) >>> bob.forward(100) # mover o Bob Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 19 Programação com objetos 2015 8 / 20
Módulo turtle (cont.) Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 19 Programação com objetos 2015 9 / 20
Estado Cada tartaruga guarda estado: a sua posição e orientação; a cor da caneta e espessura do traço;... >>> alice.position() (200.00,0.00) >>> bob.position() (0.00,100.00) >>> alice.heading() 0.0 >>> bob.heading() 90.0 Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 19 Programação com objetos 2015 10 / 20
Identidade Podemos distinguir as duas tartarugas. >>> alice <turtle.turtle object at 0xfba3d0> >>> bob <turtle.turtle object at 0x7f2dac171390> >>> alice == bob False As duas tartarugas são diferentes mesmo se estiverem na mesma posição e com a mesma orientação! Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 19 Programação com objetos 2015 11 / 20
Construtores Turtle é o construtor de objetos tartaruga (não confundir com o nome do módulo turtle) Usamos como uma função sem argumentos: >>> import turtle >>> alice = turtle.turtle() Alternativa >>> from turtle import * >>> alice = Turtle() Turtle é uma classe: define as operações comuns a todas as tartarugas; um molde para fabricar objetos (instâncias). Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 19 Programação com objetos 2015 12 / 20
Passeio aleatório Vamos refazer o passeio aleatório de turtle graphics usando objetos. cada tartaruga é um objeto; escolhemos ângulos aleatórios para cada uma. Vantagem dos objetos: é fácil alterar o programa para simular várias tartarugas. Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 19 Programação com objetos 2015 13 / 20
Um passo da simulação def step(ts, a): "Passeio aleatório de várias tartarugas." # ts: lista de tartarugas; a: ângulo máximo length = 10 # medida de cada passo for t in ts: # para cada tartaruga if visivel(t): angle = random.randint(-a,a) t.left(angle) else: angle = t.towards(0,0) t.setheading(angle) t.forward(length) Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 19 Programação com objetos 2015 14 / 20
Testar se uma tartaruga está visível def visivel(t): "Verifica se a tartaruga t está visivel." w = 0.5*turtle.window_width() h = 0.5*turtle.window_height() (x,y) = t.position() return (x<w and x>=-w and y<h and y>=-h) Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 19 Programação com objetos 2015 15 / 20
Programa principal alice = turtle.turtle() # criar 3 tartarugas bob = turtle.turtle() carol = turtle.turtle() alice.speed(0) bob.speed(0) carol.speed(0) alice.pencolor( red ) bob.pencolor( blue ) carol.pencolor( darkgreen ) for i in range(200): # executar 200 passos step([alice,bob,carol], 30) Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 19 Programação com objetos 2015 16 / 20
Exemplo de execução Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 19 Programação com objetos 2015 17 / 20
Nesta aula 1 Programação com objetos 2 Exemplos Módulo turtle Passeio aleatório 3 Tipos de dados Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 19 Programação com objetos 2015 18 / 20
Tipos de dados Os tipos pré-definidos em Python são objetos: tipos básicos int, float, bool tipos estruturados str, list, tuple, dict Podemos também definir novas classes para novos tipos de dados (nas próximas aula). Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 19 Programação com objetos 2015 19 / 20
Tipos de dados (cont.) Exemplos: >>> txt = banana >>> txt.count( a ) 3 >>> xs = [1,1,2,3,3,4] >>> type(xs) <class list > >>> xs.count(3) 2 >>> xs.append(1) >>> xs.count(1) 3 Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 19 Programação com objetos 2015 20 / 20