Introdução à Programação

Documentos relacionados
Introdução à Programação Aula 19 Programação com objetos

Introdução à Programação Aula 20 Definição de classes

Programação procedimental

Programação com Objectos. Processamento de Dados I. 2. Classes, Atributos e Métodos

Programação orientada a objetos

Computação II (MAB 225)

Computação 1 - Python Aula 3 - Teórica: Tipos de dados, Strings, Estrutura Condicional 1/ 28

Pedro Vasconcelos DCC/FCUP. Programação Funcional 5 a Aula Definições recursivas

Introdução à Programação Aula 4 Definição de funções

Pedro Vasconcelos DCC/FCUP. Programação Funcional 4 a Aula Listas

Pedro Vasconcelos DCC/FCUP. Programação Funcional 3 a Aula Definição de funções

Algoritmos e estrutura de dados

Programação I Aula 3 Primeiros programas

AULA 2: INTRODUÇÃO A PYTHON. Luís Feliphe Silva Costa

Introdução à Programação

Tutorial Klogo Turtle

Introdução à Programação Aula 3 Primeiros programas

Tema da aula Introdução ao paradigma de programação: Orientado a Objetos

Programação Funcional

Processamento da Informação Teoria Funções

Fundamentos da Programação

Fundamentos da Programação

FUNDAMENTOS DA PROGRAMAÇÃO 2º Teste, 1 de junho de 2013, 1h30m

Introdução à Programação / Programação I

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

Nesta aula... Iteração indefinida. 1 Decisões em Python. 2 Funções lógicas. 3 Recursão. 4 Iteração. 5 Ciclo for ou while?

Introdução à Programação Aula 14 Dicionários

Introdução à Computação

Programação Funcional Aulas 5 & 6

Algoritmos e estrutura de dados

1 Expressões, valores e tipos 1. 2 Variáveis e atribuições 5. cálculo de expressões segue a estrutura de parênteses e as prioridades dos operadores

Computação 1 - Python Aula 10 - Teórica: Estrutura de Dados - Dicionário. João Carlos, Carla Delgado, Ana Luisa Duboc 1/ 18

Variáveis e Entrada de Dados Marco André Lopes Mendes marcoandre.googlepages.

Linguagens de Programação Conceitos e Técnicas. Amarrações

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

Programação Orientada a Objetos em Python

Programação por Objectos. Java

Fundamentos da Programação

1 Introdução e Conceitos básicos

Python para quem sabe Python

Fundamentos da Programação

Introdução à Programação

Introdução à Programação. Conceitos Básicos de Orientação a Objetos

Produtividade e qualidade em Python através da metaprogramação

Python. Resumo e Exercícios P3

Linguagem de Programação III

Paradigmas. Fortran, Algol, Algol-68, Pascal, C, Cobol, PL/I

Programação I Aula 9 Listas e tuplos

Aula 04 Introdução à Programação Orientada à Objetos

Python - Variáveis e expressões

Introdução à programação orientada a objetos. Nesta aula... Turtle graphics. Primeiro programa com objetos. Exercício. Métodos.

Fundamentos de Programação em Python

Aula de hoje. Tipos de Dados e Variáveis. Constantes literais. Dados. Variáveis. Tipagem dinâmica. SCC Introdução à Programação para Engenharias

Capítulo 10. Sobre a implementação de um simulador por eventos usando C++

Orientação a Objetos e Java

Estrutura de Dados Funções e Procedimentos

Computação 2. Aula 5 Teórica professor: Leonardo Carvalho

Transcrição:

Introdução à Programação Aula 21: Programação com objetos Rita P. Ribeiro 2017/2018 Departamento de Ciência de Computadores

Nesta aula 1. Programação com objetos 2. Exemplo: módulo turtle 3. Tipos de dados 4. Definição de classes 5. Exemplo: contas bancárias INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 1

Programação com objetos

Programação com objetos Programação procedimental e funcional: decompomos problemas em sub-problemas; compomos programas definindo funções e procedimentos. Programação com objetos: agregamos dados e operações em entidades chamadas objetos; compomos programas definindo objetos que interagem. INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 2

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). INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 3

Exemplo: módulo turtle

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. INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 4

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 INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 5

Módulo turtle (cont.) INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 6

Estado Cada tartaruga guarda um 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 INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 7

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! INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 8

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). INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 9

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. INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 10

Um passo da simulação def step(ts, a): "Passeio aleatório de várias tartarugas." # ts: lista de tartarugas; a: angulo 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) INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 11

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) INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 12

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) INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 13

Exemplo de execução INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 14

Tipos de dados

Tipos de dados Os tipos pré-definidos em Python são objetos: tipos básicos int, float, bool tipos estruturados str, list, tuple, dict INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 15

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 >>> xs.remove(4) >>> xs [1, 1, 2, 3, 3] INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 16

Definição de classes

Classes Objetos dum mesmo tipo pertencem à mesma classe: todos os objetos duma classe têm os mesmos métodos; cada objeto duma classe tem o seu estado e identidade privados. Exemplo: módulo turtle. os objetos tartaruga pertencem à classe Turtle; todos suportam os mesmo comandos; os valores de posição, orientação, etc. são específicos de cada objeto. INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 17

Definição de classes Podemos também definir novas classes para novos tipos de dados. class nome:. definições de métodos. INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 18

Exemplo: contas bancárias

Contas bancárias Vamos definir uma classe para contas bancárias: estado titular e valor depositado; métodos depositar, levantar e transferir valores. INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 19

Contas bancárias (cont.) Inicialização class Conta: "Classe para representar uma conta bancária." def init (self): self.titular = "" # titular da conta self.balanço = 0 # balanço inicial INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 20

Atributos Podemos definir estado associado ao objeto usando atributos. >>> conta = Conta() >>> conta.titular = "Pedro" >>> conta.balanço = 1000 O objeto tem dois atributos: uma cadeia e um inteiro. INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 21

Atributos (cont.) Podemos aceder aos atributos de um objeto com a notação objeto.atributo: modificar o seu valor; usar em expressões. >>> conta.titular Pedro >>> conta.balanço += 200 >>> conta.balanço 1200 INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 22

Métodos class Conta: "Classe para representar uma conta bancária."... def depositar(self, valor): self.balanço += valor def levantar(self, valor): self.balanço -= valor O primeiro argumento (self) é o objeto sobre o qual opera O segundo argumento (valor) é o valor a depositar ou levantar Ambos os métodos modificam o balanço da conta INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 23

Exemplo de uso >>> conta = Conta() >>> conta.balanço = 1000 >>> conta.depositar(200) >>> conta.balanço 1200 >>> conta.levantar(50) >>> conta.balanço 1150 INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 24

Inicialização Podemos usar o inicializador para definir valores para os atributos. class Conta:... def init (self, nome): self.titular = nome self.balanço = 0 # titular da conta # balanço inicial... INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 25

Inicialização (cont.) >>> conta = Conta("Pedro") >>> conta.depositar(200) >>> conta.titular Pedro >>> conta.balanço 200 INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 26

Conversão para texto Por omissão não é muito informativa: >>> conta = Conta("Pedro") >>> print(conta) < main.conta object at 0x7fd15f7ffb10> >>> str(conta) < main.conta object at 0x7fd15f7ffb10> INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 27

Conversão para texto (cont.) Podemos definir o método str para converter o objeto para texto; deve retornar uma cadeia. class Conta:... def str (self): return "%s : %d EUR" % (self.titular,self.balanço) >>> conta = Conta("Pedro") >>> conta.depositar(200) >>> print(conta) Pedro : 200 EUR >>> str(conta) Pedro : 200 EUR INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 28

Transferências Podemos tranferir valores de uma conta para outra. >>> c1 = Conta("Pedro") >>> c1.depositar(1000) >>> c2 = Conta("Beatriz") >>> c1.levantar(300) >>> c2.depositar(300) >>> print(c1) Pedro : 700 EUR >>> print(c2) Beatriz : 300 EUR Vamos definir um método para automatizar este processo. INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 29

Transferências (cont.) class Conta:... def transferir(self, valor, dest): # transferir da conta self para dest self.levantar(valor) dest.depositar(valor) >>> c1 = Conta("Pedro") >>> c1.depositar(1000) >>> c2 = Conta("Beatriz") >>> c1.transferir(300, c2) >>> print(c1) Pedro : 700 EUR >>> print(c2) Beatriz : 300 EUR INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 30

Encapsulamento Optámos por usar métodos levantar() e depositar() para fazer a transferência Podíamos ter modificado os atributos diretamente: def transferir(self, valor, dest): self.balanço -= valor dest.balanço += valor A primeira opção garante encapsulamento: o estado interno de cada objeto só é acedido pelos seus métodos INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 31

Encapsulamento (cont.) INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 32

Encapsulamento (cont.) Em Python não podemos proibir o acesso aos atributos de objetos Contudo: é boa prática limitar o acesso aos atributos aos métodos do objeto Podemos definir métodos só para consultar o valor de atributos. class Conta:... def saldo(self): # retornar o balanço atual return self.balanço INTRODUÇÃO À PROGRAMAÇÃO - 2017/2018: AULA 21 33