Clase abstracta lugar



Descargar 105,16 Kb.
Fecha de conversión05.08.2017
Tamaño105,16 Kb.

HERENCIA

LUGARES JAVA ~ ~



LUGARES

Tenemos la Clase Abstracta Lugar a partir de la cual creamos las clases EspacioAbierto y EspacioCerrado. Con lo cual estas clases heredarán todo lo que incluyamos en la superclase.





CLASE ABSTRACTA LUGAR

package lugares;
import java.util.HashMap;

import java.util.Map;
/** * @author Nessy * */
/**

* @param espacioso. Si es espacioso o no

* @param alargado. Si tiene forma alargada

* @param desc. Descripción textual.

*/

public abstract class Lugar {
/**

* Listado de accesos del lugar en cuestión hacia otros lugares.

* Utilizamos un Map porque así podemos asociar puntos cardinales

* con accesos a lugares.

*/

Map accesos;


/** Indica si el lugar es espacioso o no. */

boolean espacioso;
/** Indica si el lugar es de forma alargada o más bien rechoncha */

boolean alargado;
/** Descripción textual del lugar*/

String descripcion;

/**

* Constructor de la clase. Inicializa un objeto de la clase Lugar,



* asignándole los valores especificados a sus atributos.

*/

Lugar(boolean espacioso, boolean alargado, String desc)



{

// Inicialmente comienza sin ningún acceso

accesos = new HashMap();
// Ahora ajustamos los atributos

this.espacioso = espacioso;

this.alargado = alargado;

//Descripción del lugar

descripcion = desc;//no hace falta this porque no existe ambigüedad
}

/**


* Método para crear un vínculo entre dos lugares, permitiendo

* así el acceso de uno a otro.

* La creo public xq el main está en otro paquete

*/

public void definirAcceso(String ptocardinal, Lugar destino)

{

// String[] rosavientos = {"N","NE","E","SE","S","SW","W","NW"};



// int k;

// for (k=0; k< 8; k++)

// {

// if (ptocardinal.equals(rosavientos[k])) break;



// }

// String opuesto = rosavientos[(k+4) % 8];

accesos.put(ptocardinal, destino);

// destino.accesos.put(opuesto, this);

}

/**


* Este método nos dice hacia qué lugar caminamos si tomamos una dirección determinada

* @param direccion

* @return El nuevo lugar, si es posible caminar en esa dirección o null si es imposible

*/

public Lugar caminarHacia(String direccion){



if (accesos.containsKey(direccion)){

return accesos.get(direccion);

}else{



return null;

}

}



/**

* Método para dar información al usuario del lugar.

* @return

*/

public String informacion(){



return descripcion;

}

}


CLASE ESPACIO ABIERTO

Creamos la clase EspacioAbierto que va a heredar de la SuperClase Lugar (con lo cual va a heredar de la misma)

Cuando creamos EspacioAbierto tiene todo lo de Lugar y además nosotros le añadiremos el terreno
package lugares;
/** * @author Nessy * */

public class EspacioAbierto extends Lugar {
/** Tipos de terreno

* Le doy esos valores con la intención de poder combinarlos posteriormente

* ie, puede ser transitable y bosque (1+16=17)*/

public static int TRANSITABLE =1;

public static int RUGOSO =2;

public static int ELEVADO =4;

public static int COSTERO =8;

public static int BOSQUE =16;

public static int DEPRESION =32;

public static int VALLE =64;
/** Un espacio abierto codifica el tipo de terreno que tiene un atributo de tipo entero*/

int terreno;
/**Constructor de la calse EspacioAbierto

* @param espacioso. Si es espacioso o no

* @param alargado. Si tiene forma alargada

* @param desc. Descripción textual.

* @param terreno Codificación del tipo de terreno

*/

public EspacioAbierto(boolean espacioso, boolean alargado, String desc, int terreno) {



super(espacioso, alargado, desc);

this. terreno=terreno;

}

}



CLASE PRUEBAS (main)

Creamos la clase Pruebas para ir probando lo que tenemos hasta el momento. En este caso la creamos en un paquete distinto para comprobar que cuando creemos una clase de otro paquete debo Importar el paquete.

//Lo importa al crear a como EspacioAbierto puesto que está en otro paquete

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import lugares.EspacioAbierto;

import lugares.Lugar;
/** * @author Nessy * */

public class Pruebas {

/** * @param args */



public static void main(String[] args) {

//para hacer pruebas creo 3 EspacioAbierto

EspacioAbierto a = new EspacioAbierto(true,false,"Plaza Mayor",EspacioAbierto.TRANSITABLE);

EspacioAbierto b = new EspacioAbierto(true,true,"Calle Principal",EspacioAbierto.TRANSITABLE);

EspacioAbierto c = new EspacioAbierto(true,true,"Puerto",EspacioAbierto.TRANSITABLE|EspacioAbierto.COSTERO);

//Defino los puntos como se ve abajo

//c-----b

// |


// |

// a


a.definirAcceso("N",b);

b.definirAcceso("S",a);

b.definirAcceso("W",c);

c.definirAcceso("E",b);


Lugar actual=a;

System.out.println("Estás en: "+actual.informacion());


//va a pedir órdenes y va a ir de un lado para otro

//pedir los datos por teclado

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

//bucle principal



do{

System.out.println("¿A donde quieres dirigirte?(N,S,W,E):");



try {

//leemos el comando del usuario por teclado y lo convierte en mayúscula

//toUpperCase convierte a mayúscula

String dir = br.readLine().toUpperCase();

//caminamos hacia la direccion que nos dice el usuario

//el método caminarHacia está en la clase Lugar.

Lugar nuevo=actual.caminarHacia(dir);

if(nuevo!=null){

actual=nuevo;

System.out.println("Estás en: "+actual.informacion());

}else{

System.err.println("No puedes caminar en esa direccion");

}

} catch (IOException e) {



e.printStackTrace();

}

}while(true);



}

}


La base de datos está protegida por derechos de autor ©absta.info 2016
enviar mensaje

    Página principal