Quindi sto cercando qualche input / consenso su quale terminologia dovremmo usare per descrivere qualcosa che assomiglia a questo:
class Printable
{
public:
virtual void printTo(Printer *) = 0;
virtual double getWidthInPoints() = 0;
virtual double getHeightInPoints() = 0;
};
Quindi questa è una classe che ha solo metodi virtuali puri. Qualsiasi classe che eredita deve implementare l'intera cosa, cioè non esiste un'implementazione parziale.
Quindi come si chiama?
Ho visto principalmente due nomi diversi:
1) Interfaccia
Utilizzato in programmazione COM di Windows (forse proviene dall'IDL ) , è una parola chiave in entrambi i C # e Java e anche un direttiva / parola chiave del compilatore in Objective-C (ma non è la stessa cosa). Ho sentito ingegneri usare la frase "interfaccia" sinonimo di "API", ma, almeno in questo scenario, è una cosa singola mentre un'API potrebbe comprendere più di una.
2) Protocollo
Ho visto questo usato in varie librerie open-source come Bloomberg BSL ed è un direttiva / parola chiave del compilatore in Objective-C , ma non deve necessariamente trovarsi nella gerarchia dell'ereditarietà. Nel senso più ampio del termine informatico, il protocollo è una definizione formale di scambio di informazioni tra due parti, come TCP e HTTP, ma questa definizione vale anche per la classe precedente.
C'è una chiara distinzione tra questi in C ++ o sono abbastanza intercambiabili?