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 sí 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







6 respuestas hasta el momento ↓
sergio peña // Octubre 29, 2008 a 11:50 am |
hola quisiera saber si php permite hernecia multiple y por que ?
emartini // Noviembre 6, 2008 a 12:05 am |
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
mayra // Noviembre 17, 2008 a 12:39 am |
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.
yailen // Marzo 15, 2009 a 6:41 pm |
Muy buena la explicación, esta bastante entendible todo lo que se explica.gracias!!!
Emanuel // Julio 28, 2009 a 1:54 am |
Muy buen post, dejo una reflexion:
http://emanuelpeg.blogspot.com/2009/07/poo-herencia.html
Julio Cesar // Noviembre 10, 2009 a 12:51 am |
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.