Abstracción | OOP

↑ Me gusta (0)

La definición de diccionario: Consideración aislada de las cualidades esenciales de un objeto, o del mismo objeto en su pura esencia o noción: es un ejercicio de abstracción.

Definición de programación: Esta característica es esencial, nos ayuda a expresar claramente que queremos lograr como resultado final. La abstracción es una técnica usada para el análisis y diseño orientado a objetos, mediante ella detallamos el problema que se quiere atacar para resolverlo fácilmente.

Un dato clave seria decir que la interfaz es sinónimo de aislar, separar y sacar, si es así ¿cuando lo hacemos?.

Hablando de inmediato de temas prácticos podemos decir que es describir una clase a través de propiedades y métodos, crear una interfaz, usar una clase abstracta, etc. Todo esto expresa este principio, veamos a continuación ejemplos:

Interfaz

<?php

namespace App\Connection;

interface Store
{
    public function get();

    public function increment($value = 1);

    public function decrement($value = 1);
}

Implementemos esta interfaz en nuestra clase:

<?php

namespace App\Connection;

class Database implements Store
{
    public function get()
    {
        //...    
    }

    public function increment($value = 1)
    {
        //...
    }

    public function decrement($value = 1)
    {
        //...
    }
}

Aquí vemos una clase con tres métodos, toma en cuenta que estos métodos son obligatorios porque la interfaz lo ha definido... Cuando tu implementas una interfaz es porque usarás todos sus métodos.

Crear y usar una interfaz es abstracción.

En términos mas amplios, una interfaz nos permite crear código en los métodos de la clase que la implemente. Nota que todos los métodos escritos en la interfaz son y deben ser públicos, es ésta es la naturaleza de una interfaz. Una interfaz solo se encargará de mostrar el comportamiento específico de la clase que la implemente.

  • El ¿Qué hace? es la interfaz.
  • El ¿Cómo lo hace? corresponde a la clase que es quien desarrolla cada método.

Clase Abstracta

<?php

namespace App;

abstract class Lock
{
    abstract public function acquire();

    public function get()
    {
        //...
    }
}

Veamos cómo extender de una clase abstracta.

<?php

namespace App;

class Cached extends Lock
{
    public function acquire()
    {
        //...
    }
}

Reglas de una clase abstracta:

  1. Las clases abstractas no se pueden instanciar.
  2. Si una clase abstracta contiene un método abstracto, este debe definirse de forma obligatoria en la clase hija.
  3. Los métodos abstractos solo se declaran en la clase abstracta, pero se desarrolla en la clase que lo implemente.

Observa que nuestra clase abstracta Lock declara el método acquire() pero no lo desarrolla.

Observa también que desde la clase Cached extendemos de la clase abstracta Lock, lo que quiere decir es que todos los métodos definidos como abstractos en Lock deben ser desarrollados en Cached. Por otro lado, toma en cuenta que el método get() no es abstracto, por ello no es obligatorio desarrollarlo en la clase Cached.

Sobre clases abstracta e interfaces haremos futuras lecciones, de momento solo vamos a ocuparnos del concepto de abstracción.

Una Clase

<?php

namespace App;

class Auth
{
    protected $email;
    protected $password;
    
    public function login()
    {
        //...
    }

    protected function validate()
    {
        //...
    }

    protected function attempt()
    {
        //...
    }

    protected function failed()
    {
        //...
    }

    protected function response()
    {
        //...
    }
}

Aquí ilustramos un punto de vista válido, la abstracción muestra las características o detalles de un objeto, quiero decir que no nos importan los detalles. Mira que en el ejemplo solo declaré los métodos (eso es abstracción).

... ¿Cuales son las acciones comunes y qué quiero como resultado final?

  1. Abstracción de Persona: Hablar, reír, comer, ir al baño, etc.
  2. Abstracción de Animal: Comer, dormir, caminar, correr, etc.
  3. Abstracción de Usuario: Registrarse, iniciar sesión, actualizar perfil, etc.

Y así, podemos listar todo acerca de cualquier cosa. Al hacerlo debemos incluir las características y comportamientos.

En resumen

La abstracción es un concepto propio de la programación orientada a objetos, esto puede ser aplicado en Java, PHP y muchos otros lenguajes de programación.

En esta lección vimos interfaces, clases abstractas y una clase; tres ejemplos válidos para ver cómo implementar este concepto en PHP. Abstracción es aislar, separar y sacar... Partiendo de ahí nacieron estos ejemplos.

Si llevamos a un papel alguna solicitud de este tipo podríamos pensar en lo común y no en el detalle. Esto ayuda a solucionar los problemas.