php-poo-abstraccion

La Programación Orientada a Objetos (Object Oriented Programming) no es un lenguaje más, sino una forma o enfoque diferente de programación; nuestros programas ya no están conformados por un conjunto de funciones, como se hizo por un largo tiempo, sino por objetos que colaboran entre sí para realizar tareas distintas.

Estos objetos se crean a partir de moldes denominados clases, por ejemplo la clase Estudiante, Producto, Usuario, y muchas veces lo nombres son deducidos de nuestras tablas de la base de datos.

La programación orientada a objetos o POO es la tendencia actual de todos los lenguajes de alto nivel, dadas las posibilidades que ofrece. Básicamente se trata de considerar analogías entre las situaciones que tenemos que resolver mediante la programación y los objetos del mundo real a los que estamos acostumbrados, nada raro. Pero, ¿Cuáles son las características de la POO? Abstracción, encapsulación, herencia y polimorfismo.

Abstracción
Expresa las características esenciales de un objeto, las cuales distinguen al objeto de los demás, dejando en segundo término los detalles. Para ser más claro, la abstracción es un término propio, cada quien tiene su propio punto de vista sobre algún evento, decimos que la política es esto o aquello, que la silla es muy incómoda para mí pero para mi compañero es bastante confortable, ¿Ven? Cada quien tiene su propia abstracción.

Sin embargo, ¿Cómo aplicamos la abstracción a la POO? ¿Han escuchado el dicho «divide y vencerás»? Bueno, lo que tenemos que hacer es dividir nuestro código en grupos de código más pequeños, que al unirlos, realizarán el trabajo. El cuerpo humano es un buen ejemplo de abstracción, aunque el cuerpo es una unidad, está constituido por un conjunto de sistemas —respiratorio, digestivo, cardiovascular— y éstos a su vez están compuestos por otros más pequeños. Entonces, ¿Qué es la abstracción? Básicamente es la capacidad de separar los elementos —por lo menos mentalmente— para poder analizarlos de forma singular.

Veamos un ejemplo. Vamos a abstraer una deliciosa hamburguesa.

class Burger {}

¿Que necesito para hacer una hamburguesa? Ingredientes. Bien.

class Burger {
    $ingredients;
}

También necesito preparar la hamburguesa y cocinarla, por supuesto servirla. Entonces falta agregar esos métodos. Habrá quienes mencionen: «Oye, también falta comerla». Bueno, eso no lo contemplo en mi abstracción. ¿Ahora se dan cuenta como cada persona tiene una abstracción distinta?

class Burger {
    $ingredients = [];
}

Ahora, ya tengo los ingredientes, necesito hacer la hamburguesa.

class Burger {
    $ingredients = [];

    function make($ingredients)
    {
        $this->giveMeIngredients($ingredients);
        $this->prepare();
        $this->cook();
    }
    function giveMeIngredients($ingredients)
    {
        $this->ingredients = $ingredients;
    }
    function prepare()
    {
        // prepare
    }
    function cook()
    {
        // cook
    }
}

He agregado un método más, el método make que sería el que controla la elaboración de la hamburguesa. Esa sería una abstracción, muy simple pero directa, no necesita nada más.

Ahora, cabe destacar que no solamente existe un solo tipo de hamburguesa. Y los ingredientes dependen del tipo de hamburguesa que necesitemos cocinar, así que eso se los dejo de tarea. ¿Cómo podríamos mejorar esta abstracción?

Algunas lecturas recomendadas

Aprende programación orientada a objectos (POO) con PHP desde cero

Sustituye implementaciones usando Stubs e Interfaces en PHP (POO)

Cómo encadenar métodos con PHP (POO)

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Uso de métodos mágicos en PHP Lección siguiente Encapsulación y programacion orientada a objetos con PHP