Programación (PHP) – Abstracción e Interfaces

Qué es la abstracción en PHP?

La abstracción en PHP es un concepto que consiste en simplificar y organizar el código mediante la creación de clases, interfaces y métodos que representan conceptos abstractos.
Se utiliza para separar la implementación de la funcionalidad y mejorar la modularidad del código.

Beneficios de la abstracción en PHP

La abstracción ofrece varios beneficios para los desarrolladores de PHP:
Simplificación del código:
Al utilizar la abstracción, puedes reducir la complejidad de tu código al enfocarte en los aspectos esenciales y eliminar los detalles innecesarios.
Reutilización de código:
La abstracción te permite crear estructuras de código que se pueden reutilizar en diferentes partes de tu aplicación, lo que ahorra tiempo y esfuerzo en el desarrollo.
Organización del código:
Mediante la abstracción, puedes organizar tu código en componentes lógicos y modulares, lo que facilita su mantenimiento y comprensión.
Mejora de la legibilidad:
La abstracción ayuda a mejorar la legibilidad del código al ocultar los detalles de implementación y permitir un enfoque en los conceptos de alto nivel.

Ejemplo

Para trabajar el uso de la abstracción en PHP, consideremos un escenario donde necesitamos manejar diferentes tipos de animales en una aplicación.
Podemos utilizar la abstracción para definir una clase base llamada «Animal» y luego crear clases derivadas para animales específicos.

https://github.com/profeluisfagundez/dgetp-utu/tree/main/programacion_web/ejemplos/PHP/3-PHP_avanzado/2-abstraccion

Veamos la clase Animal:

<?php
abstract class Animal {
    private $nombre;
    
    public function __construct($nombre) {
        $this->nombre = $nombre;
    }

    public function getNombre(){
        return $this->nombre;
    }

    public function setNombre($value){
        $this->nombre = $value;
    }
    
    abstract public function sonido();
}
?>

Animal es una clase abstracta, así que no vamos a poder crear objetos con ella, para eso vamos a extender esta clase hacia la clase Gato:

<?php
class Gato extends Animal {
    
    public function __construct($nombre) {
        parent::__construct($nombre);
    }

    public function sonido() {
        return "Miau";
    }
}
?>

Creamos la clase Pájaro extendiendo de animal pero vamos a agregar algo extra, vamos a realizar una implementación de una «Interfaz» llamada volador:

<?php
class Pajaro extends Animal implements Volador {
    public function __construct($nombre) {
        parent::__construct($nombre);
    }

    public function sonido() {
        return "Canto de pájaro";
    }

    public function volar() {
        return "El pájaro está volando en el cielo.";
    }

    public function aterrizar() {
        return "El pájaro ha aterrizado en el suelo.";
    }
}

Pero, para qué nos sirve una interfaz?
Las interfaces de objetos permiten crear código con el cual especificar qué métodos deben ser implementados por una clase, sin tener que definir cómo estos métodos son manipulados.

Las interfaces se definen de la misma manera que una clase, aunque reemplazando la palabra reservada class por la palabra reservada interface y sin que ninguno de sus métodos tenga su contenido definido.

Todos los métodos declarados en una interfaz deben ser públicos, ya que ésta es la naturaleza de una interfaz.

<?php
interface Volador {
    public function volar();
    public function aterrizar();
}
?>

Vamos a crear una última clase llamada Perro:

<?php
class Perro extends Animal {
    public function __construct($nombre) {
        parent::__construct($nombre);
    }

    public function sonido() {
        return "Guau";
    }
}

Veamos la implementación de estas clases:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Animales en PHP</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <h1>Información de Animales</h1>
    
    <?php
    require_once('Animal.php');
    require_once('Volador.php');
    require_once('Gato.php');
    require_once('Perro.php');
    require_once('Pajaro.php');
    
    $miGato = new Gato("Gatito");
    $miPerro = new Perro("Perrito");
    $miPajaro = new Pajaro("Canario");
    ?>
    
    <div class="animal-info">
        <div class="animal">Gato:</div> <?php echo $miGato->getNombre() ?> hace <?php echo $miGato->sonido() ?>
    </div>
    
    <div class="animal-info">
        <div class="animal">Perro:</div> <?php echo $miPerro->getNombre() ?> hace <?php echo $miPerro->sonido() ?>
    </div>
    
    <div class="animal-info">
        <div class="animal">Pájaro:</div> <?php echo $miPajaro->getNombre() ?> hace <?php echo $miPajaro->sonido() ?>, <?php echo $miPajaro->volar() ?> y <?php echo $miPajaro->aterrizar() ?>
    </div>
</body>
</html>

Gracias por leer.

Deja un comentario

I’m Luis E. Fagúndez

Bienvenidos a mi página web personal. Mi nombre es Luis, me gusta enseñar, programar y tomar litros y litros de café.

En esta web vas a encontrar materiales sobre educación, programación, Gnu/Linux, software libre y mucho más.

Esta web busca brindar información sobre las asignaturas que imparto en DGETP-UTU, así como proyectos personales y otras cosas.

Gracias por ser parte de esta hermosa comunidad.

Formas de contacto