C++ Interfaces (clases abstractas)
Una interfaz describe el comportamiento y la funcionalidad de una clase sin necesidad de completar su implementación específica.
Las interfaces de C++ se implementan usandoclases abstractaspara implementarlas. Las clases abstractas no deben confundirse con la abstracción de datos; la abstracción de datos es un concepto que separa los detalles de implementación de los datos relacionados.
Si una clase tiene al menos una función declarada como función virtual pura, entonces esa clase es abstracta. Una función virtual pura se especifica usando "= 0" en su declaración, como se muestra a continuación:
Diseñoclase abstractaEl propósito de (comúnmente llamada ABC) es proporcionar a otras clases una clase base adecuada que puedan heredar. Una clase abstracta no puede utilizarse para instanciar objetos; solo puede usarse comointerfazde uso. Si se intenta instanciar un objeto de una clase abstracta, se producirá un error de compilación.
Por lo tanto, si una subclase de una ABC necesita ser instanciada, debe implementar cada función virtual pura, lo que también significa que C++ admite el uso de ABC para declarar interfaces. Si no se sobrescribe la función virtual pura en la clase derivada y se intenta instanciar un objeto de esa clase, se producirá un error de compilación.
Las clases que se pueden usar para instanciar objetos se denominanclases concretas。
Ejemplo de clase abstracta
Vea el siguiente ejemplo: la clase base Shape proporciona una interfazgetArea(), implementada en las dos clases derivadas Rectangle y Triangle respectivamentegetArea():
Ejemplo
Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:
Total Rectangle area: 35 Total Triangle area: 17
En el ejemplo anterior, podemos ver cómo una clase abstracta define una interfaz getArea(), y cómo las dos clases derivadas implementan esta misma función mediante diferentes algoritmos de cálculo de área.
Estrategia de diseño
Un sistema orientado a objetos puede usar una clase base abstracta para proporcionar una interfaz apropiada, general y estandarizada para todas las aplicaciones externas. Luego, las clases derivadas, al heredar la clase base abstracta, heredan todas las operaciones similares.
Las funciones proporcionadas a las aplicaciones externas (es decir, las funciones públicas) existen en la clase base abstracta como funciones virtuales puras. Estas funciones virtuales puras se implementan en las clases derivadas correspondientes.
Esta arquitectura también permite que nuevas aplicaciones se agreguen fácilmente al sistema, incluso después de que el sistema ya haya sido definido.
Otras extensiones