Preguntas sobre Orientación a Objetos (Java)

Tengo muchas dudas sobre esto, como el paso por parámetros, a la hora de usar métodos etc...
Pongo unas clases básicas y a partir de que me salgan problemas iré preguntando. La sencilla idea es tener  3 clases inicialmente, Jugador, Equipo (Sólo está puesto el constructor, getters y setters) y otra que contenga el main.

Jugador:
import java.util.*;
public class Jugador {
private String nombre;
private int altura;
private int puntos;

public Jugador(String nombre, int altura, int puntos) {
this.nombre = nombre;
this.altura = altura;
this.puntos = puntos;
}

public int getAltura() {
return altura;
}

public void setAltura(int altura) {
this.altura = altura;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public int getPuntos() {
return puntos;
}

public void setPuntos(int puntos) {
this.puntos = puntos;
}


}


Equipo:
import java.util.*;

public class Equipo {
private String nombre;
private Collection<Jugador> tablaJugadores = new ArrayList<Jugador>();
private int contadorTablaJugadores = 0;
private int fundacion;

public Equipo(String nombre, Collection<Jugador> tablaJugadores, int fundacion) {
this.nombre = nombre;
this.tablaJugadores = tablaJugadores;
this.fundacion = fundacion;
}

public int getFundacion() {
return fundacion;
}

public void setFundacion(int fundacion) {
this.fundacion = fundacion;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public Collection<Jugador> getTablaJugadores() {
return tablaJugadores;
}

public void setTablaJugadores(Collection<Jugador> tablaJugadores) {
this.tablaJugadores = tablaJugadores;
}
}


Supongamos que en la clase Equipo creo un método llamado anadeJugador, en el cual añade un Jugador a la Collection tablaJugadores.
Sería algo así (pongo como comentario a la hora de que el usuario introduzca los datos, ya que yo utilizo un paquete 'especial'.

public void anadeJugador(Collection<Jugador> tablaJugadores){
String introduceNombreJ;
int introduceAlturaJ, introducePuntosJ;
// Aquí el usuario entra los datos. NO esta implementado, pero se entiende
//Nombre Jugador
//Altura Jugador
//Puntos Jugador

tablaJugadores.add(new Jugador(introduceNombreJ,introduceAlturaJ,introducePuntosJ));
}


Primera pregunta: En la clase Gestión que tiene el main, para llamar al método haría un:
Equipo.anadeJugador(aquiVaAlgo);
En aquiVaAlgo, tiene que ir la collection. Pues bien, antes del método tengo que crear en la clase Gestión otra Collection?

Gracias!
Si no te he entendido mal tienes una clase Jugador y una clase Equipo, y quieres enviar al Equipo un Jugador. ¿No? Lo más lógico sería enviar como parámetro un Jugador, no una Collection de Jugadores.

Por ejemplo algo como:

Jugador j1 = new Jugador();
j1.setNombre = "Pepito";
j1.setApellido = "Grillo";
j1.setPosicion = "Portero";

Equipo eq = new Equipo();
eq.anadirJugador(j1);


El código del método anadirJugador sería algo como:

public void anadirJugador(Jugador jugador){
  tablaJugadores.add(jugador);
}


Podrías incluso declarar el método como static y así poder acceder de esta forma:

Equipo.anadirjugador(j1);
Gracias por la respuesta. Estoy bastante liado... [+risas]

Pongo un ejemplo más simple:
2 clases. La primera clase, 'notas', tiene 3 arrays donde se introducen las notas de primer curso, segundo y tercero:
public class notas{
private int[] curso1 = new int[20];
private int[] curso2 = new int[20];
private int[] curso3 = new int[20];
public notas(int[]curso1, int[]curso2, int[]curso3){
this.curso1 = curso1;
this.curso2 = curso2;
this.curso3 = curso3;
}
}

En la clase Principal, quiero crear un nuevo objeto notas. Me gusta que la clase con el main esté 'limpia'. Pero como en notas se pasan por parámetro 3 arrays, CREO que tengo que crear en la clase 3 arrays. Y ya no queda tan 'limpio'... ¿Estoy en lo cierto?

public class Principal{
public static void main(String[] args){
int[] curso1 = new int[20];
int[] curso2 = new int[20];
int[] curso3 = new int[20];
notas misNotas = new notas(curso1,curso2,curso3);
}
}


Para que quede 'limpio', me gustaría que en la clase Principal la creación del objeto misNotas se hiciese:
notas misNotas = new notas();

Sin tener que crear de nuevo tablas en la clase Principal. ¿Es posible?

Muchas gracias!!
Sobrecarga la constructora por defecto de notas y en el cuerpo pones la crecion de los arrays:
public class notas{
private int[] curso1;
private int[] curso2;
private int[] curso3;
public notas(){
this.curso1 = new int[20];
this.curso2 = new int[20];
this.curso3 = new int[20];
}
...


Saludos
Como te han dicho antes, Java soporta sobrecarga de métodos, así que puedes tener varios métodos que se llamen igual pero con diferentes parámetros.

Te recomiendo el tutorial de Java básico de JavaHispano:
http://javahispano.org/contenidos/es/java_basico_con_ejemplos/?menuId=TUTORIALS&onlypath=true
5 respuestas