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

Propaganda
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
Download