Classe C ++ con solo funzioni virtuali pure: come si chiama?

4

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?

    
posta JBRWilkinson 31.07.2013 - 15:59
fonte

2 risposte

14

Il termine tecnico per una classe con una funzione virtuale pura è classe astratta , ma i termini si applicano anche se la classe ha funzioni virtuali non pure aggiuntive.

Spesso il termine Interface è usato in C ++ per descrivere una classe astratta come Printable , che descrive un servizio che può essere fornito da una gamma di classi diverse, altrimenti non correlate. Ciò corrisponde all'uso della parola chiave interface in C # / Java.

Non ho mai incontrato il termine 'protocollo' in relazione a una classe C ++

    
risposta data 31.07.2013 - 16:20
fonte
3
  • Puoi chiamare la classe C ++ con solo funzioni virtuali pure come interfaccia o protocollo.

  • L'interfaccia e il protocollo sono entrambi lo stesso concetto.

  • Se fossi un programmatore java / C #, chiami la classe con solo funzioni virtuali puramente come interfaccia. Se tu fossi un programmatore Objective-C, chiami la classe con solo le funzioni virtuali puramente come protocollo!

risposta data 22.08.2013 - 09:56
fonte

Leggi altre domande sui tag