1. A classe a seguir representa uma modelagem bastante simples de uma conta corrente:
class ContaCorrente {
    private int numero;
    private String correntista;
    private double saldo;
    public ContaCorrente(int numero, String correntista, double saldo) {
        this.numero = numero;
        this.correntista = correntista;
        this.saldo = saldo;
    }
    public void deposita(double valor) {
        this.saldo += valor;
    }
    public void retira(double valor) {
        this.saldo -= valor;
    }
    public void transfere(ContaCorrente destino, double valor) {
        this.retira(valor);
        destino.deposita(valor);
    }
}Defina a classe ContaCorrenteLanc que extende ContaCorrente para incluir
uma lista de lançamentos (uma instância de ArrayList\<String\>). Essa
classe deve redefinir os métodos deposita e retira de ContaCorrente para
adicionar as strings “DEPÓSITO DE n” ou “RETIRADA DE n” na lista de
lançamentos a cada depósito ou retirada, respectivamente, onde $n$ é o
valor depositado ou retirado.
Redefina o método String toString() na classe ContaCorrenteLanc para retornar
um extrato de todos os lançamentos, com um lançamento por linha e o saldo no final:
EXTRATO DA CONTA NO. 1234
DEPÓSITO DE 100.0
RETIRADA DE 50.0
DEPÓSITO de 20.0
SALDO: 250.02. A classe JTable é uma classe padrão de Java que mostra uma tabela na tela (como uma planilha).
Os dados que preenchem uma JTable são fornecidos por uma implementação da interface TableModel,
o modelo da tabela. Essa interface tem vários métodos que muitas implementações de TableModel 
provavelmente implementariam de maneira idêntica, então a biblioteca de classes Java também fornece
AbstractTableModel, uma classe abstrata que implementa TableModel facilitando o trabalho de
definir esses modelos.
Ao invés de implementar TableModel e implementar todos os seus métodos, uma classe pode herdar de
AbstractTableModel e implementar apenas os seguintes métodos:
public int getRowCount();       // Quantas linhas a tabela tem
public int getColumnCount();    // Quantas colunas a tabela tem
// Qual o rótulo da coluna
public String getColumnName(int coluna);
// Qual o valor de cada célula
public Object getValueAt(int linha, int coluna);Defina uma classe TabelaContas que herda de AbstractTableModel e mostra uma tabela a partir de uma
lista de contas (instâncias de ContaCorrentLanc do exercício 1). As colunas da tabela devem ser “Número”, “Correntista”,
“#Lanc” (quantos lançamentos essa conta tem) e “Saldo”. Teste essa classe com o seguinte programa:
import java.awt.*;
import javax.swing.*;
public class Contas extends JPanel {
    public Contas() {
        this.setFont(new Font("SanSerif",Font.PLAIN,24));
        this.setLayout(new BorderLayout());
        this.add(new JScrollPane(new JTable(new TabelaContas())));
    }
   
    public static void main(String s[]) {
        JFrame frame = new JFrame("Contas");
       
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new Contas(),"Center");
        frame.setSize(new Dimension(400, 300));
        frame.setVisible(true);
    }
}3. A classe Racional abaixo representa números racionais:
public class Racional {
    private int num; // numerador
    private int den; // denominador
    public Racional(int num, int den) {
        this.num = num;
        this.den = den;
    }
    public String toString() {
        return num + "/" + den;
    }
}Implemente métodos boolean equals(Object outro) e int hashCode() na classe Racional,
de modo que dois números racionais sejam iguais se ambos podem ser simplificados para
o mesmo numerador e denominador (por exemplo, 3/6 e 4/8 são iguais pois ambos podem ser
simplificados para 1/2). Para simplificar um racional, divida numerador e denominador pelo
MDC desses dois números.
Executar o código a seguir no scrapbook deve imprimir “2”:
java.util.HashSet<Racional> c = new java.util.HashSet<Racional>();
c.add(new Racional(3,6));
c.add(new Racional(2,5));
c.add(new Racional(4,8));
c.add(new Racional(1,2));
c.add(new Racional(10,25));
System.out.println(c.size());Use o formulário abaixo para enviar o Laboratório 8. O prazo para envio é segunda-feira, dia 21/01/2013.
Última Atualização: 2016-05-18 10:58