Nas aulas anteriores. Programação orientada a objetos Classes Atributos e métodos

Documentos relacionados
Programação orientada a objetos: exemplo com frações (conclusão)

Programação I Aula 19 Aritmética com racionais Pedro Vasconcelos DCC/FCUP

f1 == f2 <=> n1 == n2 e d1 == d2 // Versão 1.0 class Fraction { private: public: Fraction (int, int); };

Programação procedimental

Programação Funcional 14 a Aula Classes de tipos revisitadas

Programação com objectos

Programação orientada a objetos

Algoritmos e estrutura de dados

Apontamentos de matemática 6.º ano Decomposição de um número em fatores primos

Fundamentos da Programação

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

REVISÃO DE MATEMÁTICA BÁSICA

Programação I Aula 18 Programação com objetos Pedro Vasconcelos DCC/FCUP

Lista de Linguagens de Programação 16

Frações. Números Racionais. Conceito de Fração:

Python. Resumo e Exercícios P3

Python: Exceções, Iteradores e Geradores. Claudio Esperança

MAC2166 Introdução à Computação

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

Computação II (MAB 225)

Prova Final de Linguagens de Programação - DCC024 - Sistemas de Informação

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

DURAÇÃO DA PROVA: 2 horas

Programação I Aula 3 Primeiros programas

MAC2166 Introdução à Computação

Curso de Python em 5 Horas

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

Implementando classes em C# Curso Técnico Integrado em Informática Fundamentos de Programação

MATEMÁTICA PROF. JOSÉ LUÍS NÚMEROS DECIMAIS

Aula prática 5. Funções Recursivas

Programação de Computadores

Prova 1 QUESTÃO 1. (1) nusp % 3 == 1. MAC2166 Introdução à Computação para a Engenharia. # include <stdio.h>

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

Frações Se dividirmos um objecto, ou seja, uma unidade em várias partes iguais, a cada uma dessas partes dá-se o nome de fração.

Roteiro da aula. MA091 Matemática básica. Simplificação por divisões sucessivas. Divisores. Aula 4 Divisores e múltiplos. MDC. Operações com frações

a) Defina uma função para obter o máximo entre dois números

Programação de Computadores

Nesta aula... Diagramas da stack. Recursão. 1 Funções. 2 Valores booleanos e condicionais. 3 Execução condicional e recursão

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( )

Computação II (MAB 225)

4 Conceito de Herança

Fundamentos da Programação

Programação de Computadores

Programação I Aula 15 Definições recursivas Pedro Vasconcelos DCC/FCUP

Técnicas de projeto de algoritmos: Indução

Programação I Aula 11 Mais sobre ciclos e iteração

Processamento da Informação Teoria. Listas e Matrizes

Programação imperativa

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?

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

Linguagem de Programação III

Computação II (MAB 225)

Introdução à Programação

Aula passada. Aula passada... Sequências Funções puras e modificadores. Listas Tuplos

Processamento da Informação

PRIMEIROS PASSOS COM PYTHON. Prof. Msc. Luis Filipe Alves Pereira 2015

Luciano Ramalho setembro/2012. Objetos Pythonicos. Orientação a objetos e padrões de projeto em Python

Algoritmos e estrutura de dados

Fração. Parte ou pedaço de um inteiro.

Computação II MAB 225. Brunno Goldstein.

Estados Equivalentes. Exemplo R: Sim, b e f. Note que se estamos em b ou f então:

Padrão para a codificação em Python

Fundamentos da Programação

Estrutura de Dados. Diego Silveira Costa Nascimento

Fundamentos da Programação

Python para quem sabe Python

Apontamentos de Matemática 6.º ano

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

Dicionários. Operações Aliases, cópias. Os tipos de dados compostos que estudamos até ao momento (strings, listas, tuplos) são sequenciais:

INFORMÁTICA PARA ENGENHARIA ESTRUTURAS DE DECISÃO. Prof. Dr. Daniel Caetano

Orientação a Objetos parte 2 ENCAPSULAMENTO, CLASSES, HERANÇAS

Números Inteiros Algoritmo da Divisão e suas Aplicações

Uma introdução ao GAP

Processamento da Informação Teoria. Conjuntos e Busca de dados

1 Definição de funções 1. 2 Valores boleanos e condicionais 5. Podemos depois usar as novas funções tal qual as pré-definidas

AED2 - Aula 11 Problema da separação e quicksort

Testes de correção (de defeitos)

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

Computação 1 - Python Aula 7 - Teórica: Estrutura de Repetição com teste de parada: while 1/ 23

Programação I Aula 16 Mais exemplos de recursão Pedro Vasconcelos DCC/FCUP

NÚMEROS RACIONAIS. FRAÇÕES. Ano letivo

Prova de Recuperação PMR3201 1o. semestre 2017 Prof. Thiago Martins

Nas aulas anteriores. Tipos nativos do Python: Tipos simples: inteiros, floats, booleanos. Tipos compostos: strings, listas, dicionários.

Capítulo VII : A Recorrência

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

if not(isinstance(a, int)) or a < 0: raise ValueError ("misterio: arg nao e inteiro nao negativo") else: return misterio_aux(a, a + 1)

21177 Modelação de Sistemas de Informação e-fólio B Resolução e Critérios de Correção

FRAÇÕES. O QUE É UMA FRAÇÃO? Fração é um número que exprime uma ou mais partes iguais em que foi dividida uma unidade ou um inteiro.

3. Números Racionais

So she went on, wondering more and more at every step, as everything turned into a tree the moment she came up to it.

Programação I Aula 15 Definições recursivas

Processamento da Informação

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Revisão de Frações. 7º ano Professor: André

Análise e Projeto Orientados a Objetos

Herança. Prof. Andrea Garcia PROW II

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

Variáveis e instruções de repetição

Computadores e Programação Engª Biomédica Departamento de Física Faculdade de Ciências e Tecnologia da Universidade de Coimbra Ano Lectivo 2003/2004

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

Transcrição:

Nas aulas anteriores Classes Atributos e métodos

Nesta aula... Nas aulas anteriores 1 2 3

: exemplo com frações Nesta aula vamos desenvolver uma classe para representar frações; Métodos: aquilo que se pretende, habitualmente, em operações com frações; Frações: dois inteiros, um sobre o outro: numerador (cima) e denominador (baixo); esses dois valores devem ser dados ao construtor

Fração: construtor class Fraction: def init (self,top,bottom): self.num = top self.den = bottom # the numerator is on top # the denominator is on the bottom def str (self): return str(self.num) + "/" + str(self.den) def getnum(self): return self.num def getden(self): return self.den myfraction = Fraction(3,4) print(myfraction) print(myfraction.getnum()) print(myfraction.getden())

Objectos são mutáveis Podemos alterar os atributos de uma instância: myfraction.num = 5 myfraction.den = 3 Podemos fazer o mesmo em métodos da classe, utilizado self.num e self.den; Situação em que isto é útil: simplificação de frações; Exemplo: as frações 12/16 e 6/8 podem ambas ser representadas por uma fração irredutível: 3/4; Redução: divisão do numerador e do denominados pelo maior divisor comum;

Estado e métodos: Fraction

Algoritmo de Euclides: Para reduzirmos uma fracção aos termos mais simples: 1 encontrar o maior divisor comum (GCD) 2 dividir numerador e denominador por GCD Sempre que se cria um objecto Fraction, devemos reduzi-lo Algoritmo de Euclides: Se n divide m, então n é o GCD. Caso contrário, o GCD é o GCD a n e ao resto da divisão de m por n. def gcd (m, n): if m % n == 0: return n else: return gcd(n, m%n) Versão não recursiva: def gcd(m,n): while m%n!= 0: m, n = n, m%n return n Utilização: >>> print(gcd(12,16)) 4

Simplificação de frações Com a função gcd podemos implementar um método para simplificar frações: class Fraction: [... ] def simplify(self): common = gcd(self.num, self.den) self.num = self.num // common self.den = self.den // common Notas: gcd é uma função, não é um método da classe (helper function); o método simplify não devolve nada, apenas altera o objeto (mutator method);

de dois objetos Tal como na realidade, dois objetos podem ser iguais sem serem o mesmo; esta ambiguidade existe também em objetos Python; Para verificar se duas referências dizem respeito ao mesmo objeto, utiliza-se o operador is: >>> myfraction = Fraction(3,5) >>> yourfraction = Fraction(3,5) >>> myfraction is yourfraction False

Igualdade superficial de dois objetos Se atribuirmos outro a a, as variáveis passam a ser aliases para o mesmo objecto: igualdade superficial shallow identity >>> ourfraction = myfraction >>> myfraction is ourfraction True

Comparação de dois objetos O operador ==, se não for redefinido, devolve a igualdade superficial: >>> a = Fraction(3,5) >>> b = Fraction(3,5) >>> a == b False Para compararmos os conteúdos de dois objectos igualdade profunda podemos definir uma função: def samefraction(f1,f2): return (f1.getnum() == f2.getnum()) \ and (f1.getden() == f2.getden()) >>> samefraction(a, b) True

Comparação e os seus riscos... Python permite-nos escolher o significado dos operadores, tais como == p = Point(4, 2) s = Point(4, 2) print("== on Points returns", p == s) # shallow equality test here a = [2,3] b = [2,3] print("== on lists returns", a == b) # deep equality test on list em Point comparação com == devolve False; em list comparação com == devolve True.

Recomendação: Nas aulas anteriores Beware of == When I use a word, Humpty Dumpty said, in a rather scornful tone, it means just what I choose it to mean neither more nor less. Alice in Wonderland

Para duplicarmos um objecto (cópia shallow): >>> import copy >>> a = Fraction(4,5) >>> b = copy.copy(a) >>> a == b >>> a == b False >>> samefraction(a,b) True Cópia em profundidade: deepcopy (copia o objecto, e todos objectos nele embebidos): >>> a = [[1,2,3],4] >>> b = copy.copy(a) >>> a[0][1] = 999 >>> b [[1, 999, 3], 4] >>> a = [[1,2,3],4] >>> b = copy.deepcopy(a) >>> a[0][1] = 999 >>> b [[1, 2, 3], 4] Com deepcopy a e b ficam objectos completamente separados.

Próxima aula Nas aulas anteriores (conclusão); Revisões.