Métodos especiais Operações aritméticas A seguir. . . Métodos especiais Operações aritméticas A seguir. . . Programação orientada a objetos: exemplo com frações (conclusão) Fração: construtor class Fraction: def __init__(self,top,bottom): self.num = top # the numerator is on top self.den = bottom # the denominator is on the bottom def __str__(self): return str(self.num) + "/" + str(self.den) Nesta aula vamos desenvolver mais métodos para a classe Fraction; def getNum(self): return self.num def getDen(self): return self.den def simplify(self): common = gcd(self.num, self.den) self.num = self.num // common self.den = self.den // common João Pedro PEDROSO Introdução à Programação - minor João Pedro PEDROSO Métodos especiais Operações aritméticas A seguir. . . Métodos especiais Operações aritméticas A seguir. . . Operações aritméticas Operações aritméticas: métodos especiais Podemos definir um método especial para a adição de duas frações, que torna a utilização de frações mais natural; O método existente para isso é __add__: Podemos definir uma função que calcula a soma de duas frações: a c ad + cb + = b d bd class Fraction: [...] def __add__(self,otherfraction): class Fraction: [...] def add(self,otherfraction): newnum = self.num*otherfraction.den + self.den*otherfraction.num newden = self.den * otherfraction.den newnum = self.num*otherfraction.den + self.den*otherfraction.num newden = self.den * otherfraction.den common = gcd(newnum,newden) return Fraction(newnum//common,newden//common) Utilização: >>> >>> >>> >>> 3/4 f1 = Fraction(1,2) f2 = Fraction(1,4) f3 = f1.add(f2) print(f3) João Pedro PEDROSO common = gcd(newnum,newden) return Fraction(newnum//common,newden//common) Utilização: >>> >>> >>> >>> 3/4 f1 = Fraction(1,2) f2 = Fraction(1,4) f3 = f1 + f2 print(f3) Nota: nas operações com inteiros e em vírgula flutuante, a situação é exatamente a mesma: executar 4+5 é equivalente a executar (4).__add__(5). Introdução à Programação - minor João Pedro PEDROSO Métodos especiais Operações aritméticas A seguir. . . Operadores relacionais: métodos especiais Método __lt__ __le__ __eq__ __ne__ __ge__ __gt__ Resultado self + other self - other self * other self / other João Pedro PEDROSO Introdução à Programação - minor Métodos especiais Operações aritméticas A seguir. . . Operações aritméticas: métodos especiais Método __add__ __sub__ __mul__ __truediv__ Introdução à Programação - minor Introdução à Programação - minor Métodos especiais Operações aritméticas A seguir. . . Uso x < y x <= y x == y x != y x >= y x > y Descrição devolve True se x devolve True se x devolve True se x devolve True se x devolve True se x devolve True se x João Pedro PEDROSO for menor do que y for menor do que, ou igual a y for igual a y for diferente y for maior do que, ou igual a y for maior do que y Introdução à Programação - minor Métodos especiais Operações aritméticas A seguir. . . Métodos especiais Noções estudadas esta semana classe tipo composto definido pelo programados instanciar criar um objeto de uma determinada classe A lista completa de métodos especiais pode ser consultada em: http://docs.python.org/release/3.2/reference/ datamodel.html#customization Incluí metodos para: 1 2 3 4 5 6 Adaptação/personalização de tipos (customization); Comparação/relação entre objetos; Controlar acesso a atributos da classe; Implementar tipos compostos e o respetivo acesso (e.g., mapas/dicionários personalizados); Emular tipos e conversões numéricos; ... instância o mesmo que objeto objeto variável de um determinado tipo (a sua classe), frequentemente utilizada para modelar uma coisa ou conceito do mundo real; junta informação (dados) e operações relevantes para esse tipo composto de dados construtor cada classe é uma fábrica de objetos; se tiver definido um método de inicialização, esse método será executado ao criar um objeto, para dar um valor correto aos atributos método de inicialização em Python: __init__ método função definida dentro de uma classe, que é invocada partido de instâncias dessa classe atributo um dos dados que constituí uma instância João Pedro PEDROSO Introdução à Programação - minor João Pedro PEDROSO Introdução à Programação - minor Métodos especiais Operações aritméticas A seguir. . . Métodos especiais Operações aritméticas A seguir. . . Noções estudadas esta semana Recomendações programação orientada a objetos estilo de programação em que dados e operações que os manipulam são definidos em classes e métodos A nível geral, para ser bom (em qualquer disciplina): 1 linguagem orientada a objetos linguagem com capacidades de programação orientada a objetos Adquirir fluência: aprender o B-A-BA (regras de sintaxe, datilografia, utilização de ferramentas, escalas (em música), simplificar fórmulas (em matemática)); 2 igualdade superficial (shallow equality) igualdade de referências: verifica se duas variáveis se referem ao mesmo objeto Compreender e relacionar os conceitos: perceber porque é que as peças estão dispostas como estão; 3 igualdade profunda (deep equality) igualdade dos valores guardados num objeto Visão estratégica: o que fazer a seguir, como melhorar, pontos fortes e pontos fracos; 4 Raciocínio adaptativo: utilizar conceitos aprendidos em novas situações; 5 Pro-atividade: pensamento positivo, interesse pela matéria, disciplina e método para ultrapassar situações difíceis. cópia superficial (shallow copy) cópia do conteúdo de um objeto e das referências a outros objetos nele imbricados cópia profunda (deep copy) cópia do conteúdo de um objeto e, recursivamente, de todos os objetos que nele estão definidos João Pedro PEDROSO Introdução à Programação - minor Métodos especiais Operações aritméticas A seguir. . . Recomendações Para melhorar conhecimentos de programação: Para qualquer linguagem: prática regular é essencial para adquirir fluência; Recursos para Python na Internet: http://www.python.org: site principal, com links para praticamente toda a informação relacionada; http://docs.python.org/release/3.0.1/index.html: documentação; http://pypi.python.org: Python package index, lista com centenas de módulos disponíveis para download; http://code.activestate.com/recipes/langs/python: receitas para problemas específicos; http://scipy.org: the Scientific Python project: álgebra linear, análise estatística, transformadas de Fourrier, . . . Bibliografia, depois de Think Python: Problem Solving with Algorithms and Data Structures using Python. Bradley N. Miller and David L. Ranum. Introduction to Algorithms. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein. João Pedro PEDROSO Introdução à Programação - minor http://mason.gmu.edu/~jsuh4/teaching/strands.htm João Pedro PEDROSO Introdução à Programação - minor