Dos preguntas en Java

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: akodo, maiku

Responder
Avatar de Usuario
Arion
Forista Legendario
Forista Legendario
Mensajes: 2373
Registrado: Jue May 25, 2006 7:00 am

Dos preguntas en Java

Mensaje por Arion » Sab Nov 06, 2010 7:35 pm

Hola compañeros, largo tiempo de no vernos :oops:

Les vengo con unas preguntas en Java (como detesto Java #-o ), el problema es que en mi clase de programación orientada a objetos tengo que entregar como proyecto final un juego de ajedrez y al armarlo me salieron dos dudas:

1.-Tengo mi paquete "Ajedrez", y dentro tengo un subpaquete (¿así se dice?) llamado "Piezas" y dentro la clase abstracta "Pieza" de donde voy a heredar las piezas (el caballo, alfil, etc), en el paquete "Ajedrez" tengo una clase llamada jugador que quiero que tenga un miembro del tipo "Pieza", si simplemente escribo

Código: Seleccionar todo

Pieza PiezasJugador[];
al compilar me marca un error, pero si escribo

Código: Seleccionar todo

Ajedrez.Piezas.Pieza PiezasJugador[];
me compila bien, ¿hay una forma más elegante de poner "Ajedrez.Piezas.Pieza? es decir ¿estoy acomodando mal los subpaquetes?

2.-Al parecer me acaban de resolver esta duda por MSN, pero igual. Tengo dos clases, una llama Jugador y otra Tablero, sabemos que cada jugador tiene 16 fichas, y que el tablero también "tiene" las 16 fichas, quiero que la misma instancia de las fichas se comparta entre la clase tablero y la clase jugador.

Gracias
Muerto hasta donde yo se
fpuga
Forista Mayor
Forista Mayor
Mensajes: 798
Registrado: Sab Ago 25, 2007 7:00 am
Ubicación: Galicia - España
Contactar:

Re: Dos preguntas en Java

Mensaje por fpuga » Dom Nov 07, 2010 2:01 pm

1.- Por convención los nombres de los paquetes se nombran en minúsculas. Además suelen seguir un estilo de nombres tipo internet. Por ejemplo si estudiaras en una universidad cuya pagina web fuera uvigo.es yo usaría un paquete con un nombre del tipo

Código: Seleccionar todo

package es.uvigo.arion.ajedrez.piezas
La forma de referenciar una clase desde otra es o bien empleando la nomenclatura paquete.clase o bien haciendo un import de la clase que te interesa al principio del código

Código: Seleccionar todo

import es.uvigo.arion.ajedrez.piezas.Pieza
Con eso ya podrías usar Pieza directamente.

2.- Esto depende de como estés haciendo el programa, pero si tienes una clase principal desde donde se ejecuta el resto, en esa clase crearía 16 instancias de la clase Pieza, y al crear tanto Tablero como Jugador le pasarías esos objetos Pieza ya creados
Mi blog: [url=http://conocimientoabierto.es]Conocimiento Abierto[/url]
Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: Dos preguntas en Java

Mensaje por akodo » Dom Nov 07, 2010 2:07 pm

Para tu primera duda.
Cuando declaras como tipo de variable "Pieza" creo que el compilador supone que esa clase está en el mismo archivo donde estás declarando ese tipo.
Por ejemplo:

Código: Seleccionar todo

package prueba;
public class UsoPieza{
  private Pieza pieza;
}
private class Pieza{
  //código
}
Si no quieres esto, cosa lógica en tu programa, lo que tienes que hacer es decirle al compilador dónde está esa clase. Lo puedes hacer con el nombre completo de la clase (Ajedrez.Piezas.Pieza pieza), o bien importando el paquete:

Código: Seleccionar todo

package prueba;
import Ajedrez.Piezas.Pieza;

public class UsoPieza{
  private Pieza pieza;
}

Para tu segunda duda.
Es posible que quieras añadir una clase "GrupoFichas" o algo así, que contenga todas las fichas disponibles junto con algunos métodos para marcarlas como "activas" y "comidas".
En cualquier caso es tan simple como:

Código: Seleccionar todo

//Lo pongo en el main, pero puede ir en cualquier otro sitio
public static void main(String[] args){
  Ficha[] fichas = new Ficha[16];
  Tablero t = new Tablero(fichas);
  Jugador j = new Jugador(fichas);
}

//clase Tablero
public class Tablero{
  private Ficha[] fichas;
  public Tablero(Ficha[] f){
    fichas = f;
  }
}

//clase Jugador
public class Jugador{
  private Ficha[] fs;
  public Jugador(Ficha[] f){
    fs = f;
  }
}
Para tu caso, creo que es mejor inicializar las fichas en el constructor porque es más lógico, aunque también las puedes inicializar con algún set:

Código: Seleccionar todo

public class Jugador{
  private Ficha[] fs;
  public Jugador(){}
  public void setFichas(Ficha[] fichas){
    fs = fichas;
  }
}
Al inicializar las fichas en el constructor impides que las fichas se puedan cambiar más tarde por otras nuevas, además de que el resto de métodos no necesitan checkear que existen piezas en el tablero (o jugador)

PD: Parece que se me adelantaron... :?
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])
Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje