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