Clase Abstracta y Clase Concreta¶
Cuando pensamos en una clase como un tipo, asuminos que los programas crearán objetos de ese tipo. Sin embargo, hay casos en que es útil definir clases para las cuales no se desea instanciar objetos. Tales clases son llamadas clases abstractas. Debido a que normalmente son utilizadas como base en jerarquías de clases, nos referiremos a ellas como clases bases abstractas. Las clases abstractas no sirven para instanciar objetos porque están incompletas, siendo sus clases derivadas las que debrán definir las partes faltantes.
El propósito de una clase abstracta es proveer una clase base apropiada desde la cual otras clases hereden.
Una clase abstracta puede tener implementación parcial, esto quiere decir que puede tener métodos abstractosy métodos concretos.
Las clases desde las cuales se pueden instanciar objetos se llaman clases concretas. Tales clases proveen implementaciones de cada método que definen y los métodos abstractos que hereda.
Las clases abstractas normalmente contienen uno o más métodos abstractos, los cuales no proveen implementación. Las clases derivadas deben reemplazar los métodos abstractos heredados para permitir la instanciación de objetos.
Para definir clases y métodos abstractos se debe utilizar el modificador abstract, tal como se ilustra en el siguiente script:
abstract class ClaseA{
public abstract function metodoAbstracto();
public function metodoConcreto(){
echo("Hola desde metodoConcreto en ClaseA");
}
}
Si tenemos una clase que herede de la ClaseA debe implementar el método metodoAbstracto(), tal como se ilustra en el siguiente script:
class ClaseB extends ClaseA{
public function metodoAbstracto(){
echo("Hola desde metodoAbstracto en ClaseB");
}
}