Condividi tramite


Interfacce e implementazioni dell'interfaccia

COM fa una distinzione fondamentale tra le definizioni di interfaccia e le relative implementazioni.

Un'interfaccia è in realtà un contratto costituito da un gruppo di prototipi di funzione correlati il cui utilizzo è definito, ma la cui implementazione non è. Questi prototipi di funzione sono equivalenti alle classi base virtuali pure nella programmazione C++. Una definizione di interfaccia specifica le funzioni membro dell'interfaccia, denominate metodi, i relativi tipi restituiti, il numero e i tipi dei relativi parametri e le operazioni da eseguire. Nessuna implementazione associata a un'interfaccia.

Un'implementazione dell'interfaccia è il codice fornito da un programmatore per eseguire le azioni specificate in una definizione di interfaccia. Le implementazioni di molte delle interfacce che un programmatore può usare in un'applicazione basata su oggetti sono incluse nelle librerie COM. Tuttavia, i programmatori sono liberi di ignorare queste implementazioni e scrivere le proprie. Un'implementazione dell'interfaccia deve essere associata a un oggetto quando viene creata un'istanza di tale oggetto e l'implementazione fornisce i servizi offerti dall'oggetto.

Ad esempio, un'interfaccia ipotetica denominata IStack potrebbe definire due metodi, denominati Push e Pop, specificando che le chiamate successive al metodo Pop restituiscono, in ordine inverso, i valori passati in precedenza al metodo Push. Questa definizione di interfaccia non specifica il modo in cui le funzioni devono essere implementate nel codice. Nell'implementazione dell'interfaccia, un programmatore potrebbe implementare lo stack come matrice e implementare i metodi Push e Pop in modo da accedere a tale matrice, mentre un altro programmatore potrebbe usare un elenco collegato e implementare i metodi di conseguenza. Indipendentemente da una particolare implementazione dei metodi Push e Pop, la rappresentazione in memoria di un puntatore a un'interfaccia IStack, e pertanto il relativo uso da parte di un client, è completamente determinato dalla definizione dell'interfaccia.

Gli oggetti semplici supportano solo una singola interfaccia. Oggetti più complessi, ad esempio oggetti incorporabili, in genere supportano diverse interfacce. I client hanno accesso a un oggetto COM solo tramite un puntatore a una delle relative interfacce, che, a sua volta, consentono al client di chiamare uno dei metodi che costituiscono tale interfaccia. Questi metodi determinano come un client può usare i dati dell'oggetto.

Le interfacce definiscono un contratto tra un oggetto e i relativi client. Il contratto specifica i metodi che devono essere associati a ogni interfaccia e il comportamento di ognuno dei metodi deve essere in termini di input e output. Il contratto in genere non definisce come implementare i metodi in un'interfaccia. Un altro aspetto importante del contratto è che, se un oggetto supporta un'interfaccia, deve supportare in qualche modo tutti i metodi di tale interfaccia. Non tutti i metodi in un'implementazione devono eseguire operazioni. Se un oggetto non supporta la funzione implicita da un metodo, l'implementazione può essere una semplice restituzione o forse la restituzione di un messaggio di errore significativo, ma i metodi devono esistere.

Oggetti e interfacce COM