Interfaces e implementaciones de interfaz

COM hace una distinción fundamental entre las definiciones de interfaz y sus implementaciones.

Una interfaz es realmente un contrato que consta de un grupo de prototipos de función relacionados cuyo uso se define, pero cuya implementación no es. Estos prototipos de función son equivalentes a las clases base virtuales puras en la programación de C++. Una definición de interfaz especifica las funciones miembro de la interfaz, denominadas métodos, sus tipos devueltos, el número y los tipos de sus parámetros, y lo que deben hacer. No hay ninguna implementación asociada a una interfaz.

Una implementación de interfaz es el código que proporciona un programador para llevar a cabo las acciones especificadas en una definición de interfaz. Las implementaciones de muchas de las interfaces que un programador puede usar en una aplicación basada en objetos se incluyen en las bibliotecas COM. Sin embargo, los programadores pueden ignorar estas implementaciones y escribir sus propias. Una implementación de interfaz se va a asociar a un objeto cuando se crea una instancia de ese objeto y la implementación proporciona los servicios que ofrece el objeto.

Por ejemplo, una interfaz hipotética denominada IStack podría definir dos métodos, denominados Push y Pop, especificando que las llamadas sucesivas al método Pop devuelven, en orden inverso, los valores pasados anteriormente al método Push. Esta definición de interfaz no especificaría cómo se implementarán las funciones en el código. En la implementación de la interfaz, un programador podría implementar la pila como una matriz e implementar los métodos Push y Pop de forma que pueda acceder a esa matriz, mientras que otro programador podría usar una lista vinculada e implementaría los métodos en consecuencia. Independientemente de una implementación determinada de los métodos Push y Pop, la representación en memoria de un puntero a una interfaz IStack y, por lo tanto, su uso por parte de un cliente, está completamente determinado por la definición de interfaz.

Los objetos simples solo admiten una única interfaz. Objetos más complicados, como objetos incrustables, normalmente admiten varias interfaces. Los clientes solo tienen acceso a un objeto COM a través de un puntero a una de sus interfaces, que, a su vez, permite al cliente llamar a cualquiera de los métodos que componen esa interfaz. Estos métodos determinan cómo un cliente puede usar los datos del objeto.

Las interfaces definen un contrato entre un objeto y sus clientes. El contrato especifica los métodos que se deben asociar a cada interfaz y cuál debe ser el comportamiento de cada uno de los métodos en términos de entrada y salida. Por lo general, el contrato no define cómo implementar los métodos en una interfaz. Otro aspecto importante del contrato es que si un objeto admite una interfaz, debe admitir todos los métodos de esa interfaz de alguna manera. No todos los métodos de una implementación deben hacer algo. Si un objeto no admite la función implícita por un método, su implementación puede ser una devolución simple o quizás la devolución de un mensaje de error significativo, pero los métodos deben existir.

Objetos e interfaces COM