Agregação

O que posso melhorar desse exemplo de composição, eu fiz isso até agora, se tiver alguma faltando, desnecessária, ou para ser melhorada me avisem!

Classe Principal

import java.util.Scanner;


public class Agregacao {
	public static void main(String[] args) {
		Carro c1 = new Carro();
		c1.setCor("Azul");
		c1.setAno(2012);
		
		Scanner input = new Scanner(System.in);
		
		System.out.println("Informe o aro das rodas: ");
		c1.defineAro(input.nextInt());
		System.out.println("Informe a potencia do carro: ");
		c1.defineMotor(input.nextInt());
		System.out.println("Aro do Carro: "+c1.getAroCarro());
		System.out.println("Potencia do motor do Carro: "+c1.getMotorCarro());
	}
}

Classe Motor

[code]public class Motor {
private int potencia;
private String marca;
private boolean flex;

public int getPotencia() {
	return potencia;
}
public void setPotencia(int potencia) {
	this.potencia = potencia;
}
public String getMarca() {
	return marca;
}
public void setMarca(String marca) {
	this.marca = marca;
}
public boolean isFlex() {
	return flex;
}
public void setFlex(boolean flex) {
	this.flex = flex;
}

}[/code]

Classe Roda

[code]public class Roda {
private int aro;
private String marca;
private String cor;
public int getAro() {
return aro;
}
public void setAro(int aro) {
this.aro = aro;
}
public String getMarca() {
return marca;
}
public void setMarca(String marca) {
this.marca = marca;
}
public String getCor() {
return cor;
}
public void setCor(String cor) {
this.cor = cor;
}

}[/code]

Classe Carro

public class Carro { private String cor; private int ano; private Motor motor = new Motor(); private Roda roda1 = new Roda(); private Roda roda2 = new Roda(); private Roda roda3 = new Roda(); private Roda roda4 = new Roda(); public String getCor() { return cor; } public void setCor(String cor) { this.cor = cor; } public int getAno() { return ano; } public void setAno(int ano) { this.ano = ano; } public void defineAro(int tamanho) { this.roda1.setAro(tamanho); this.roda2.setAro(tamanho); this.roda3.setAro(tamanho); this.roda4.setAro(tamanho); } public void defineMotor(int potencia) { this.motor.setPotencia(potencia); } public int getAroCarro() { return this.roda1.getAro(); } public int getMotorCarro() { return this.motor.getPotencia(); } }

Coloquei todos atributos como private por causa do tal do encapsulamento, em algumas ocasiões houve exagero ou não?

Ao invés de criar quatro rodas, pode criar uma list ou vetor de rodas(depende do nível que ainda está no aprendizado).

public class Carro {  
 
  private Roda []  rodas; //ou
  private List<Roda> rodas;

}

Deu preguiça de ver o resto, mas parece estar indo bem. Continue assim. 8)

Talvez criar uma classe marcha e adicionar ao motor um array de marchas, na marcha haveria informações do tipo uma descrição e uma velocidade maxima da marcha, o que acha ?

ok!

Eu fiz exatamente isso:

na classe motor criei um array com 5 objetos de Marcha

private Marcha[] marcha = new Marcha[5];

Na classe principal pergunto qual a velocidade maxima de cada marcha

for(i=0;i<5;i++) { m[i]=input.nextInt(); } c1.defineMarchas(m);

Faço a cópia do array que criei na classe principal para o objeto c1 o carro. Afim de fazer ele chegar ate o seu destino. MOTOR -> MARCHAS.

public void defineMarchas(int[] marcha) { this.motor.setMarchas(marcha); }

Na classe motor fiz:

public void setMarchas(int[] m) { int i; for(i=0;i<5;i++) { this.marcha[i].setVelocidadeMax(m[i]); System.out.println("Velocidade maxima da marcha"+(i+1)+"é: "+this.marcha[i].getVelocidadeMax()); } }

e finalmente na classe Marcha:

public void setVelocidadeMax(int velocidadeMax) { this.velocidadeMax = velocidadeMax; }

Por fim eu não sei porque está acontecendo o erro:

[quote]
Exception in thread “main” java.lang.NullPointerException
at Motor.setMarchas(Motor.java:28)
at Carro.defineMarchas(Carro.java:38)
at Agregacao.main(Agregacao.java:24)[/quote]

Quando você faz isso:

private Marcha[] marcha = new Marcha[5];  

Você está instanciando o vetor de Marchas, porém é necessário instanciar as machas também, sempre que for utiliza-las.

 marcha[i] = new Marchar();
marcha[i].set....

NullPointerException é um dos erros mais comuns em java. Ocorre sempre que você tenta utilizar um objeto que não está instanciado.

[quote=ErickRAR]Quando você faz isso:

private Marcha[] marcha = new Marcha[5];  

Você está instanciando o vetor de Marchas, porém é necessário instanciar as machas também, sempre que for utiliza-las.

 marcha[i] = new Marchar();
marcha[i].set....

NullPointerException é um dos erros mais comuns em java. Ocorre sempre que você tenta utilizar um objeto que não está instanciado.[/quote]

UAhauah esqueci desse detalhe, valeuu erick!