Universidade da Beira Interior Programação Orientada a Objectos Cursos: 1º ciclo: Eng.ª Informática, Tecnologias e Sistemas de Informação, Bioengenharia 2ª Frequência, 2013/01/11 SEM CONSULTA Duração: 2 horas, 10.0 valores 1 – Considere a classe Movimento, esquematizada abaixo: Um movimento tem uma data, (ano, mês e dia), um valor, uma descrição e um tipo. O valor do atributo tipo será o carácter D se o movimento foi de débito e será C, se o movimento foi de crédito. public class Movimento { private int dia; private int mes; private int ano; private double valor; private String descricao; private char tipo; // D se débito, C se crédito public Movimento (int dia, int mes, int ano, double valor, String descricao, char tipo ){…} public public public public public public public public public public public public public public public } int getDia (){…} int getMes (){…} int getAno (){…} double getValor (){…} String getDescricao (){…} char getTipo(){…} void setDia(int dia){…} void setMes(int mes){…} void setAno(int ano){…} void setValor(double valor){…} void setDescricao(String descricao){} void setTipo(char tipo){…} String toString (){…}; boolean equals (Object o){…} Object clone(){…} a) Construa o método toString para a classe Movimento. Caso o movimento seja de débito, deverá colocar o caracter ‘-‘ a seguir ao valor. Caso o movimento seja de crédito, deverá colocar o carácter ‘+’ a seguir ao valor. b) Construa uma classe teste, onde num método main, testa a classe Movimento. Deverá criar um movimento de crédito, um movimento de débito, testar os métodos equals, clone e toString. Deverá indicar o output do programa que criar. 2 – Considere a classe ContaBanco, que tem como atributos o nome do titular da conta, um número de conta atribuído sequencialmente de forma automática, um saldo e uma lista de Movimentos (considere um objecto do tipo java.util.Vector<Movimento>). a) Construa a classe ContaBanco, definindo os atributos e os métodos de consulta e modificação (getters e setters). b) Defina o construtor sem parâmetros e o construtor que recebe como parâmetros o nome do titular, o saldo e uma lista de movimentos. c) Defina o método toString para a classe ContaBanco. d) Defina o método equals para a classe ContaBanco. e) Construa um método que adicione um Movimento à lista de movimentos da classe ContaBanco. O saldo da conta deverá ser alterado de acordo com o tipo e valor do movimento. f) Construa um método para a classe ContaBanco, que dado um ano e um mês, calcule o valor total dos movimentos durante esse mês/ano. (Total de movimentos = somatório dos créditos – somatório dos débitos); g) Reescreva o método da alínea e) de forma a ter o seguinte comportamento: se como resultado do movimento, o saldo da conta ficar negativo então o movimento não será adicionado e deverá ser gerada uma excepção do tipo “SaldoException”. Deve associar à excepção a mensagem de erro “Erro: saldo negativo”. h) Construa a classe de excepção SaldoException. i) Construa um método público e estático (public static) que receba como parâmetro um vector de contas de banco (objecto do tipo Vector<ContaBanco>). O método deverá reduzir em 100 euros o saldo de todas as contas do vector. Essa redução deverá ser feita usando o método da alínea g). Isto significa que apenas será feita se o saldo não ficar negativo. 3 – Uma ContaInvestimento é uma ContaBanco que rende juros ao fim de certo período de tempo, isto é, ao fim de um certo número de dias. A classe ContaInvestimento tem como atributos a data de criação (objecto do tipo java.util.GregorianCalendar) o prazo da conta (isto é, o número de dias decorridos os quais a conta rende juros) e a taxa de juro aplicada à conta (um double). a) Construa a classe ContaInvestimento definindo os atributos e um construtor que receba como parâmetros um objecto do tipo ContaBanco, a data de criação da conta, o prazo e a taxa de juro. b) Construa o método toString para a classe ContaInvestimento. 4 – O que é o estado de um objeto? 5 – O que é o comportamento de um objeto? 6 – Diga qual a diferença entre uma classe abstracta e uma interface. Construa um pequeno exemplo de uma classe abstracta e um pequeno exemplo de uma interface. Classe java.util.Vector: Vector() void addElement(Object element) void insertElementAt(Object obj, int position) void removeElementAt(int position) void setElementAt(Object obj, int position ) Object elementAt(int position) void clear() Object clone() boolean equals (Object element) boolean contains(Object element) Object firstElement() Object lastElement() int indexOf(Object element) int indexOf(Object element, int position ) boolean isEmpty() int size() String toString ()