Interfaces e Implementações de Interface

A COM faz uma distinção fundamental entre definições de interface e suas implementações.

Uma interface é, na verdade, um contrato que consiste em um grupo de protótipos de funções relacionadas cujo uso é definido, mas cuja implementação não é. Esses protótipos de função são equivalentes a classes base virtuais puras em programação C++. Uma definição de interface especifica as funções de membro da interface, chamadas métodos, seus tipos de retorno, o número e os tipos de seus parâmetros e o que eles devem fazer. Não há implementação associada a uma interface.

Uma implementação de interface é o código que um programador fornece para executar as ações especificadas em uma definição de interface. As implementações de muitas das interfaces que um programador pode usar em um aplicativo baseado em objeto estão incluídas nas bibliotecas COM. No entanto, os programadores são livres para ignorar essas implementações e escrever suas próprias. Uma implementação de interface deve ser associada a um objeto quando uma instância desse objeto é criada e a implementação fornece os serviços que o objeto oferece.

Por exemplo, uma interface hipotética chamada IStack pode definir dois métodos, chamados Push e Pop, especificando que chamadas sucessivas para o método Pop retornam, em ordem inversa, valores passados anteriormente para o método Push. Essa definição de interface não especificaria como as funções devem ser implementadas no código. Ao implementar a interface, um programador pode implementar a pilha como uma matriz e implementar os métodos Push e Pop de forma a acessar essa matriz, enquanto outro programador pode usar uma lista vinculada e implementaria os métodos de acordo. Independentemente de uma implementação específica dos métodos Push e Pop, a representação na memória de um ponteiro para uma interface IStack e, portanto, seu uso por um cliente, é completamente determinada pela definição da interface.

Objetos simples suportam apenas uma única interface. Objetos mais complicados, como objetos incorporáveis, normalmente oferecem suporte a várias interfaces. Os clientes têm acesso a um objeto COM somente por meio de um ponteiro para uma de suas interfaces, o que, por sua vez, permite que o cliente chame qualquer um dos métodos que compõem essa interface. Esses métodos determinam como um cliente pode usar os dados do objeto.

As interfaces definem um contrato entre um objeto e seus clientes. O contrato especifica os métodos que devem ser associados a cada interface e qual deve ser o comportamento de cada um dos métodos em termos de entrada e saída. O contrato geralmente não define como implementar os métodos em uma interface. Outro aspecto importante do contrato é que, se um objeto suporta uma interface, ele deve suportar todos os métodos dessa interface de alguma forma. Nem todos os métodos em uma implementação precisam fazer algo. Se um objeto não oferecer suporte à função implícita por um método, sua implementação pode ser um retorno simples ou talvez o retorno de uma mensagem de erro significativa — mas os métodos devem existir.

Objetos e interfaces COM