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!
packagelista1;/** início da classe ExercicioDois */publicclassExercicioDois{/** declaração das variáveis */privatedoublevalorFabrica;privatedoublevalorImposto;privatedoublevalorVenda;/** criação dos set/get para atribuição de obtenção dos valores*/publicvoidsetFabrica(doublevalorFabrica){this.valorFabrica=valorFabrica;}publicdoublegetFabrica(){returnvalorFabrica;}publicvoidsetImposto(doublevalorImposto){this.valorImposto=valorImposto;}publicdoublegetImposto(){returnvalorImposto;}publicvoidsetVenda(doublevalorVenda){this.valorVenda=valorVenda;}publicdoublegetVenda(){returnvalorVenda;}/** início do método principal */publicstaticvoidmain(String[]args){/** criação do leitor de entrada de dados do usuário*/java.util.Scannerleitor=newjava.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: ");doublevalorFabrica=leitor.nextDouble();/** criação da instancia do objeto*/ExercicioDoisvenda=newExercicioDois();/** * calculo dos impostos e valor final */venda.setFabrica(valorFabrica);doublevalorImposto=(venda.getFabrica()*42)/100;venda.setImposto(valorImposto);doublevalorVenda=(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());}}
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.
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:
packagelista1;/** * início da classe ExercicioDois */publicclassExercicioDois{/** declaração das variáveis */privatedoublevalorFabrica;privatedoublevalorImposto;privatedoublevalorVenda;/** criação dos set/get para atribuição de obtenção dos valores */publicvoidsetFabrica(doublevalorFabrica){this.valorFabrica=valorFabrica;}publicdoublegetFabrica(){returnvalorFabrica;}publicvoidsetImposto(doublevalorImposto){this.valorImposto=valorImposto;}publicdoublegetImposto(){returnvalorImposto;}publicvoidsetVenda(doublevalorVenda){this.valorVenda=valorVenda;}publicdoublegetVenda(){returnvalorVenda;}}
packagelista1;importjava.util.Scanner;publicclassLogica{publicDoublelogica(Doublelogica){Scannerleitor=newScanner(System.in);/** criação da instancia do objeto */ExercicioDoisvenda=newExercicioDois();/** * calculo dos impostos e valor final */System.out.println("Digite preco de fábrica do carro: \n");doublevalorFabrica=leitor.nextDouble();venda.setFabrica(valorFabrica);doublevalorImposto=(venda.getFabrica()*42)/100;venda.setImposto(valorImposto);doublevalorVenda=(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());returnlogica;}}
packagelista1;publicclassMain{/** * @param args *//** início do método principal */publicstaticvoidmain(String[]args){/** criação da instancia do objeto l da classe Logica */Logical=newLogica();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:
publicclassExercicio{publicstaticvoidmain(Stringargs[]){doublevalorFabricaUsuario;/* lê as entradas do teclado */Precopreco=newPreco(valorFabricaUsuario,0.42,0.25);doublevalorVenda=preco.getValorVenda();System.out.println("O valor de venda é "+valorVenda);}}classPreco{privatefinaldoublevalorFabrica;privatefinaldoubletaxaImposto;privatefinaldoublemargemLucro;publicPreco(doublevalorFabrica,doubletaxaImposto,doublemargemLucro){this.valorFabrica=valorFabrica;this.taxaImposto=taxaImposto;this.margemLucro=margemLucro;}publicdoublegetValorVenda(){returnvalorFabrica*(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
fabiogs
Oi pessoal,
Agradeço muito a opinião de vcs. Já deu prá dar uma clareada e saber que o caminho é esse.
valeu!
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).