Lenguajes de Programación

Qué son las interfaces en C++

Aprende de forma rápida y con un caso práctico qué son las clases abstractas o interfaces en C++.

Publicado el 31 de Octubre de 2018
Compartir

Qué es una clase abstracta en C++

Una clase abstracta en C++ es aquella que tiene alguno de sus métodos virtuales puro.

Un método virtual puro es un método que se define en la clase padre, y además obliga a las clases hijas a que se definan o lo declaren como virtual puro, para que sus clases hijas a su vez lo definan.

¿Para qué sirve una clase abstracta?

Una interfaz sirve para desacoplar y crear un entorno conjunto, con el que podamos comunicarnos y sepamos que no cambia, y que además, la implementación de abajo pueda tener sus clases derivadas, o sus objetos, pero nosotros, como cliente de esa intefaz, no controlamos.

Por ejemplo, si tenemos un motor gráfico que utiliza DirectX en Windows y utiliza OpenGL en Linux, o Vulkan, que es el nuevo estándar. Como cliente no nos tiene que importar si hay que llamar a uno u otro, sino que tenemos que tener nuestra interfaz, llamarla e indicarle, por ejemplo, que queremos pintar un círculo, sin importarnos que lo pinte en DirectX o en OpenGL.

Tipos de clases abstractas

Hay dos formas de clases abstractas:

  • Puras: Son aquellas en las que todos sus métodos son virtuales puros y que no tienen ninguna variable definida que no sea constante.
  • Mixtas: Son que aquellas que definen una parte de funcionalidad y pueden tener variables.

Ejemplo práctico

#include <iostream>

class Base
{
    public:
    virtual void foo() = 0;
};

class Hija : public Base
{
};

int main()
{
    Hija h;

    return 0;
}

En este ejemplo vemos que el compilador nos indica un error. Es debido a que una de las peculiaridades de las clases abstractas o clases interfaces es que no se puede crear una instancia de ellas. Por lo tanto, al no estar definido foo, provoca el error.

Para corregirlo, hemos de hacerlo de la siguiente forma:

#include <iostream>

class Base
{
    public:
    virtual void foo() = 0;
};

class Hija : public Base
{
    public:
    void foo() override
    {
        std::cout << “Estoy en la clase hija del canal Openwebinars”;
    }
};

int main()
{
    Hija h;
    h.foo();
    getchar();

    return 0;
}

Si compilamos y ejecutamos lo anterior, nos muestra la clase Hija.

Usos de las clases abstractas

Esto se puede combinar con todo tipo de patrones diseño, con lo que se pueden hacer multitud de interfaces que nos permitan desacoplar nuestra librería o nuestro programa, de otras personas o clientes que lo utilicen, incluso si nosotros somos los mismos clientes.

Cuántas menos dependencias conjuntas haya, siempre habrá más posibilidades de cortar y modificar una parte.

Sigue aprendiendo a diseñar y asimilar patrones e interfaces para tus programas con este curso de patrones de diseño e interfaces en C++ 

curso-cpp-interfaces

Recuerda que puedes comenzar este curso con tu suscripción de OpenWebinars. Si todavía no estás suscrito, aprovecha para hacerlo ahora.


Compartir este post

También te puede interesar...

Tecnología

Diferencias programación orientada a objetos y programación funcional

13 Septiembre 2018 Daniel Sánchez Quirós
Tecnología

Por qué aprender C++

06 Septiembre 2018 Antonio José Checa Bustos
Patrones e interfaces en c++

Curso de Patrones de diseño e interfaces en C++

1 hora y 41 minutos · Curso

Aprende a diseñar y asimilar patrones e interfaces para tus programas en C++ con la librería STL. .

  • Metodologías
Artículos
Ver todos