Orientação a objetos Utilização de bibliotecas Definição de ...jpp/ip/slides-05.pdf ·...
Transcript of Orientação a objetos Utilização de bibliotecas Definição de ...jpp/ip/slides-05.pdf ·...
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Nesta aula. . .
1 Orientação a objetos
2 Utilização de bibliotecas
3 Definição de funções/procedimentos
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Introdução à programação orientada a objetos
Há uma quantidade de módulos disponíveis na biblioteca standard doPython:
análise de texto;enviar e-mail;pesquisar informação na Internet;cálculos matemáticos elaborados. . .
Apresentamos na aula passada o módulo turtle;
Veremos nesta aula como utilizar algumas das suas funcionalidades deuma forma orientada a objetos.
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Turtle graphics
Metáfora: programa controla tartaruga, que ao deslocar-se pode deixaruma linha, um rasto;
Temos comandos simples, em inglês, para dar instruções à tartaruga;
Muito simples, mas permite fazer desenhos impressionantes.
Objetivo: melhorar o raciocínio em ciência de computadores.
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Primeiro programa com objetos
tartaruga aleximport turtlewn = turtle.Screen()alex = turtle.Turtle()alex.forward(150)alex.left(90)alex.forward(75)
módulo turtle define doisnovos tipos:
tipo Turtletipo Screen
turtle.Screen (o tipoScreen definido no móduloturtle) cria uma janela;
a área dentro da janelachama-se tela (canvas eminglês);
na linha 3 criamos um objeto dotipo Turtle, i.e., uma tartaruga;
alex é uma variável que serefere a esta tartaruga;
nas linha 4 a 6, damosinstruções à tartaruga alexpara se deslocar, através dosseus métodos;
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Métodos
Um objeto pode termétodos — ações que pode executar;atributos — propriedades; por exemplo, objetos turtle têm a propriedadecolor.
Exemplo: alex.color("red") dá a cor vermelha à tartaruga e àslinhas que ela desenhar.O estado de um objeto é definido pelos atributos; para as tartarugas:
colortail — largura do seu traçoposição na janelaângulo. . . tartaruga alex
import turtlewn = turtle.Screen()wn.bgcolor("lightgreen") # set the window background colortess = turtle.Turtle()tess.color("blue") # make tess bluetess.pensize(3) # set the width of her pentess.forward(50)tess.left(120)tess.forward(50)wn.exitonclick()
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Exercício
escreva um programa quepergunta qual é a cor de fundo desejada, a cor da tartaruga, e a largura dotraço (pen) (o conjunto de cores utilizável está definido emhttp://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
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Mais tartarugas. . .
Podemos criar uma série tartarugas, da mesma forma que criamos umasérie de inteiros.Cada uma delas é um objeto independente, a que se chama umainstância do tipo (classe) turtle.Cada instância tem os seus próprios atributos, chamando os seuspróprios métodos.Convenção: zero graus é a direção este.
mais tartarugasimport turtlewn = turtle.Screen() # Set up the window and its attributeswn.bgcolor("lightgreen")tess = turtle.Turtle() # create tess and set some attributestess.color("hotpink")tess.pensize(5)alex = turtle.Turtle() # create alextess.forward(80) # Let tess draw an equilateral triangletess.left(120)tess.forward(80)tess.left(120)tess.forward(80)tess.left(120) # complete the triangletess.right(180) # turn tess aroundtess.forward(80) # move her away from the originalex.forward(50) # make alex draw a squarealex.left(90)alex.forward(50)alex.left(90)alex.forward(50)alex.left(90)alex.forward(50)alex.left(90)wn.exitonclick()
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Ciclos for
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 –> essencialpara boa programação;
esta é uma das principais ferramentas em programação: repetição (ouiteração);
ciclo com listasfor friendName in ["Joe", "Amy", "Brad", "Angelina", "Zuki"]:
print("Hi ", friendName, " Please come to my party on Saturday!")
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
a cada iteração do ciclo é verificado se ainda há itens a serprocessados; se não, o ciclo termina (condição de paragem), e oprograma segue na linha seguinte ao final do ciclo;
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Fluxo de execução
fluxo de execução: sequência de instruções seguidas pelo interpretadorPython;
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
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Fluxo de execução de um ciclo
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
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]
sem rangeimport turtlewn = turtle.Screen()alex = turtle.Turtle()
for i in [0,1,2,3]:alex.forward(50)alex.left(90)
wn.exitonclick()
com rangeimport turtlewn = turtle.Screen()alex = turtle.Turtle()
for i in range(4):alex.forward(50)alex.left(90)
wn.exitonclick()
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Função range
Experimentar: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)
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Mais alguns métodos turtle
variaveisalex.penup()alex.forward(100) # nao desenha nenhuma linha...alex.pendown()
alex.shape("turtle")
alex.speed(10)
alex.stamp() # 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) e10 (rápido).
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Módulos
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,. . .
módulo turtleimport turtle # allows us to use the turtles library
wn = turtle.Screen() # creates a graphics windowalex = turtle.Turtle() # create a turtle named alex
alex.forward(150) # tell alex to move forward by 150 unitsalex.left(90) # turn by 90 degreesalex.forward(75) # complete the second side of a rectanglewn.exitonclick()
Screen e Turtle estão definidos no módulo turtle.
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Busca de informação
o que poderíamos fazer se ninguém nos desse a conhecer turtle?a melhor forma de encontrar informação sobre Python é consultando adocumentação Python
1 tutorial2 listagem de todos os módulos disponíveis (global module index);3 referência da linguagem4 instruções de instalação5 how-tos/FAQ6 . . .
http://www.python.org/doc
Exercícios:1 procurar documentação sobre o módulo turtle2 familiarizar-se com outras funcionalidades das tartarugas
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Módulos
módulos são objetos, tal como todos os dados em Python;
objetos do tipo módulo contém outros elementos do Python;primeira ação com módulos: fazer import:
1 cria um novo nome (e.g., turtle);2 associa esse nome a um objeto do tipo módulo;3 −→ semelhança com os diagramas de referência.
utilização de definições contidas num módulo: dot notationturtle.Turtle→ classe Turtle definida no módulo turtle;ler no módulo turtle, aceder ao elemento Turtle.
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Módulo math
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 mathprint(math.pi)print(math.e)print(math.sqrt(2.0))print(math.sin(math.radians(90))) # sin of 90 degrees
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
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;. . .
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çãouniforme; tal como com range, o limite superior não é incluído.módulo random
import randomprob = random.random()print(prob)diceThrow = random.randrange(1,7)print(diceThrow)
1 os geradores de números aleatórios são baseados num algoritmodeterminístico → geradores de números pseudo-aleatórios
2 são inicializados com uma semente (seed)1 inicialização “manual”: e.g., seed(1)→ comportamento sempre igual;2 inicialização “por omissão”: em geral será diferente; por isso, o
comportamento, na prática, é aleatório.João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Definição de funções/procedimentos
Nas aulas passadas: vimos como usar os operadores e funçõesmatemáticas pré-definidas
Nesta aula: vamos rever como definir novas funções (procedimentos)
Podemos depois usá-los tal qual os pré-definidos
Programar: decompor um problema em funções cada vez mais simplesaté chegar às operações elementares
N.B.: neste contexto, puristas de programação funcional muitas vezespreferem o termo procedimento a função, mas este (function) é o termohabitual em Python.
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Definição de novas funções
def nome(lista de parâmetros):primeira instruçãosegunda instrução...instrução final
o início e fim da função são marcados pela indentação
a lista de parâmetros pode ser vazia
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Exemplo
def refrao():print("Se um elefante incomoda muita gente")print("Dois elefantes incomodam muito mais.")
def repete_refrao():refrao()refrao()
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Fluxo da execução
1 começa na primeira instrução do programa2 instruções são executadas por ordem sequencial3 a definição de uma função não altera fluxo de execução4 a invocação de uma função
1 executa as instruções da definição por ordem2 no final regressa ao ponto de onde partiu
5 funções podem chamar outras funções
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Parâmetros e argumentos
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
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Exemplo do livro
def print_twice(bruce):print(bruce)print(bruce)
>>> print_twice(’Spam’)SpamSpam>>> print_twice(5)55>>> print_twice(math.pi)3.141592653593.14159265359
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Funções que calculam valores
Uma função pode retornar um resultado:
def quadrado(x):return x*x
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 Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Âmbito de variáveis
Os parâmetros e variáveis usados numa função são locais
As atribuições a variáveis locais são invisíveis fora da função
>>> x = ’ola mundo’ # x é global>>> quadrado(2) # parâmetro x é local4>>> x’ola mundo’
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Âmbito de variáveis
As variáveis globais são visíveis dentro de uma função:
# taxa do imposto de valor acrescentado (global)taxa_IVA = 1.19
# calcula o preço com IVAdef precoFinal(valor):
return valor*taxa_IVA
>>> precoFinal(100)119.0
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Documentação
comentários começam por # até ao final da linhacolocados em qualquer parte dum programaignorados pelo interpretador; destinados aosprogramadores
docstrings cadeia de carateres na 1a linha de uma funçãotexto descritivo sucintotambém associado a módulos, classes e métodos (maistarde)usado pelos interpretadores de Python: comando help,pop-ups de informação (IDE)
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Documentação
# definição da função precoFinal# Pedro Vasconcelos, 2007
# taxa de imposto de valor acrescentadotaxa_IVA = 1.19
def precoFinal(valor):"Acrescenta a taxa de IVA a um valor."return valor*taxa_IVA
# fim da função
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Documentação
>>> help(precoFinal)Help on function precoFinal in module __main__:
precoFinal(valor)Acrescenta a taxa de IVA a um valor.
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Como decompor um problema?
Cada função deve:1 efetuar uma tarefa bem identificada
necessária em mais do que uma parte do programaou 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)
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
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çãonormal do Python;
ciclo for instrução Python para repetir as instruções que escrevermosno corpo do ciclo;
condição de paragem condição que, quando ocorre, termina a execução deum ciclo; a mais habitual, e a de não haver mais elementos aatribuir à 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
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Noções estudadas esta semana
gerador de números (pseudo-)aleatórios função de fornece a possibilidadede criar números com propriedades semelhantes às dosaleatórios;
instância objeto de uma classe (alex e tess instâncias da classeTurtle);
invocar ou chamar – executar um método de um objeto(wn.exitonclick() chama o método exitonclick do objetown);
iteração elemento de programação que permite repetir alguns passosde um programa;
método função associada a um objeto; quando é invocada, causaalgum efeito no objeto;
módulo ficheiro contendo definições e instruções Python, destinadasa serem usadas por outros programadores, através deimport;
número aleatório número gerado por um processo que torna impossível asua previsão com 100% de certeza (processo estocástico);
número pseudo-aleatório número que, sendo em rigor gerado por umprocesso determinístico, possuí propriedades semelhantes àde um aleatório;
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilização de bibliotecas
Definição de funções/procedimentos
Noções estudadas esta semana
objeto elemento informação relativo a dados de um determinadotipo, referido por uma variável;
range função incorporada no Python para gerar sequências deinteiros;
sequencial comportamento de um programa passo a passo, da primeiraaté à ú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 cadaiteração do ciclo, que é usada como critério de paragem;
João Pedro PEDROSO Introdução à Programação - minor
Orientação a objetosUtilizaçã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