POO – Clases Abstractas, Interfaces y Herencia Múltiple.


En la entrada anterior vimos lo algunos conceptos básico de la POO, ahora veremos cómo se pueden generalizar las clases, forzandolas a seguir un patrón de comportamiento( qué hacer, no cómo ).

Finalmente se verá cómo se utiliza la Herencia Múltiple.

Clases Abstractas

Este Tipo de Clases nos permiten crear “método generales”, que recrean un comportamiento común, pero sin especificar cómo lo hacen. A nivel de  código tienen por particularidad que algunos de sus métodos no tienen “cuerpo de declaración”, ¿qué quiere decir esto? no tienen las llaves { } ni código dentro de ellos y deben estar precedidos por la palabra clave abstract. Si una clases contiene uno o más métodos abstractos está clase debe ser abstracta. Estas clases como son generalidades no pueden ser instanciadas por ningún objeto (se dice que su nivel de abstracción es demasiado alto), entonces su único fin es ser heredado/extendido por otras clases.

Ejemplo

public abstract class Figura {

	// Atributos:
	public int numeroLados;
	public int area;
	public int volumen;

	// Métodos:
	abstract public void calcularArea();
	abstract public void calcularVolumen();
}

En este poco original ejemplo se puede apreciar que toda figura tiene un método para calcular su Área y Volumen.

Ahora creemos la clase Esfera, que “Es una” Figura.

public class Esfera extends Figura{

	public float radio;
	public static float pi = (float)(3.1415);

	public Esfera( int radio ){
		this.radio = radio;
		this.numeroLados = 0;
	}

	// 4*pi*r²
	public void calcularArea(){

		this.area =  (4)*pi*radio*radio;
	}

	// (4/3)*pi*radio³
	public void calcularVolumen(){

		this.volumen =  (4/3)*pi*radio*radio*radio;
	}

}

ATENCIÓN:
– Las clases que hereden de la clase Abstracta deben implementar todos los métodos abstractos.
– Se debe tener presente que las clases abstractas pueden heredar de otras clases.
– La firma o parámetros de los métodos así como el tipo de dato deben respetarse, de lo contrario se está hablando de otro método totalmente diferente.

Si una clase abstracta está compuesta sólo por métodos abstractos y constantes entonces podemos hablar de una interface.

Interfaces

Las interfaces, tal como las clases abstractas. no se pueden instanciar. Sus métodos deben ser re-escritos por la clase que implemente.

Ejemplo fome:

public interface MatematicaVectorial {

 public static double pi    = 3.1415;
 public static double e     = 2.71828;

 public double[] sumar(int[][] vectores);
 public double[] restar(int[][] vectores);
 public double productoPunto(int[][] vectores);

}

La clase VectorR3, que es un vector de R³ implementa MatematicaVectorial


public class VectorR3 implements MatematicaVectorial
{
    public double valorX;
    public double valorY;
    public double valorZ;

    public double[] sumar(int[][] vectores){
        //Implementacion
    }

    public double[] restar(int[][] vectores){
        //Implementacion
    }  

    public double productoPunto(int[][] vectores)
    {
        //Implementacion
    }
}

¿y para qué hay interfaces, si hacen “casi” lo mismo que las clases abstractas? veamos el porqué

Herencia Múltiple

Java, asi como la mayoría de los lenguajes orientados a objetos, no permite la herencia múltiple (tipo grafo), pero bueno si la herencia jerarquica o de tipo árbol no es suficiente para modelar nuestro problema podemos valernos de la herencia y las interfaces.

Una sub-clase puede heredar de sólo UNA Super-Clase pero puede implementar varias interfaces

(no se me ocurre ningún ejemplo más didáctico que los que aparecen en google o libros, sí esos del tipo punto, figura, polígono, cuadrado xD )

Eso por ahora… espero haya sido claro.

Saludos

About these ads

Acerca de Esteban Martini

Software developer
Esta entrada fue publicada en Programacion Orientada a Objetos y etiquetada , , , , . Guarda el enlace permanente.

18 respuestas a POO – Clases Abstractas, Interfaces y Herencia Múltiple.

  1. sergio peña dijo:

    hola quisiera saber si php permite hernecia multiple y por que ?

  2. emartini dijo:

    No lo soporta porque dentro de los patrones de diseño se considera “confusa” y desordenada su utilización.

    No todo es llegar e implementar, el proceso de documentación es fundamental y agregar complejidad adicional al proceso francamente poco sano.

    Revisa este enlace:

    http://phpsenior.blogspot.com/2006/08/herencia-mltiple-en-php5.html

    Saludos

  3. mayra dijo:

    Hola

    Me llamo Mayra y soy estudiante de Lic. en Infórmatica
    y como principiante se me dificulta la elaboración de algoritmos en NASI-FLUJO-SPEUDOCOGIGO, alguna página que me pueda recomendar para asesorarme un poco mejor y hacer mas legible su compresión.
    Gracias, esperando recibir respuestas prontas.

  4. yailen dijo:

    Muy buena la explicación, esta bastante entendible todo lo que se explica.gracias!!!

  5. Julio Cesar dijo:

    muy bien explicado todo el concepto, quien no entienda que se lea un libro mejor.

    te felicito y me parece que tu blog es toda una sensacion.

  6. stefanny dijo:

    geniial esta pagina me ha ayudado mucho felicitaciones!!

  7. Carlos dijo:

    Gracias, me sirvió mucho tu artículo resumido pero suficientemente explicativo.

  8. Admin dijo:

    Muy bueno y se entiende a la perfección. Te felicito!

  9. Hola mi nombre es Mierda y te quiero mucho por tu explicación *.*

  10. blanca dijo:

    hola quisiera que publiques las clases de en un lodelo de programacion orienta a objetos “como grear un blospot”

  11. Alejandro dijo:

    Gracias muy bien explicado!

  12. luis dijo:

    no me ayuda mucho …

    Gracias

  13. miguel carales dijo:

    Gracias por explicarlo abstracto :) Miguel Carales L. (calama)

  14. nesty dijo:

    graxx por la explicacion

  15. Vale dijo:

    Un buen aporte eeeee Gracias!!!!

  16. Jesus dijo:

    Muy claro, simple, didáctico gracias este post

Deja un comentario

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