Esta aula consiste numa iniciação à definição de classes de objetos. Após a realização da prática, deverá ter sido adquirida uma noção básica dos seguintes conceitos:
Neste primeiro contacto com a definição de uma classe de objetos, pretende-se desenvolver uma classe cujos objetos simulem uma calculadora. Nas calculadoras tipicamente temos um valor (inicialmente a zero) que guarda o resultado da última operação. Ao efetuar uma nova operação o valor guardado será utilizado.
Comece a resolver o exercício com base no seguinte código. O construtor definido no início da classe define o atributo __value
e o procedimento (que altera o estado do objeto) é um método. Experimente esta classe, criando mais do que um objeto Calculator
, e invocando o método add()
em cada um deles. Defina uma propriedade que esconda o atributo __value
, de modo a permitir a consulta do valor guardado na calculadora, podendo apenas ser alterado usando as operações da calculadora. Note que este aspeto é muito importante. Se tal não fosse feito, a atualização do valor guardado na calculadora poderia ser realizada de forma incorrecta.
class Calculator:
def __init__(self):
self.__value = 0
def add(self, n):
self.__value = self.__value + n
...
Assumindo que a calculadora só funciona com números inteiros maiores ou iguais a zero, e não fazendo uso dos operadores *, ** , //, e %, complete-a com outras operações, nomeadamente:
Os objetos retângulo deverão ser imutáveis, significando que uma vez criados as suas dimensões já não podem ser alteradas. O método __init__
é um médodo construtor.
class Rectangle:
def __init__(self, width, height):
self.__width = width
self.__height = height
...
- área
- perímetro
- comprimento da diagonal
- se o retângulo é um quadrado
i) escalando o retângulo dado um fator, por exemplo, escalar um retângulo 4x5 por 2 daria origem a um novo retângulo 8x10. Caso o fator seja igual a 1, deverá ser devolvido o próprio retângulo (self).
def scale(self, factor):
...
ii) somando outro retangulo, por exemplo, o retângulo 3x4 somado com os valores 4 e 5 daria origem a um retângulo 7x9.
def sum(self, width, height):
...
def max_rectangle(a, b):
...
Os contactos devem ter informação sobre o nome e o número de telefone de uma pessoa. O nome deve ser imutável; o número de telefone pode ser alterado.
Desenvolva uma classe Rational
para representar números racionais (frações). Os objetos deverão ser imutáveis e deverá ser possível criar um número racional de duas formas: (a) dando apenas o numerador, ficando o denominador implicitamente igual a 1; (b) dando o numerador e o denominador. Defina métodos de instância que permitam:
Rational
).Rational
).Rational
).