28
Abr
13

Propiedades de la P.O.O. (Polimorfismo parte 2)

Teniendo en cuenta todo lo expuesto en Propiedades de la P.O.O. (Interfaces)Propiedades de la P.O.O. (Clases abstractas) y Propiedades de la P.O.O. (Polimorfismo parte 1), a continuación revisaremos  como podemos realizar polimorfismo con clases abstractas.

Ademas revisamos como funciona la herencia múltiple en java.

Lo anterior es plasmado en el siguiente código:

Interfaces.java
Aquí describimos las interfaces con que vamos a trabajar

package ingenio.ds.examples;

//*definición de la interfaz mostrable*/
interface Mostrable{
	/*definición de una constante, debe ser 'static final' por convención se e
	 *scribre el nombre en mayuscula sostenida*/
	public static final boolean ES_MOSTRABLE=true;
	/*definición del método mostrar*/
	public void mostrar();
}

//*definición de la interfaz acelerable*/
interface Acelerable{
	/*definición de una constante, debe ser 'static final' por convención se e
	 *scribre el nombre en mayuscula sostenida y los espacios con '_' */
	public static final double RELACION_ACELERACION=0.2;
	/*definición del método acelerar*/
	public void acelerar(int segundos);
}

/*dentro de las interfaces también existe la figura de la herencia aunque en e
 *estas puede hacerse de manera multiple*/

interface AcelerableMostrable extends Mostrable,Acelerable{

	/*esta interfaz tiene  por herencia las constantes boolean ES_MOSTRABLE y
	 * double RELACION_ACELERACION */

	/*esta interfaz tiene  por herencia los métodos void mostrar() y void acel
	 *erar(int) */

}

Clases.java
Aquí implementamos las interfaces.

package ingenio.ds.examples;

abstract class Vehiculo implements AcelerableMostrable{
	String nombre;
	String tipoVehiculo;
	String fuenteEnergia;
	Double velocidadMaxima;
	Double velocidadActual;
	Double relacionAceleracion;
	int cantidadTripulacion;

	public Vehiculo(){
	}

	/*
	 *Este será el método general utilizado por todos vehículos que no implemen
	 *ten un método acelelar pópio, está es una implementación del metodo descr
	 *ito en la interfaz Acelerable
	 */
	public void acelerar(int segundos){
		System.out.println(" Acelerar vehículo .");
		for(int i=0;i<segundos;i++){
			velocidadActual=velocidadActual+(velocidadMaxima/2*relacionAceleracion);
			if(velocidadActual>velocidadMaxima){
				velocidadActual=velocidadMaxima;
				break;
			}
		}
	}

	public void mostrar(){
		System.out.println(" Información del vehículo");
		System.out.println(" Nombre ...........: "+nombre);
		System.out.println(" Tipo   ...........: "+tipoVehiculo);
		System.out.println(" Fuente de energía : "+fuenteEnergia);
		System.out.println(" Tripulación ......: "+cantidadTripulacion);
		System.out.println(" Velocidad máxima .: "+velocidadMaxima);
		System.out.println(" Velocidad actual .: "+velocidadActual);
	}
}

class VehiculoTerrestre extends Vehiculo{
	String tipoTerreno;

	public VehiculoTerrestre(){
		tipoVehiculo="Terrestre";
	}

	public void mostrar(){
		super.mostrar();
		System.out.println(" Tipo de terreno ..: "+tipoTerreno);
	}

}

class Bicicleta extends VehiculoTerrestre{
	String tipoBicicleta;
	int cantidadLlantas;
	String material;

	public Bicicleta(){
		nombre="Bicicleta";
		tipoTerreno="Terreno firme";
		fuenteEnergia="Propulsión humana";
		relacionAceleracion=0.04;
	}

	public void acelerar(int segundos){
		System.out.println(" Acelerar bicicleta ");
		System.out.println(" - Tomar aíre (MUCHO AÍRE) ");
		for(int i=0;i<segundos;i++){
			System.out.println(" - Aplicar más fuerza sobre el pedal ");
			System.out.println(" - Aplicar más fuerza sobre el otro pedal");
			velocidadActual=velocidadActual+(1+relacionAceleracion);
			if(velocidadActual>velocidadMaxima){
				velocidadActual=velocidadMaxima;
				break;
			}
		}
	}
}

class VehiculoAcuatico extends Vehiculo{
	String tipoNavegacion;

	public VehiculoAcuatico(){
		tipoVehiculo="Acuatico";
	}
}

class Submarino extends VehiculoAcuatico{
	String tipoSubmarino;

	public Submarino(){
		nombre="Submarino";
		fuenteEnergia="Propulsión mecánica";
		relacionAceleracion=0.15;
		tipoNavegacion="Bajo superficie";
	}

	public void mostrar(){
		super.mostrar();
		System.out.println(" Tipo de submari ..: "+tipoSubmarino);
	}

	public void acelerar(int segundos){
		System.out.println(" Acelerar submarino ");
		System.out.println(" - Inyecta combustible ");
		System.out.println(" - Gases  ");
		System.out.println(" - Chispa ");
		System.out.println(" - Aumentar presión en la combustión ");
		for(int i=0;i<segundos;i++){
			System.out.println(" - Aumentar revoluciones en las aspas ");
			velocidadActual=velocidadActual+relacionAceleracion;
			if(velocidadActual>velocidadMaxima){
				velocidadActual=velocidadMaxima;
				break;
			}
		}
	}
}

class VehiculoAereo extends Vehiculo{
	Double alturaMaxima;
	String tipoCarga;

	public VehiculoAereo(){
		tipoVehiculo="Aereo";
	}

}

class Avion extends VehiculoAereo{
	int cantidadMotores;
	String tipoAvion;

	public Avion(){
		nombre="Avión";
		fuenteEnergia="Motor";
		relacionAceleracion=0.3;
	}

	public void mostrar(){
		super.mostrar();
		System.out.println(" Tipo de avión ....: "+tipoAvion);
		System.out.println(" Cantidad de motore: "+cantidadMotores);
	}

	public void acelerar(int segundos){
		System.out.println(" Acelerar avión ");
		System.out.println(" - Inyecta combustible ");
		System.out.println(" - Gases  ");
		System.out.println(" - Chispa ");
		System.out.println(" - Aumentar presión en la combustión ");
		for(int i=0;i<segundos;i++){
			System.out.println(" - Aumentar revoluciones en el motor");
			velocidadActual=velocidadActual+(velocidadMaxima/2*relacionAceleracion);
			if(velocidadActual>velocidadMaxima){
				velocidadActual=velocidadMaxima;
				break;
			}
		}
	}
}

Main.java
Aquí dejamos que ocurra la maJia

package ingenio.ds.examples;

public class Main {

   	public static void main(String argumentos[]){
		//*Creamos instancias de las sub-clases Bicicleta, Avion, Submarino*/
		Avion v1=new Avion();
		Bicicleta v2=new Bicicleta();
		Submarino v3=new Submarino();

		//*seteamos valores para el Avion*/
		v1.velocidadActual=0.0001;
		v1.velocidadMaxima=850.0;
		v1.cantidadTripulacion=2;
		v1.cantidadMotores=4;
		v1.tipoAvion="Pasajeros";
		v1.alturaMaxima=10400.0;

		//*seteamos valores para la Bicicleta*/
		v2.velocidadActual=1.0;
		v2.velocidadMaxima=60.0;
		v2.cantidadTripulacion=1;
		v2.cantidadLlantas=2;
		v2.material="Aluminio/Fibra";
		v2.tipoBicicleta="Montañera";

		//*seteamos valores para el Submarino*/
		v3.velocidadActual=0.0001;
		v3.velocidadMaxima=460.0;
		v3.cantidadTripulacion=8;
		v3.tipoSubmarino="Militar";

		//*Creamos un arreglo de la super clase y agregamos las instancias de las sub clases*/
		Vehiculo[] vehiculos= new Vehiculo[]{v1,v2,v3};
		acelerar(vehiculos);
	}
	/*
	 *En las implementaciones de Mostrable o Acelerable no nos importa
	 *de que clase son los objetos lo único que tenemos en cuenta es q
	 *ue */
	public static void acelerar(AcelerableMostrable instancias[]){
		for(AcelerableMostrable instancia:instancias){
			instancia.mostrar();
			instancia.acelerar(6);
			/*Si la instancia es de tipo Vehiculo, obtenemos la velocidad actual despues de acelerar
			 *preguntamos en caso de que no sea una instancia de Vehiculo no realizar el casting (en
			 *este ejemplo no es necesario, pero es importante realizar esa verificación en tus códi
			 *gos) */
			if (instancia instanceof Vehiculo){
				System.out.println(" Velocidad final   ."+((Vehiculo)instancia).velocidadActual );
			}
		}
	}
}

0 Responses to “Propiedades de la P.O.O. (Polimorfismo parte 2)”



  1. Dejar un comentario

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


I+Ds

Dudas consultas
Facebook
Twiter
Google +

Escribe tu dirección de correo electrónico para suscribirte a este blog, y recibir notificaciones de nuevas publicaciones por correo.

Únete a otros 348 seguidores

Ingenio DS en Facebook

Redes Sociales y Archivos

Entradas

abril 2013
L M X J V S D
« Feb   May »
1234567
891011121314
15161718192021
22232425262728
2930  

IngenioDS en twiter


A %d blogueros les gusta esto: