Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 3 mensajes ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Legendario
Forista Legendario
Avatar de Usuario

Registrado: Mié May 24, 2006 11:00 pm
Mensajes: 2373

Nota Publicado: Sab Nov 06, 2010 11:35 am 
Arriba  
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:
Pieza PiezasJugador[];
al compilar me marca un error, pero si escribo
Código:
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

 Perfil WWW  

Desconectado
Forista Mayor
Forista Mayor

Registrado: Vie Ago 24, 2007 11:00 pm
Mensajes: 794
Ubicación: Galicia - España

Nota Publicado: Dom Nov 07, 2010 6:01 am 
Arriba  
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:
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:
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: Conocimiento Abierto

 Perfil WWW  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Nov 28, 2007 12:00 am
Mensajes: 1361
Ubicación: En la X del explorer (pulse para llamar)

Nota Publicado: Dom Nov 07, 2010 6:07 am 
Arriba  
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:
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:
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:
//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:
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" -> (mmlf)
Última versión del gestor "Music Manager" -> (jmmm)

 Perfil  
Mostrar mensajes previos:  Ordenar por  
 [ 3 mensajes ] 
Nuevo tema Responder al tema

Saltar a:  


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC - 6 horas
Traducción al español por Huan Manwë
phpBB SEO