Script em java - verificar

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, :smiley:
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 );
	}

}

Inicialmente, Bem Vindo Rafael :lol:

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 );
	}
}

Valeu,
[]'s
Rafael. :smiley:

Melhorou… mas pq a classe Autonomia sabe o que eh lerInt()? No mundo real, autonomias nao sabem ler ints ou se comunicar com o usuario :wink:

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.

Valeu galera, vou continuar fazendo esses exercicios e tirando dúvidas com vcs, valeu mesmo… :lol:
JAVA na veia ! ! !
[]'s
Rafael.

A classe Veiculo pode ser, ou ateh deve ser uma classe Abstract?
Pelo que li eu acho que sim.
Estou certo?
Abs,
Rafael.

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.