Ajuda..Opção para deixar o codigo mais limpo..Classe

2 respostas
C

Olá.
Estou tentando deixar o a minha classe mais limpa sem muitos sets e gets.
Pois vi que em algum lugar que era possivel. acho que colocar os calculos direto no set ou em um metodo estatico.

Segue o código, queria deixar de uma forma mais limpa que não precisasse fazer 3 sets pra cada atributo.
Alguém poderia me ajudar. quais opções eu teria. com algum exemplo.

class Exercicio03_classe {
    	
    	private double encapQtd1;
    	private double encapQtd2;
    	private double encapQtd3;
    	private double encapValor1;
    	private double encapValor2;
    	private double encapValor3;
    	private double encapSub1;
    	private double encapSub2;
    	private double encapSub3;
    	private double encapTotal;
    	
    	public void setQtd1 (double dobQtd1){
    		encapQtd1 = dobQtd1;
    	}
    	
    	public void setQtd2 (double dobQtd2){
    		encapQtd2 = dobQtd2;
    	}
    	
    	public void setQtd3 (double dobQtd3){
    		encapQtd3 = dobQtd3;
    	}
    	
    	public void setValor1 (double dobValor1) {
    		encapValor1 = dobValor1;
    	}
    	
    	public void setValor2 (double dobValor2) {
    		encapValor2 = dobValor2;
    	}
    	
    	public void setValor3 (double dobValor3) {
    		encapValor3 = dobValor3;
    	}
    	
    	public void setSub1 (double dobSub1) {
    		encapSub1 = dobSub1;
    	}
    	
    	public void setSub2 (double dobSub2) {
    		encapSub2 = dobSub2;
    	}
    	
    	public void setSub3 (double dobSub3) {
    		encapSub3 = dobSub3;
    	}
    	
    	public void setTotalGeral (double dobTotalGeral) {
    		encapTotal = dobTotalGeral;
    	}
    	
    	
    	public double getSubTotal1() {
    		encapSub1 = encapQtd1 * encapValor1;
    		return encapSub1;
    	}
    	
    		public double getSubTotal2() {
    		encapSub2 = encapQtd2 * encapValor2;
    		return encapSub2;
    	}
    	
    		public double getSubTotal3() {
    		encapSub3 = encapQtd3 * encapValor3;
    		return encapSub3;
    	}
    	
    	 public double getTotalGeral() {
    	 	encapTotal = encapSub1 + encapSub2 + encapSub3;
    	 	return encapTotal;
    	 }
    	
    	
    	
    	
    	
    	
    }

Muito Obrigado

2 Respostas

ViniGodoy

Primeiro de tudo, esqueça static.

Vamos criar uma classe para representar o que se repete.
Está vendo que você tem dados que caminham juntos (Qtd e Valor)? Eles podem ficar nessa classe.

Note que eles se repetem 3 vezes.

public class Item {
    private double quantidade;
    private double valor;

    public double getQuantidade() { 
        return quantidade; 
    }
    public double getValor() { 
        return valor; 
    }
}
O segundo passo, é não criar atributos para dados calculados. No caso, o subtotal. Ele pode ser expresso somente através de um método:
class Item {
    private double quantidade;
    private double valor;

    public double getQuantidade() { 
        return quantidade; 
    }
    public double getValor() { 
        return valor; 
    }
    public double getSubtotal() {
        return quantidade * valor;
    }
}
Note que também não faz sentido criar um setter para o subtotal. Afinal, ele é produto de um cálculo, não deveria ser alterado diretamente.

Agora vamos alterar a classe do exercício. Como são 3 itens, o ideal é criar um array.

class Exercicio03_classe {
    private Item itens[] = new Item[3];

    public Exercicio03_classe() {
        for (int i = 0; itens.length; i++) {
            itens[i] = new Item();
        }    
    }

    public void getItem(int nr) {
        return itens[nr-1];
    }

    public double getTotalGeral() {
        double total = 0;
        for (Item item : itens) {
            total += item.getSubtotal();
        }
        return total;
    }
}

Agora vamos a um exemplo de uso:

Exercicio03_classe estoque = new Exercicio03_classe();
Scanner in = new Scanner(System.in);
for (int i = 0; i = 3; i++) {     
    int nr = i+1;
    System.out.println("Entre com os dados do item " + nr);
    System.out.println("Valor: ");
    estoque.getItem(1).setValor(Double.parseDouble(in.nextLine());
    System.out.println("Quantidade:");
    estoque.getItem(2).setQuantidade(Double.parseDouble(in.nextLine());
    System.out.println("Subtotal:" + estoque.getItem(1).getSubtotal());
}
System.out.println("Total geral: " + estoque.getTotalGeral());
C

Opa.. então não sei se deveria colar o codigo do metodo principal é bem longo.

então é um programinha Jframe. ele calcula o quantidade x valor... 3 vezes. mostrando o os 3 subtotais.. e embaixo mostra a soma dos 3 subtotais.
era um exercicio da escola.. eu criei e ele funciona perfeitamente, é necessario usar set and get..

dai estou com essa duvida como deixa a classe mais limpa... ser mais direto.

acho que agora se entendeu como o programinha funciona

o JFRAME É ASSIM
QTD1 VALOR1 SUBTOTAL1
QTD2 VALOR2 SUBTOTAL2
QTD3 VALOR3 SUBTOTAL3
TOTAL

class Item {  
        private double quantidade;  
        private double valor;  
      
        public double getQuantidade() {   
            return quantidade;   
        }  
        public double getValor() {   
            return valor;   
        }  
        public double getSubtotal() {  
            return quantidade * valor;  
        }  
    }

não entendi como eu vou retornar o 3 valores aí..

Criado 31 de março de 2013
Ultima resposta 31 de mar. de 2013
Respostas 2
Participantes 2