Una clase abstracta permite definir métodos evitando implementarlos, dejando esa tarea a las subclases. Cuando se crea una clase abstracta se da por sentado que se obliga a heredar, esto es debido a que una clase abstracta no puede crear objetos por si mismo.
Características
- Las clases definidas como abstractas no se pueden instanciar.
- Un método abstracto solo puede estar contenido en una clase abstracta.
- Una clase abstracta, en PHP, no necesita contener métodos abstractos.
- Una clase derivada puede evitar la implementación de un método abstracto si dicha clase es abstracta también.
- Cuando se hereda de una clase abstracta, todos los métodos definidos como abstractos en la declaración de la clase base deben ser definidos en la clase derivada.
- Los métodos definidos como abstractos simplemente declaran la firma del método, pero no pueden definir la implementación.
- Por otra parte, las firmas de los métodos tienen que coincidir, es decir, la declaración de tipos y el número de argumentos requeridos deben ser los mismos.
- Para definir clases y métodos abstractos utilizamos la palabra reservada:
abstract
.
Representación UML
Para representar una clase abstracta se escribe el nombre en letra cursiva. Esto mismo ocurre para las funciones abstractas.
Código
Un ejemplo de clase abstracta
https://gist.github.com/jeavila/1d3c86dd5ba5bd1ba75f960df03be70a
Clase derivada.
https://gist.github.com/jeavila/48baafc6a45aa8ca8e5b8586d4ad24a9