Home Exercícios com classes em Java
Post
Cancelar

Exercícios com classes em Java

Refatorando os seguintes problemas usando classes e Programação Orientada a Objetos:

Exemplo classe animal

  1. Crie um programa com a classes animal, onde um cachorro, um gato e um passarinho herdam as características da classe animal.

Para resolver o problema proposto, podemos criar uma classe Animal com os atributos e métodos comuns a todos os animais, e em seguida, criar as classes Cachorro, Gato e Passarinho que herdam da classe Animal e acrescentam as suas próprias características específicas. Aqui está um exemplo de como isso pode ser feito em Java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
class Animal {
  private String nome;
  private int idade;

  public Animal(String nome, int idade) {
    this.nome = nome;
    this.idade = idade;
  }

  public String getNome() {
    return nome;
  }

  public int getIdade() {
    return idade;
  }

  public void emitirSom() {
    System.out.println("Animal emitindo som...");
  }
}

class Cachorro extends Animal {
  private String raca;

  public Cachorro(String nome, int idade, String raca) {
    super(nome, idade);
    this.raca = raca;
  }

  public String getRaca() {
    return raca;
  }

  public void latir() {
    System.out.println("Au au!");
  }
}

class Gato extends Animal {
  private String cor;

  public Gato(String nome, int idade, String cor) {
    super(nome, idade);
    this.cor = cor;
  }

  public String getCor() {
    return cor;
  }

  public void miar() {
    System.out.println("Miau!");
  }
}

class Passarinho extends Animal {
  private String especie;

  public Passarinho(String nome, int idade, String especie) {
    super(nome, idade);
    this.especie = especie;
  }

  public String getEspecie() {
    return especie;
  }

  public void piar() {
    System.out.println("Piu piu!");
  }
}

public class Programa {
  public static void main(String[] args) {
    Cachorro cachorro = new Cachorro("Rex", 3, "Labrador");
    Gato gato = new Gato("Bolinha", 2, "Preto");
    Passarinho passarinho = new Passarinho("Piu", 1, "Canário");

    System.out.println(cachorro.getNome() + " é um cachorro da raça " + cachorro.getRaca() + ".");
    cachorro.latir();

    System.out.println(gato.getNome() + " é um gato " + gato.getCor() + ".");
    gato.miar();

    System.out.println(passarinho.getNome() + " é um passarinho da espécie " + passarinho.getEspecie() + ".");
    passarinho.piar();
  }
}

Neste exemplo, a classe Animal é criada com os atributos nome e idade, e o método emitirSom. As classes Cachorro, Gato e Passarinho herdam da classe Animal e acrescentam seus próprios atributos e métodos, como raca, cor e especie, e os métodos latir, miar e piar, respectivamente.

Na classe Programa, são criados um cachorro, um gato e um passarinho com suas respectivas informações, e em seguida, são chamados os métodos latir, miar e piar. Note que cada objeto criado é uma instância de uma subclasse de Animal, e portanto, possui tanto os atributos e métodos da classe Animal quanto os atributos e métodos da subclasse específica.

Ao executar o programa, a saída será:

Rex é um cachorro da raça Labrador.
Au au!
Bolinha é um gato Preto.
Miau!
Piu é um passarinho da espécie Canário.
Piu piu!

Note que, ao chamar o método latir para o objeto cachorro, a saída é “Au au!”, que é específica para cachorros. O mesmo ocorre com os métodos miar e piar. Essa é a vantagem de usar herança em classes: podemos criar classes genéricas que podem ser estendidas por classes mais específicas, sem precisar repetir o código comum.

Exemplo classes bancária

  1. Programa de conta bancária, com depósito, saque e transferência.

Programação estruturada

Exemplo de programa de conta bancária em Java com programação estruturada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import java.util.Scanner;

public class ContaBancaria {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        
        int opcao;
        double saldo = 0;
        
        do {
            System.out.println("Escolha uma opção:");
            System.out.println("1 - Depósito");
            System.out.println("2 - Saque");
            System.out.println("3 - Transferência");
            System.out.println("4 - Saldo");
            System.out.println("0 - Sair");
            
            opcao = input.nextInt();
            
            switch(opcao) {
                case 1:
                    System.out.print("Digite o valor do depósito: ");
                    double deposito = input.nextDouble();
                    saldo += deposito;
                    break;
                case 2:
                    System.out.print("Digite o valor do saque: ");
                    double saque = input.nextDouble();
                    if (saque <= saldo) {
                        saldo -= saque;
                    } else {
                        System.out.println("Saldo insuficiente");
                    }
                    break;
                case 3:
                    System.out.print("Digite o valor da transferência: ");
                    double transferencia = input.nextDouble();
                    if (transferencia <= saldo) {
                        System.out.print("Digite o número da conta de destino: ");
                        int contaDestino = input.nextInt();
                        System.out.println("Transferência realizada com sucesso");
                        saldo -= transferencia;
                    } else {
                        System.out.println("Saldo insuficiente");
                    }
                    break;
                case 4:
                    System.out.println("Saldo: " + saldo);
                    break;
                case 0:
                    System.out.println("Saindo...");
                    break;
                default:
                    System.out.println("Opção inválida");
            }
            
            System.out.println();
            
        } while (opcao != 0);
    }

}

Usando funções

Segue abaixo um exemplo de programa de conta bancária em Java com a classe principal usando funções:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import java.util.Scanner;

public class ContaBancaria {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        
        double saldo = 0.0;
        
        int opcao;
        
        do {
            System.out.println("Escolha uma opção:");
            System.out.println("1 - Depósito");
            System.out.println("2 - Saque");
            System.out.println("3 - Transferência");
            System.out.println("4 - Saldo");
            System.out.println("0 - Sair");
            
            opcao = input.nextInt();
            
            switch(opcao) {
                case 1:
                    System.out.print("Digite o valor do depósito: ");
                    double deposito = input.nextDouble();
                    saldo = depositar(saldo, deposito);
                    break;
                case 2:
                    System.out.print("Digite o valor do saque: ");
                    double saque = input.nextDouble();
                    saldo = sacar(saldo, saque);
                    break;
                case 3:
                    System.out.print("Digite o valor da transferência: ");
                    double transferencia = input.nextDouble();
                    System.out.print("Digite o número da conta de destino: ");
                    int contaDestino = input.nextInt();
                    saldo = transferir(saldo, transferencia, contaDestino);
                    break;
                case 4:
                    System.out.println("Saldo: " + saldo);
                    break;
                case 0:
                    System.out.println("Saindo...");
                    break;
                default:
                    System.out.println("Opção inválida");
            }
            
            System.out.println();
            
        } while (opcao != 0);
    }
    
    public static double depositar(double saldo, double valor) {
        return saldo + valor;
    }
    
    public static double sacar(double saldo, double valor) {
        if (valor <= saldo) {
            return saldo - valor;
        } else {
            System.out.println("Saldo insuficiente");
            return saldo;
        }
    }
    
    public static double transferir(double saldo, double valor, int contaDestino) {
        if (valor <= saldo) {
            // Lógica para transferência
            return saldo - valor;
        } else {
            System.out.println("Saldo insuficiente");
            return saldo;
        }
    }

}

Neste exemplo, as operações de depósito, saque e transferência foram transformadas em funções que recebem o saldo atual e os valores necessários para realizar as operações e retornam o novo saldo após a operação. Na classe principal, as funções são chamadas dentro do switch-case correspondente a cada operação. O objeto da classe Conta não é mais necessário neste exemplo, uma vez que todas as operações são realizadas por meio das funções.

usando Programação orientada a objetos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import java.util.Scanner;

public class ContaBancaria {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        
        Conta conta = new Conta();
        
        int opcao;
        
        do {
            System.out.println("Escolha uma opção:");
            System.out.println("1 - Depósito");
            System.out.println("2 - Saque");
            System.out.println("3 - Transferência");
            System.out.println("4 - Saldo");
            System.out.println("0 - Sair");
            
            opcao = input.nextInt();
            
            switch(opcao) {
                case 1:
                    System.out.print("Digite o valor do depósito: ");
                    double deposito = input.nextDouble();
                    conta.depositar(deposito);
                    break;
                case 2:
                    System.out.print("Digite o valor do saque: ");
                    double saque = input.nextDouble();
                    if (conta.sacar(saque)) {
                        System.out.println("Saque realizado com sucesso");
                    } else {
                        System.out.println("Saldo insuficiente");
                    }
                    break;
                case 3:
                    System.out.print("Digite o valor da transferência: ");
                    double transferencia = input.nextDouble();
                    System.out.print("Digite o número da conta de destino: ");
                    int contaDestino = input.nextInt();
                    if (conta.transferir(transferencia, contaDestino)) {
                        System.out.println("Transferência realizada com sucesso");
                    } else {
                        System.out.println("Saldo insuficiente");
                    }
                    break;
                case 4:
                    System.out.println("Saldo: " + conta.getSaldo());
                    break;
                case 0:
                    System.out.println("Saindo...");
                    break;
                default:
                    System.out.println("Opção inválida");
            }
            
            System.out.println();
            
        } while (opcao != 0);
    }

}

class Conta {
    private double saldo;
    
    public void depositar(double valor) {
        this.saldo += valor;
    }
    
    public boolean sacar(double valor) {
        if (valor <= this.saldo) {
            this.saldo -= valor;
            return true;
        } else {
            return false;
        }
    }
    
    public boolean transferir(double valor, int contaDestino) {
        if (valor <= this.saldo) {
            // Lógica para transferência
            this.saldo -= valor;
            return true;
        } else {
            return false;
        }
    }
    
    public double getSaldo() {
        return this.saldo;
    }
}

Neste exemplo, criamos uma classe Conta que possui os métodos depositar, sacar, transferir e getSaldo para realizar as operações na conta bancária. No método main, criamos um objeto da classe Conta e usamos seus métodos para realizar as operações de depósito, saque, transferência e consulta de saldo. As operações de saque e transferência verificam se há saldo suficiente na conta antes de realizar a operação e retornam um valor booleano indicando se a operação foi realizada com sucesso ou não.

Referências

Esta postagem está licenciada sob CC BY 4.0 pelo autor.