22
Nov
12

Propiedades de la P.O.O. (Herencia)

La herencia en la programación orientada a objetos es la propiedad que nos permite que diferentes clases de objectos tengan ciertas características en común entre ellos. por ejemplo Vehículos, existen varios tipos de vehículos como terrestres, aéreos,  acuáticos y dentro de cada una de estas clases podemos especificaciones de cada una de ella,  por ejemplo terrestres: bicicleta, motocicleta, automóvil; aéreos: aerostato, avión, cohete; acuático: balsa, submarino, buque. pero en todos ellos podemos  encontrar características comunes velocidad actual, velocidad máxima, número de pasajeros, fuente de energía. de igual manera cada uno de ellos define sus propias características que (redundante) lo hacen único de los demás.

ejemplo de herencia

La programación orientada a objetos permite  por medio de  la herencia que una clase tenga atributos y métodos comunes con otra, sin necesidad de realizar una definición explicita de dichas características. en el lenguaje de programación Java se permite heredar de una sola clase, así una clase solo puede tener una super-clase, y a su vez puede tener un número indeterminado de sub-clases.  en el ejemplo  Vehiculo es super-clase de VehiculoTerrestre, VehiculoAcuatico, VehiculoAereo.

public class Herencia{

	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(Vehiculo vehiculos[]){
		//*recorremos este arreglo
		for(Vehiculo vehiculo:vehiculos){
			//*he invocamos al método mostrar
			vehiculo.mostrar();
			//*aceleramos durante 6 segundos
			vehiculo.acelerar(6);
			//*mostramos la velocidad final
			System.out.println(" Velocidad final ..: "+vehiculo.velocidadActual);
			System.out.println("");
		}
		/*en las líneas:
		 *vehiculo.mostrar();
		 *vehiculo.acelerar(6);
		 *
		 *en realidad se están invocando los métodos de las sub-clases pero ninguna
		 *de ellas sobre-escribe el método acelerar(int segundos), y la clase Subm-
		 *arino no sobre-escribe el método mostrar; para estos casos la sub-clase
		 *hace referencía al metodo de la clase padre:
		 *
		 *al invocar el método mostrar() del objeto v1 (Avion) se ejecuta el métod-
		 *o sobre escrito en la clase Avion; al inovar el método mostrar() del obj-
		 *eto v2 (instancia de la clase Bicicleta) este invoca el método de la cla-
		 *se padre VehiculoTerrestre; al invocar el metodo mostrar() del objeto v3
		 *en realidad se invoca el método de la clase padre de la clase padre, o s-
		 *ea se invoca el metodo mostrar() de la clase Vehiculo.
		 */
	}

}

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

	void acelerar(int segundos){
		for(int i=0;i<segundos;i++){
			velocidadActual=velocidadActual+(velocidadMaxima/2*relacionAceleracion);
			if(velocidadActual>velocidadMaxima){
				velocidadActual=velocidadMaxima;
				break;
			}
		}
	}

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

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

class VehiculoTerrestre extends Vehiculo{
	String tipoTerreno;

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

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

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

La sintaxis para decir que una clase es sub-clase de otra es la palabra reservada extends, ClaseHijo extends ClasePadre.

 


0 Responses to “Propiedades de la P.O.O. (Herencia)”



  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

noviembre 2012
L M X J V S D
« Abr   Ene »
 1234
567891011
12131415161718
19202122232425
2627282930  

IngenioDS en twiter


A %d blogueros les gusta esto: