Análise de código fonte simples de um iniciante em Java

Uma ótima noite a todos vocês meus amigos. Sou novo tanto aqui no GUJ como no mundo da programação. Iniciei já um curso online de Java e tenho estudado por alguns livros.

Entretanto quando eu começo a programar algo, me perco por não saber se estou seguindo pelo caminho ‘do bem’, se estou fazendo algo deplorável. Por este motivo gostaria que vocês que possuem muito mais experiência que eu, me ajudassem com a análise do meu código e me dessem sugestões do que estudar e aonde melhorar.

O código é realmente SIMPLES. Eu tentei utilizar todo o meu conhecimento. Atualmente estou focado em aprender o puro Java, buscando entender bem todos os tópicos como polimorfismo, herança, composição, para então partir para outra. Gostaria de saber se tem algum problema eu postar códigos aqui neste fórum para ser analisado. Desde já agradeço a atenção de todos.

O código está separado em três classes, sendo uma delas a classe principal que utilizei somente para o teste, mas vou colar aqui também pois como utilizei o Scanner, gostaria de saber se fiz alguma burrada. E basicamente eu tentei criar um sistema bancário, aonde você conta com saque e depósito.

Classe Conta

package sistemabancosimples;

public class Conta {

private int numeroConta;
private Cliente cliente;
private double saldo;

//Tentando trabalhar o encapsulamento
//Saldo iniciará zerado. 
//O número da conta será gerado randomicamente.
public Conta(Cliente cliente) {
    this.numeroConta = 123;
    this.cliente = cliente;
    this.saldo = 0; 
}

//Método que realiza depósito na conta e imprime resultado.
public void deposito(double valorDeposito) {
    this.saldo += valorDeposito;
    System.out.println("Deposito realizado com sucesso." + "\n"
            + "Saldo atual R$ " + this.saldo + "\n");
}

//Método que realiza saque na conta e imprime resultado.
//Também verifica se há saldo suficiente para tal transação.
public void saque(double valorSaque) {
    
    if(this.saldo >= valorSaque){
        this.saldo -= valorSaque;
        System.out.println("Saque realizado com sucesso!" + "\n"
                + "Saldo atual R$ " + this.saldo + "\n");
    } else {
        System.out.println("Saldo insuficiente!" + "\n"
                + "Saldo disponível R$ " + this.saldo + "\n");
    }  
}

//Getters utilizados na impressão de infos ao usuário.
public int getNumeroConta() {
    return numeroConta;
}

public Cliente getCliente() {
    return cliente;
}

public double getSaldo() {
    return saldo;
}

}

Classe Cliente

package sistemabancosimples;

public class Cliente {

private String nome;
private String cpf;

public Cliente() {
    
}

//Mantive Getters e Setters pois o usuário irá informar tais infos.

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public String getCpf() {
    return cpf;
}

public void setCpf(String cpf) {
    this.cpf = cpf;
}

}

Classe Main

package sistemabancosimples;

import java.util.Scanner;

public class CaixaEletronico {

public static void main(String[] args) {
    
    Scanner scanner = new Scanner(System.in);
    Cliente cliente = new Cliente();
    Conta conta = new Conta(cliente);
    
    System.out.println("Informe seu nome: ");
    String nome = scanner.nextLine();
    
    System.out.println("Informe seu CPF: ");
    String cpf = scanner.nextLine();
    
    conta.getCliente().setNome(nome);
    conta.getCliente().setCpf(cpf);
    
    //Imprimir as infos da conta para o Usuário
    System.out.println("Cliente: " + conta.getCliente().getNome() + "\n"
                     + "CPF: " + conta.getCliente().getCpf() + "\n"
                     + "Numero Conta: " + conta.getNumeroConta() + "\n"
                     + "Saldo: " + conta.getSaldo() + "\n");
    
    conta.deposito(150);
    conta.saque(100);
    
}

}

Esta legal cara …

1 curtida

Para você que é iniciante na linguagem java em minha opinião sendo a linguagem de programação mais completa do mercado, uma das coisas que você tem de se preocupar é saber o pilares da linguagem que tem o paradigma de orientação a objetos. E sempre tentar balancear o seu código no nível de acoplamento e enxuto. O resto é só programar e perder algumas noites de sono.

1 curtida

Ufa, finalmente um código coeso de um iniciante! Rs… Digo isso, pois os códigos que ando vendo aqui no GUJ de iniciantes, são aqueles que implementa tudo no main, sem orientação a objetos nenhuma, td usando array para os dados e while e for pra todo lado devido a isso.

Teu código está bom, como disse, está coeso, classe Conta com responsabilidades de conta, Cliente como um POJO e encapsulamento e o método main fazendo apenas o que deve fazer mesmo.

Outro erro de inciantes, é implementar os getters e setters pra tudo, mesmo se não é utilizado, voce não cometeu esse erro. Não implementou o setSaldo da classe Conta, pois o saldo só será alterado através dos métodos deposito() e saque(), correto!

1 curtida

Muitíssimo obrigado.