Uso de get/set

9 respostas
F

Olá pessoal,
É a minha primeira postagem aqui no fórum. Andei aprendeno muito de voces lendo as mensagens anteriores.
Bom, tenho um exercício que estou na dúvida pois usei muito get/set e gostaria de saber dos mais avançados se é realmente assim ou posso fazer de outra maneira.
Pensei se os cálculos que eu tenho dentro do métod main poderiam ser feitos sem o uso de get/set, só usando variávies locais.
O código funciona e apresenta o resultado esperado, mas estou tentando fazer com o código mais exuto possível desde o começo dessa minha nova meta é que aprender programar em Java. Obrigado por suas dicas e um abraço a todos!

package lista1;

/** início da classe ExercicioDois
 */
public class ExercicioDois {
		
		/** declaração das variáveis */
		private double valorFabrica;
		private double valorImposto;
		private double valorVenda;
		
		/** criação dos set/get para atribuição de obtenção dos valores*/
		public void setFabrica(double valorFabrica){
			this.valorFabrica = valorFabrica;
		}
		
		public double getFabrica(){
			return valorFabrica;
		}
		
		public void setImposto(double valorImposto){
			this.valorImposto = valorImposto;
			}
		
		public double getImposto(){
			return valorImposto;
		}
		
		public void setVenda(double valorVenda){
			this.valorVenda = valorVenda;
		}
		
		public double getVenda(){
			return valorVenda;
		}
		
		/** início do método principal */
		public static void main(String[] args){
		
		/** criação do leitor de entrada de dados do usuário*/	
		java.util.Scanner leitor = new java.util.Scanner(System.in);
		
		/** solicitação de entrada de dados do usuário e gravação na variavel valorFabrica
		 */
		System.out.print("Digite preco de fabrica do carro: ");
		double valorFabrica = leitor.nextDouble();
		
		/** criação da instancia do objeto*/
		ExercicioDois venda = new ExercicioDois();
		/**
		 * calculo dos impostos e valor final
		 */
		venda.setFabrica(valorFabrica);
		double valorImposto = (venda.getFabrica()*42)/100;
		venda.setImposto(valorImposto);
		double valorVenda = (venda.getFabrica()+venda.getImposto())*1.25;
		venda.setVenda(valorVenda);
				
		/**
		 *impressão da saida do valor do imposto sobre o valor de fabrica; 
		 *saída do valor final - valor de fabrica mais impostos de 42% acrescidos de 25% da margem do vendedor
		 */
		System.out.println("Valor do impostos sobre o valor de fabrica: "+venda.getImposto());
		System.out.println("Valor final: "+venda.getVenda());
	}
}

9 Respostas

W

Como você é iniciante em Java, continue a fazer o exercício desta maneira, pois está enxuto dentro do que é correto para você aprender Orientação a Objetos (O.O.).

Você não poderia declarar variáveis da operação diretamente em main, porque main não é um método parte de O.O., ele é somente um gatilho para iniciar um programa O.O. e no entanto é preciso utilizar main somente como gatilho mesmo.

O get e set são necessários sim porque mais adiante você deverá acostumar com a norma de O.O. sobre encapsulamento de atributos. Esta norma é tão difundida no mundo Java que as ferramentas de produtividade utilizam get/set para realização de reflexão para acesso aos atributos.

Em caso de mais dúvidas, entre em contato:

Ruttmann

wiliamps:
Como você é iniciante em Java, continue a fazer o exercício desta maneira, pois está enxuto dentro do que é correto para você aprender Orientação a Objetos (O.O.).

Você não poderia declarar variáveis da operação diretamente em main, porque main não é um método parte de O.O., ele é somente um gatilho para iniciar um programa O.O. e no entanto é preciso utilizar main somente como gatilho mesmo.

O get e set são necessários sim porque mais adiante você deverá acostumar com a norma de O.O. sobre encapsulamento de atributos. Esta norma é tão difundida no mundo Java que as ferramentas de produtividade utilizam get/set para realização de reflexão para acesso aos atributos.

Em caso de mais dúvidas, entre em contato:

http://oracle2java.blogspot.com.br/

Assino embaixo…

Evite ao máximo criar variáveis dentro do main, use ele só pra instanciar a classe inicial do programa e chamar o método necessário…

PedroMorragudo

Bom-dia a todos. fabiogs como o Wiliamps e Ruttmann te explicaram o seu código ficaria assim:

package lista1;

/**
 * início da classe ExercicioDois
 */
public class ExercicioDois {

	/** declaração das variáveis */
	private double valorFabrica;
	private double valorImposto;
	private double valorVenda;

	/** criação dos set/get para atribuição de obtenção dos valores */
	public void setFabrica(double valorFabrica) {
		this.valorFabrica = valorFabrica;
	}

	public double getFabrica() {
		return valorFabrica;
	}

	public void setImposto(double valorImposto) {
		this.valorImposto = valorImposto;
	}

	public double getImposto() {
		return valorImposto;
	}

	public void setVenda(double valorVenda) {
		this.valorVenda = valorVenda;
	}

	public double getVenda() {
		return valorVenda;
	}
}
package lista1;

import java.util.Scanner;

public class Logica {

	public Double logica(Double logica) {

		Scanner leitor = new Scanner(System.in);

		/** criação da instancia do objeto */
		ExercicioDois venda = new ExercicioDois();

		/**
		 * calculo dos impostos e valor final
		 */
		System.out.println("Digite preco de fábrica do carro: \n");
		double valorFabrica = leitor.nextDouble();

		venda.setFabrica(valorFabrica);
		double valorImposto = (venda.getFabrica() * 42) / 100;

		venda.setImposto(valorImposto);
		double valorVenda = (venda.getFabrica() + venda.getImposto()) * 1.25;
		venda.setVenda(valorVenda);

		/**
		 * impressão da saida do valor do imposto sobre o valor de fabrica;
		 * saída do valor final - valor de fabrica mais impostos de 42%
		 * acrescidos de 25% da margem do vendedor
		 */
		System.out.println("Valor do impostos sobre o valor de fabrica: "
				+ venda.getImposto());
		System.out.println("\nValor final: " + venda.getVenda());

		return logica;

	}

}
package lista1;

public class Main {

	/**
	 * @param args
	 */
	/** início do método principal */
	public static void main(String[] args) {

		/** criação da instancia do objeto l da classe Logica */
		Logica l = new Logica();
		l.logica(null);

	}

}
rmendes08

Veja só, da maneira que você fez não há diferença entre usar get/set e variáveis locais. A combinação de métodos públicos e variáveis privadas permitem você obter encapsulamento, que é proteger o estado interno do objeto. Se para cada variável privada você declara um get/set de maneira indiscriminada, e manipula as variáveis “por fora” do objeto, na prática, é a mesma coisa que usar variáveis públicas. Esse exemplo ficaria melhor assim:

public class Exercicio{
   public static void main(String args[]){
      double valorFabricaUsuario;
      /* lê as entradas do teclado */

      Preco preco = new Preco(valorFabricaUsuario, 0.42, 0.25);

      double valorVenda = preco.getValorVenda();
      System.out.println("O valor de venda é " + valorVenda);
   }
}

class Preco{
   private final double valorFabrica;
   private final double taxaImposto;
   private final double margemLucro;

   public Preco(double valorFabrica, double taxaImposto, double margemLucro){
      this.valorFabrica = valorFabrica;
      this.taxaImposto = taxaImposto;     
      this.margemLucro = margemLucro;
   }

   public double getValorVenda(){
      return valorFabrica * (1 + taxaImposto + margemLucro);
   }
}

Ou seja, a lógica fica toda dentro do objeto Preco. O método main se encarrega apenas de obter as entradas e mostrar as saídas.

PedroMorragudo

Como pode observar deixei as três classes no mesmo pacote lista1 e por esse motivo não preciso importar nada de lista1, só instancio os objetos. A única coisa que importei foi java.util.Scanner.

PedroMorragudo

Bom-dia rmendes08! Valeu pela explicação ficou ainda mais simples o código.

F

Oi pessoal,

Agradeço muito a opinião de vcs. Já deu prá dar uma clareada e saber que o caminho é esse.
valeu!

Jhonny_Oliveira

Há um artigo interessante do Paulo Silveira justamente sobre getters e setters http://blog.caelum.com.br/nao-aprender-oo-getters-e-setters/

fabim

Encapsulamento nao está ligado apenas a getters e setters. Consiste também em saber usá-los apenas pro necessário.
Atributos que sao interessantes apenas pra sua propria classe nem devem ser expostos (ficam como PRIVATE mesmo).

Criado 27 de setembro de 2012
Ultima resposta 3 de out. de 2012
Respostas 9
Participantes 7