Friday, July 17, 2009

Una respuesta (Parte A)

La semana pasada, vimos un método mal escrito.. podemos aclarar que está haciendo este método?

Primero podemos identificar la estructura mas alta:


while (bandera==1)
{
} //fin del ciclo, termino de la creacion del barco portavion
while (bandera==2)
{
} //fin del ciclo while, termino de la creacion del barco acorazado
while (bandera==3)
{
} //fin del ciclo while para crear el barco crucero
while (bandera==4)
{
} //fin del ciclo, que crea el barco submarino
while (bandera==5)
{
} //fin del ciclo, creacion del barco destructor
while (bandera==6)
{
// colocar el barcos en un tablero
}

¡Aha! ¡Entonces, estamos creando 5 barcos y colocándolos en un tablero !

Bueno, dejamos esta estructura por el lado por un momento. ¿Que pasa al dentro cada uno de estos ciclos?

1: Ingresar las coordinados
2: Pregunta si queremos poner el barco vertical o horizontal
3: Pregunta si queremos poner el barco a lado izquierdo o derecha
4: Verificamos que podemos fiscalmente colocar el barco en el tablero a este punto
5: Verificamos que podemos colocar el barco sin tocando otro barco


¿Que sobre los barcos, donde guardamos la información sobre ellos? En los parámetros de método, entonces:

int columna_des,int columna_sub,int columna_cru,int columna_aco,int columna_por,int fila_des,int fila_sub,int fila_cru,int fila_aco,int fila_por,int aux_des,int aux_sub,int aux_cru,int aux_aco,int aux_por, int aux1_des,int aux1_sub,int aux1_cru,int aux1_aco,int aux1_por,int aux2_sub,int aux2_cru,int aux2_aco,int aux2_por,int aux3_sub,int aux3_cru,int aux3_aco,int aux3_por,int aux4_aco,int aux4_por,int aux5_aco, int aux5_por,int aux6_por,int aux7_por


Ok. Bien. ¿Como podemos limpiar está método?

Primero, sería ideal si podemos identificar las cosas comunes de los barcos y abstraerlos, con este podemos evitar mucha de la complejidad de el método viejo. ¿Cuales son los datos esenciales para un barco?

1: Su Nombre - Crucero, Submarino, Portaaviones, Destructor, Acorazado.
2: Su Posición o espacios ocupados - una lista de filas y columnas, o, podemos decir puntos.
3: Su Tamaño - el tamaño de la lista de puntos.

Bueno, si estamos programando en C, podemos usar un struct para guardar esta información. Pero este es Java y no tiene structs. Pero tiene classes..


public class Barco
{
public String nombre; // guardar el nombre del barco
public Point[] posiciones; // una lista de puntos donde el barco es ubicado
public int tamano; // El tamano del barco, i.e., el numero de espacios que tiene
}


Este es equivalente a un struct en C, y con este podemos guardar toda la información de un barco.

Ahora, reescribimos el método como así:




¿Poquito mejor, si? Pero todavía podemos limpiar mas. Vamos a ver como en Parte B de este post.

No comments:

Post a Comment