Nesta aula. . . Introdução à programação orientada a objetos Turtle

Propaganda
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Nesta aula. . .
1
2
Introdução à programação orientada a objetos
Há uma quantidade de módulos disponíveis na biblioteca standard do
Python:
Orientação a objetos
análise de texto;
enviar e-mail;
pesquisar informação na Internet;
cálculos matemáticos elaborados. . .
Utilização de bibliotecas
Apresentamos na aula passada o módulo turtle;
3
Veremos nesta aula como utilizar algumas das suas funcionalidades de
uma forma orientada a objetos.
Definição de funções/procedimentos
João Pedro PEDROSO
Introdução à Programação - minor
João Pedro PEDROSO
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Introdução à Programação - minor
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Turtle graphics
Primeiro programa com objetos
Metáfora: programa controla tartaruga, que ao deslocar-se pode deixar
uma linha, um rasto;
tartaruga alex
import turtle
wn = turtle.Screen()
alex = turtle.Turtle()
alex.forward(150)
alex.left(90)
alex.forward(75)
Temos comandos simples, em inglês, para dar instruções à tartaruga;
módulo turtle define dois
novos tipos:
tipo Turtle
tipo Screen
turtle.Screen (o tipo
Screen definido no módulo
turtle) cria uma janela;
a área dentro da janela
chama-se tela (canvas em
inglês);
Muito simples, mas permite fazer desenhos impressionantes.
Objetivo: melhorar o raciocínio em ciência de computadores.
na linha 3 criamos um objeto do
tipo Turtle, i.e., uma tartaruga;
alex é uma variável que se
refere a esta tartaruga;
nas linha 4 a 6, damos
instruções à tartaruga alex
para se deslocar, através dos
seus métodos;
João Pedro PEDROSO
Introdução à Programação - minor
João Pedro PEDROSO
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Introdução à Programação - minor
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Métodos
Exercício
Um objeto pode ter
métodos — ações que pode executar;
atributos — propriedades; por exemplo, objetos turtle têm a propriedade
color.
Exemplo: alex.color("red") dá a cor vermelha à tartaruga e às
linhas que ela desenhar.
O estado de um objeto é definido pelos atributos; para as tartarugas:
color
tail — largura do seu traço
posição na janela
ângulo
...
tartaruga alex
import turtle
wn = turtle.Screen()
wn.bgcolor("lightgreen")
# set the window background color
tess = turtle.Turtle()
tess.color("blue")
# make tess blue
tess.pensize(3)
# set the width of her pen
tess.forward(50)
tess.left(120)
tess.forward(50)
wn.exitonclick()
João Pedro PEDROSO
escreva um programa que
pergunta qual é a cor de fundo desejada, a cor da tartaruga, e a largura do
traço (pen) (o conjunto de cores utilizável está definido em
http://www.w3schools.com/html/html_colornames.asp);
guarda esta informação em variáveis;
desenha a tartaruga com essa cor, numa tela com esse fundo
Introdução à Programação - minor
João Pedro PEDROSO
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Mais tartarugas. . .
Ciclos for
Podemos criar uma série tartarugas, da mesma forma que criamos uma
série de inteiros.
Cada uma delas é um objeto independente, a que se chama uma
instância do tipo (classe) turtle.
Cada instância tem os seus próprios atributos, chamando os seus
próprios métodos.
Convenção: zero graus é amais
direção
este.
tartarugas
import turtle
wn = turtle.Screen()
#
wn.bgcolor("lightgreen")
tess = turtle.Turtle()
#
tess.color("hotpink")
tess.pensize(5)
alex = turtle.Turtle()
#
tess.forward(80)
#
tess.left(120)
tess.forward(80)
tess.left(120)
tess.forward(80)
tess.left(120)
#
tess.right(180)
#
tess.forward(80)
#
alex.forward(50)
#
alex.left(90)
alex.forward(50)
João Pedro PEDROSO
alex.left(90)
alex.forward(50)
alex.left(90)
alex.forward(50)
Introdução à Programação - minor
Set up the window and its attributes
quando se repete várias vezes a mesma sequência de instruções,
pode-se sintetizar o programa com um ciclo for;
o mais importante é a deteção de padrões que se repetem –> essencial
para boa programação;
esta é uma das principais ferramentas em programação: repetição (ou
iteração);
ciclo com listas
for friendName in ["Joe", "Amy", "Brad", "Angelina", "Zuki"]:
print("Hi ", friendName, " Please come to my party on Saturday!")
create tess and set some attributes
create alex
Let tess draw an equilateral triangle
lista de nomes entre parêntesis retos: lista Python;
friendName — variável do ciclo;
o corpo do ciclo está sempre indentado (como com funções);
no fim de cada iteração, Python regressa à instrução for
complete the triangle
turn tess around
move her away from the origin
make alex draw a square
Introdução à Programação - minor
a cada iteração do ciclo é verificado se ainda há itens a ser
processados; se não, o ciclo termina (condição de paragem), e o
programa segue na linha seguinte ao final do ciclo;
João Pedro PEDROSO
Introdução à Programação - minor
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Fluxo de execução
Fluxo de execução de um ciclo
fluxo de execução: sequência de instruções seguidas pelo interpretador
Python;
por omissão: de cima para baixo do programa;
instruções como for e definição de funções alteram esta situação.
João Pedro PEDROSO
Introdução à Programação - minor
João Pedro PEDROSO
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Introdução à Programação - minor
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Função range
Função range
for x in range(10):
# atribuí a x cada um dos valores ... [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Experimentar:
sem range
import turtle
wn = turtle.Screen()
alex = turtle.Turtle()
com range
import turtle
wn = turtle.Screen()
alex = turtle.Turtle()
for i in [0,1,2,3]:
alex.forward(50)
alex.left(90)
for i in range(4):
alex.forward(50)
alex.left(90)
wn.exitonclick()
wn.exitonclick()
João Pedro PEDROSO
for i in range(4)):
print(i)
for i in range(1,5):
print(i)
for i in range(0,19,2):
print(i)
for i in range(0,20,2):
print(i)
Introdução à Programação - minor
João Pedro PEDROSO
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Mais alguns métodos turtle
Módulos
variaveis
alex.penup()
alex.forward(100)
alex.pendown()
# nao desenha nenhuma linha...
Um módulo é um ficheiro contendo definições e instruções em Python,
escrito com vista a ser utilizado por outros programas.
Há muitos módulos na biblioteca standard do Python: math, turtle,
...
alex.shape("turtle")
alex.speed(10)
alex.stamp()
Introdução à Programação - minor
# desenha uma tartaruga na tela
parâmetros podem ser negativos: alex.forward(-100)
parâmetro shape: valores:
arrow, blank, circle, classic,
square, triangle, turtle.
parâmetro speed: controla a velocidade da tartaruga, entre 1 (lento) e
10 (rápido).
João Pedro PEDROSO
import turtle
módulo turtle
# allows us to use the turtles library
wn = turtle.Screen()
alex = turtle.Turtle()
# creates a graphics window
# create a turtle named alex
alex.forward(150)
alex.left(90)
alex.forward(75)
wn.exitonclick()
# tell alex to move forward by 150 units
# turn by 90 degrees
# complete the second side of a rectangle
Screen e Turtle estão definidos no módulo turtle.
Introdução à Programação - minor
João Pedro PEDROSO
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Introdução à Programação - minor
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Busca de informação
Módulos
módulos são objetos, tal como todos os dados em Python;
o que poderíamos fazer se ninguém nos desse a conhecer turtle?
a melhor forma de encontrar informação sobre Python é consultando a
documentação Python
1
2
3
4
5
6
tutorial
listagem de todos os módulos disponíveis (global module index);
referência da linguagem
instruções de instalação
how-tos/FAQ
...
objetos do tipo módulo contém outros elementos do Python;
primeira ação com módulos: fazer import:
1
2
3
cria um novo nome (e.g., turtle);
associa esse nome a um objeto do tipo módulo;
−→ semelhança com os diagramas de referência.
utilização de definições contidas num módulo: dot notation
turtle.Turtle → classe Turtle definida no módulo turtle;
ler no módulo turtle, aceder ao elemento Turtle.
http://www.python.org/doc
Exercícios:
1
2
procurar documentação sobre o módulo turtle
familiarizar-se com outras funcionalidades das tartarugas
João Pedro PEDROSO
Introdução à Programação - minor
João Pedro PEDROSO
Introdução à Programação - minor
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Módulo math
Módulo random
Em muitas situações precisamos de números aleatórios:
num jogo, para lançar um dado/moeda ao ar;
baralhar um conjunto de cartas;
escolher um exercício para examinar um aluno;
simular o tempo de espera por um autocarro;
codificar informação numa consulta à conta bancária;
...
contém funções matemáticas, tais como as de uma calculadora;
algumas constantes: math.pi, math.e;
ver documentação do módulo math!
neste módulo apenas estão definidas constantes e funções;
não há definição de novos tipos (classes).
módulo math
import math
print(math.pi)
print(math.e)
print(math.sqrt(2.0))
print(math.sin(math.radians(90)))
# sin of 90 degrees
no módulo random estão definidas funcionalidades para isto, e.g.:
random.random() → float em [0, 1[
random.randrange(a,b[,step]) → inteiro entre a,b, com distribuição
uniforme; tal como com range, o limite superior não é incluído.
módulo random
import random
prob = random.random()
print(prob)
diceThrow = random.randrange(1,7)
print(diceThrow)
1
2
os geradores de números aleatórios são baseados num algoritmo
determinístico → geradores de números pseudo-aleatórios
são inicializados com uma semente (seed)
1
2
João Pedro PEDROSO
inicialização “manual”: e.g., seed(1) → comportamento sempre igual;
inicialização “por omissão”: em geral será diferente; por isso, o
comportamento, na prática, é aleatório.
Introdução à Programação - minor
João Pedro PEDROSO
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Definição de funções/procedimentos
Definição de novas funções
Nas aulas passadas: vimos como usar os operadores e funções
matemáticas pré-definidas
Nesta aula: vamos rever como definir novas funções (procedimentos)
Podemos depois usá-los tal qual os pré-definidos
def nome(lista de parâmetros):
primeira instrução
segunda instrução
.
.
.
Programar: decompor um problema em funções cada vez mais simples
até chegar às operações elementares
instrução final
N.B.: neste contexto, puristas de programação funcional muitas vezes
preferem o termo procedimento a função, mas este (function) é o termo
habitual em Python.
João Pedro PEDROSO
Introdução à Programação - minor
o início e fim da função são marcados pela indentação
a lista de parâmetros pode ser vazia
Introdução à Programação - minor
João Pedro PEDROSO
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Introdução à Programação - minor
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Exemplo
Fluxo da execução
def refrao():
print("Se um elefante incomoda muita gente")
print("Dois elefantes incomodam muito mais.")
def repete_refrao():
refrao()
refrao()
João Pedro PEDROSO
1
começa na primeira instrução do programa
2
instruções são executadas por ordem sequencial
3
a definição de uma função não altera fluxo de execução
4
a invocação de uma função
1
2
5
executa as instruções da definição por ordem
no final regressa ao ponto de onde partiu
funções podem chamar outras funções
Introdução à Programação - minor
João Pedro PEDROSO
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Parâmetros e argumentos
Exemplo do livro
A maior parte das funções têm argumentos:
>>> import math
>>> math.sin()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: sin() takes exactly 1 argument
(0 given)
O valor dos argumentos é associado a variáveis chamadas parâmetros
João Pedro PEDROSO
Introdução à Programação - minor
Introdução à Programação - minor
def print_twice(bruce):
print(bruce)
print(bruce)
>>> print_twice(’Spam’)
Spam
Spam
>>> print_twice(5)
5
5
>>> print_twice(math.pi)
3.14159265359
3.14159265359
João Pedro PEDROSO
Introdução à Programação - minor
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Funções que calculam valores
Âmbito de variáveis
Uma função pode retornar um resultado:
Os parâmetros e variáveis usados numa função são locais
def quadrado(x):
return x*x
As atribuições a variáveis locais são invisíveis fora da função
Pode ser usado como uma função numa expressão:
>>> import math
>>> quadrado(2)
4
>>> quadrado(math.sqrt(2))
2.0000000000000004
>>> quadrado(quadrado(2)-1)
9
João Pedro PEDROSO
>>> x = ’ola mundo’
>>> quadrado(2)
4
>>> x
’ola mundo’
Introdução à Programação - minor
# x é global
# parâmetro x é local
João Pedro PEDROSO
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Introdução à Programação - minor
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Âmbito de variáveis
Documentação
As variáveis globais são visíveis dentro de uma função:
comentários
# taxa do imposto de valor acrescentado (global)
taxa_IVA = 1.19
docstrings
# calcula o preço com IVA
def precoFinal(valor):
return valor*taxa_IVA
>>> precoFinal(100)
119.0
João Pedro PEDROSO
Introdução à Programação - minor
começam por # até ao final da linha
colocados em qualquer parte dum programa
ignorados pelo interpretador; destinados aos
programadores
cadeia de carateres na 1a linha de uma função
texto descritivo sucinto
também associado a módulos, classes e métodos (mais
tarde)
usado pelos interpretadores de Python: comando help,
pop-ups de informação (IDE)
João Pedro PEDROSO
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Introdução à Programação - minor
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Documentação
Documentação
# definição da função precoFinal
# Pedro Vasconcelos, 2007
# taxa de imposto de valor acrescentado
taxa_IVA = 1.19
def precoFinal(valor):
"Acrescenta a taxa de IVA a um valor."
return valor*taxa_IVA
>>> help(precoFinal)
Help on function precoFinal in module __main__:
precoFinal(valor)
Acrescenta a taxa de IVA a um valor.
# fim da função
João Pedro PEDROSO
Introdução à Programação - minor
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
João Pedro PEDROSO
Introdução à Programação - minor
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Como decompor um problema?
Noções estudadas esta semana
atributo estado, ou valor, que pertence a um objeto determinado (e.g.,
a cor);
biblioteca standard coleção de módulos que fazem parte da distribuição
normal do Python;
Cada função deve:
1
efetuar uma tarefa bem identificada
necessária em mais do que uma parte do programa
ou reutilizável para outros problemas
2
ter um propósito claro (explicar na linha de docstring)
3
ter uma interface clara com o exterior (significado dos parâmetros e do
resultado)
4
ter uma definição concisa (uma página de texto no máximo)
ciclo for instrução Python para repetir as instruções que escrevermos
no corpo do ciclo;
condição de paragem condição que, quando ocorre, termina a execução de
um ciclo; a mais habitual, e a de não haver mais elementos a
atribuir à variável do ciclo.
controlo do fluxo manipulação do fluxo de execução;
corpo de um ciclo — conjunto de instruções dentro do ciclo
(indentados relativamente à definição do ciclo);
determinístico propriedade de um processo que é repetível e previsível.
estado conjunto de valores para os atributos de um objeto;
João Pedro PEDROSO
Introdução à Programação - minor
João Pedro PEDROSO
Introdução à Programação - minor
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Noções estudadas esta semana
Noções estudadas esta semana
gerador de números (pseudo-)aleatórios função de fornece a possibilidade
de criar números com propriedades semelhantes às dos
aleatórios;
instância objeto de uma classe (alex e tess instâncias da classe
Turtle);
invocar ou chamar – executar um método de um objeto
(wn.exitonclick() chama o método exitonclick do objeto
wn);
iteração elemento de programação que permite repetir alguns passos
de um programa;
método função associada a um objeto; quando é invocada, causa
algum efeito no objeto;
módulo ficheiro contendo definições e instruções Python, destinadas
a serem usadas por outros programadores, através de
import;
número aleatório número gerado por um processo que torna impossível a
sua previsão com 100% de certeza (processo estocástico);
número pseudo-aleatório número que, sendo em rigor gerado por um
processo determinístico, possuí propriedades semelhantes à
de um aleatório;
João Pedro PEDROSO
Introdução à Programação - minor
Orientação a objetos
Utilização de bibliotecas
Definição de funções/procedimentos
Próxima aula
Mais acerca das funções.
Condições, decisões.
João Pedro PEDROSO
Introdução à Programação - minor
objeto elemento informação relativo a dados de um determinado
tipo, referido por uma variável;
range função incorporada no Python para gerar sequências de
inteiros;
sequencial comportamento de um programa passo a passo, da primeira
até à última instrução;
tela (canvas) superfície dentro de uma janela, onde se desenha;
variável do ciclo variável à qual é atribuído um valor diferente a cada
iteração do ciclo, que é usada como critério de paragem;
João Pedro PEDROSO
Introdução à Programação - minor
Download