Caros, estou entrando hj no GUJ por indicação de um amigo que elogiou muito o grupo, e gostaria que alguém desse uma olhada nas classes que fiz, básicas e iniciais, pra ver se eu estou chegando perto do paradigma de POO.
A maior dúvida é se troco mensagens da forma que troquei entre objetos ou passo como parametros. ( assinalei no codigo DUVIDA )
Valeu,
Rafael.
public class Viagem
{ public static void main (String[] args)
{
// instanciando objetos e iniciando valores
Carro v;
v = new Carro();
v.nome = "Gol 1000";
v.tanque = 50.0;
v.consumo = 10.0;
Autonomia a;
a = new Autonomia();
// DUVIDA
a.tanque = v.tanque; // troca de mensagens entre objetos
a.consumo = v.consumo;
// FIM DUVIDA
a.leInt(); // entrar com a distancia
System.out.println("autonomia = "+a.calculaAutonomia());
System.out.println("gasto = "+a.calculaGasto());
System.exit(0); // para sair de JOptionPane
}
}
public class Veiculo
{
// atributos
String nome;
double tanque;
double consumo;
}
public class Carro extends Veiculo
{
// atributos
int pessoas = 4;
}
public class Moto extends Veiculo
{
// atributos
int pessoas = 2;
}
import javax.swing.*;
public class Autonomia
{
// atributos
double tanque;
double consumo;
double precoGas = 1.60; // por litro
int distancia;
// metodos
public double calculaAutonomia() // calcular a autonomia do veiculo
{
return (consumo * tanque); // tem que vir dos objetos veiculos
}
public double calculaGasto() // calcular o gasto
{
return(distancia * precoGas);
}
public void leInt()
{
String numLido =
JOptionPane.showInputDialog("Informe a distância da viagem: ");
distancia = Integer.parseInt( numLido );
}
}
Aparentemente você está trabalhando certo com classes, heranças, instancias e etc…
Única dica que eu deixo sobre o seu código, é o caso de utilizar Encapsulamento, ou seja, proteger os atributos usando o modificador private.
Por exemplo na sua classe Veiculos, você poderia deixar os atributos como privates, e usar métodos getters e setters para atribuir/recuperar esses valores, ficando mais ou menos assim.
public class Veiculo
{
// atributos
private String nome;
private double tanque;
private double consumo;
public void setNome(String nome) {
this.nome = nome;
}
public String getNome() {
return nome;
}
// E assim por diante..
}
Isso faz com que seu código fique mais seguro e evita “dores de cabeças” no futuro, além de ser um padrão para se trabalhar com Java Bean.
Belza kra, valeu mesmo, fiz algumas modificações, ve se e por ai:
public class Viagem
{ public static void main (String[] args)
{
// instanciando objetos e iniciando valores
Carro v;
v = new Carro();
v.setNome("Gol 1000");
v.setTanque(50.0);
v.setConsumo(10.0);
Autonomia a;
a = new Autonomia();
a.setTanque(v.getTanque()); // troca de mensagens entre objetos
a.setConsumo(v.getConsumo());
a.leInt(); // entrar com a distancia
System.out.println("autonomia = "+a.calculaAutonomia());
System.out.println("gasto = "+a.calculaGasto());
System.exit(0); // para sair de JOptionPane
}
}
ublic class Veiculo
{
// atributos privados
private String nome;
private double tanque;
private double consumo;
// metodos publicos
public void setNome(String nome)
{
this.nome = nome;
}
public String getNome()
{
return nome;
}
public void setTanque(double tanque)
{
this.tanque = tanque;
}
public double getTanque()
{
return tanque;
}
public void setConsumo(double consumo)
{
this.consumo = consumo;
}
public double getConsumo()
{
return consumo;
}
}
public class Moto extends Veiculo
{
// atributos
private int pessoas = 2;
}
public class Carro extends Veiculo
{
// atributos
private int pessoas = 4;
}
import javax.swing.*;
public class Autonomia
{
// atributos privados
private double tanque;
private double consumo;
private double precoGas = 1.60; // por litro
private int distancia;
// metodos publicos
// set && get
public void setTanque(double tanque)
{
this.tanque = tanque;
}
public double getTanque()
{
return tanque;
}
public void setConsumo(double consumo)
{
this.consumo = consumo;
}
public double getConsumo()
{
return consumo;
}
public void setDistancia(int distancia)
{
this.distancia = distancia;
}
public int getDistancia()
{
return distancia;
}
// outros
public double calculaAutonomia() // calcular a autonomia do veiculo
{
return (consumo * tanque); // tem que vir dos objetos veiculos
}
public double calculaGasto() // calcular o gasto
{
return(distancia * precoGas);
}
public void leInt()
{
String numLido =
JOptionPane.showInputDialog("Informe a distância da viagem: ");
distancia = Integer.parseInt( numLido );
}
}
Eu coloco essa interação com o usuário na classe main como fiz abaixo?
public class Autonomia
{
// atributos privados
private double tanque;
private double consumo;
private double precoGas = 1.60; // por litro
private int distancia;
// metodos publicos
// set && get
public void setTanque(double tanque)
{
this.tanque = tanque;
}
public double getTanque()
{
return tanque;
}
public void setConsumo(double consumo)
{
this.consumo = consumo;
}
public double getConsumo()
{
return consumo;
}
public void setDistancia(int distancia)
{
this.distancia = distancia;
}
public int getDistancia()
{
return distancia;
}
// outros
public double calculaAutonomia() // calcular a autonomia do veiculo
{
return (consumo * tanque); // tem que vir dos objetos veiculos
}
public double calculaGasto() // calcular o gasto
{
return(distancia * precoGas);
}
}
import javax.swing.*;
public class Viagem
{ public static void main (String[] args)
{
// instanciando objetos e iniciando valores
Carro v;
v = new Carro();
v.setNome("Gol 1000");
v.setTanque(50.0);
v.setConsumo(10.0);
Autonomia a;
a = new Autonomia();
a.setTanque(v.getTanque()); // troca de mensagens entre objetos
a.setConsumo(v.getConsumo());
String numLido =
JOptionPane.showInputDialog("Informe a distância da viagem: ");
a.setDistancia(Integer.parseInt( numLido ));
System.out.println("autonomia = "+a.calculaAutonomia());
System.out.println("gasto = "+a.calculaGasto());
System.exit(0); // para sair de JOptionPane
}
}
[quote=“rafaelgloria”]Eu coloco essa interação com o usuário na classe main como fiz abaixo?
[/quote]
Isso mesmo. Agora você tem encapsulamento e separação entre lógica e apresentação. Suponho que já tenha percebido a importância de se fazer isso: facilidade de entender, modificar, depurar, manter, extender, etc.
Depende da aplicação. Se não for instanciar objetos diretamente da classe veículos, iniba essa possibilidade. E sempre que possível tente usar interfaces ao invés de classes abstratas.