28
Abr
13

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

Uno de los beneficios que se obtiene de la programación orientada a objetos es el Polimorfismo. Usando la definición de la RAE se define como: una “Propiedad de las especies de seres vivos cuyos individuos pueden presentar diferentes formas o aspectos“; este principio también es aplicado a la P.O.O.

El principio funciona de una manera básica y es que: diferentes objetos utilicen el mismo protocolo para funcionar de manera diferente, o dicho de otra manera: que cada Objeto responda de manera diferente al invocar el mismo método; la ventaja de esto, es que la clase donde se invoca el método no debe preocuparse de la implementación (de que manera hace lo que tiene que hacer) o el tipo de objeto que es, lo único que tiene en cuenta es que el objeto permita invocar el método especifico.

Utilizaremos el código anterior (P.O.O. Herencia)  para continuar con la explicación y le prestaremos especial atención al método mostrar y acelerar. más documentación sobre interfaces

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

package ingenio.ds.examples;

//*definición de la interfaz acelerable*/
interface Mostrable{
	//*definición del método mostrar*/
	public void mostrar();
}

//*definición de la interfaz acelerable*/
interface Acelerable{
	//*definición del método acelerar*/
	public void acelerar(int segundos);
}

Clases.java
Aquí implementamos las interfaces.

package ingenio.ds.examples;

class Vehiculo implements Acelerable,Mostrable{
	String nombre;
	String tipoVehiculo;
	String fuenteEnergia;
	Double velocidadMaxima;
	Double velocidadActual;
	Double relacionAceleracion;
	int cantidadTripulacion;

	/*
	 *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 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;
			}
		}
	}

}

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;
			}
		}
	}
}

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);
	}

	//*recibimos un arreglo de la super clase
	public static void acelerar(Acelerable acelerables[]){
		//*recorremos este arreglo*/
		for(Acelerable acelerable:acelerables){
			//*he invocamos al método mostrar, definido en la interfaz Mostrable
			((Mostrable)acelerable).mostrar();
			//*aceleramos durante 6 segundos
			acelerable.acelerar(6);
			//*mostramos la velocidad final descrita en la clase Vehiculo
			System.out.println(" Velocidad final ..: "+((Vehiculo)acelerable).velocidadActual);
			System.out.println("");
		}
		/*Al método void acelerar(Acelerable[])
		 *en las líneas 47 y 49, no le consierne cuales son los procesos internos q
		 *ue se deben realizar para acelerar un vehículo, ni para mostrar la inform
		 *ación del mismo; lo único que se toma en cuenta es que esté permita invoc
		 *ar dichos métodos.
		 */
	}
}

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



  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: