Interfaces en la programación de Delphi 101

En Delphi, "interfaz" tiene dos significados distintos. En la jerga de OOP, puede pensar en una interfaz como una clase sin implementación. En la sección de interfaz de definición de unidad de Delphi se utiliza para declarar cualquier sección pública de código que aparezca en una unidad. Este artículo explicará las interfaces desde una perspectiva OOP.

Si está dispuesto a crear una aplicación sólida como una roca de manera que su código sea mantenible, reutilizable y flexible, la naturaleza OOP de Delphi lo ayudará a conducir el primer 70% de su ruta. Definir interfaces e implementarlas ayudará con el 30% restante.

Clases abstractas

Puede pensar en una interfaz como una clase abstracta con toda la implementación eliminada y todo lo que no sea público eliminado. Una clase abstracta en Delphi es una clase que no se puede instanciar: no se puede crear un objeto a partir de una clase marcada como abstracta.

Echemos un vistazo a un ejemplo de declaración de interfaz:

tipo
IConfigChanged = interfaz['0D57624C-CDDE-458B-A36C-436AE465B477']
procedimiento ApplyConfigChange;
final;

los IConfigChanged es una interfaz Una interfaz se define como una clase, la palabra clave "interfaz" se usa en lugar de "clase". El compilador utiliza el valor Guid que sigue a la palabra clave de interfaz para identificar de forma exclusiva la interfaz. Para generar un nuevo valor GUID, simplemente presione Ctrl + Shift + G en el IDE de Delphi. Cada interfaz que defina necesita un valor Guid único.

Una interfaz en OOP define una abstracción, una plantilla para una clase real que implementará la interfaz, que implementará los métodos definidos por la interfaz. Una interfaz en realidad no hace nada, solo tiene una firma para la interacción con otras clases o interfaces (implementadoras).

La implementación de los métodos (funciones, procedimientos y métodos Get / Set de propiedad) se realiza en la clase que implementa la interfaz. En la definición de interfaz, no hay secciones de ámbito (privado, público, publicado, etc.) todo es público. Un tipo de interfaz puede definir funciones, procedimientos (que eventualmente se convertirán en métodos de la clase que implementa la interfaz) y propiedades. Cuando una interfaz define una propiedad, debe definir los métodos get / set: las interfaces no pueden definir variables.

Al igual que con las clases, una interfaz puede heredar de otras interfaces.

tipo
IConfigChangedMore = interfaz(IConfigChanged)
procedimiento ApplyMoreChanges;
final;

Programación

La mayoría de los desarrolladores de Delphi cuando piensan en interfaces piensan en programación COM. Sin embargo, las interfaces son solo una característica OOP del lenguaje: no están vinculadas a COM específicamente. Las interfaces se pueden definir e implementar en una aplicación Delphi sin tocar COM en absoluto.

Implementación

Para implementar una interfaz, debe agregar el nombre de la interfaz a la instrucción de clase, como en:

tipo
TMainForm = clase(TForm, IConfigChanged)
público
procedimiento ApplyConfigChange;
final;

En el código anterior, un formulario de Delphi llamado "MainForm" implementa la interfaz IConfigChanged.

Advertencia: cuando una clase implementa una interfaz, debe implementar todos sus métodos y propiedades. Si falla / olvida implementar un método (por ejemplo: ApplyConfigChange), un error de tiempo de compilación "E2003 Identificador no declarado: 'ApplyConfigChange'" ocurrira.
Advertencia: si intenta especificar la interfaz sin el valor GUID que recibirá: "El tipo E2086 'IConfigChanged' aún no está completamente definido".