L'interfaccia non può essere astratta?

2

Un mio amico ha detto che non tutte le interfacce sono astratte. Non ho la possibilità di discuterne con lui, ma mi fa pensare a un'interfaccia non astratta in nessun tipo di linguaggio.

Esiste un'interfaccia non astratta?

    
posta JustMe 01.11.2012 - 16:53
fonte

6 risposte

7

Risposta semplice alla tua domanda: No, il tuo amico ha torto.

Un'interfaccia non fornisce l'implementazione dei metodi che definisce. Avrebbe senso se potessimo istanziare uno di quelli? Ovviamente no. Le interfacce sono solo questo, un'astrazione.

Ovviamente questo presuppone che quando si dice interface , si pensi alla caratteristica della lingua dell'interfaccia come definita da C #, Java, C ++, ecc. con la parola chiave interface . Nel caso in cui il tuo amico indichi un'interfaccia API, la domanda non ha proprio senso per me. Le API possono consentire di estendere le funzionalità attraverso la sottoclasse o aderendo a un particolare contratto come definito da un'interfaccia o una classe esistente del sistema.

    
risposta data 01.11.2012 - 16:56
fonte
5

Sì.

L'idea di un'interfaccia (cioè una descrizione delle strutture fornite e della loro semantica) è intrinsecamente astratta.

Tuttavia, la domanda sembra confondere questo con il meccanismo con cui un'interfaccia di questo tipo (piccolo i ) può essere reificata in alcune lingue che forniscono un Interface (grande i ) per questo scopo.

Inoltre, c'è comunque più di una cosa che potresti desiderare di astrarre:

  • polimorfismo: desideri nascondere più tipi o comportamenti diversi dietro una descrizione delle cose che hanno in comune. In questo caso, l'interfaccia dovrebbe essere probabilmente astratta
  • implementazione: desideri nascondere i dettagli di un sistema complesso dietro un'astrazione unificante. In questo caso non ci può essere più di un'implementazione, quindi l'interfaccia può essere concreta
risposta data 01.11.2012 - 17:01
fonte
2

Dipende molto dal significato che il tuo amico ha dato alla parola interfaccia .

Interfaccia come concetto di un contratto astratto su metodi / proprietà

Quindi questo significa che i tipi di interfaccia forniti da diversi linguaggi (come il citato sopra: C #, Object Pascal (Delphi o FPC), Java, ecc.) quindi la risposta è no

In questo caso, l'interfaccia è un contratto sui metodi, senza alcuna forma di implementazione.

Interfaccia come contratto sulla descrizione delle strutture fornite e la loro semantica

In questo caso, anche una classe astratta non pura può essere considerata un'interfaccia. In questo caso, il progettista ha anche come implementare il comportamento di base predefinito (come lanciare eccezioni su metodi virtuali non implementati che non sono astratti) su quella classe base.

Quindi, se è il caso, quindi sì quelle "interfacce" non possono essere astratte.

    
risposta data 01.11.2012 - 18:08
fonte
1

No.

L'interfaccia dalla semplice definizione è l'astrazione dell'API che la classe può implementare. Se non è astratto, non è un'interfaccia.

    
risposta data 01.11.2012 - 16:56
fonte
1

Le interfacce non devono essere astratte. Esempio:

class Foo {
public:
    void printHello () {
         printf("Hello");
    }
};

Qui Foo è una classe concreta con un'interfaccia printHello() . Foo non è astratto.

    
risposta data 01.11.2012 - 18:02
fonte
1

Tutte le risposte precedenti sono corrette. Ma questo è il modo in cui lo capisco.

Interface sono solo definizioni di servizio. Per esempio. È necessario prenotare un biglietto per un viaggio aereo. È un'idea / concetto che tu "prenoti un biglietto". E non preoccuparti di come è fatto fisicamente.

Un Class che lo implementa definirà come è fatto e quale forma fisica prende.

es. Un'interfaccia potrebbe essere quella di prenotare un biglietto. Potresti quindi avere varie entità che ti forniscono questo servizio. Un agente di viaggio, prenotazione online o ufficio della compagnia aerea reale.  Forniscono tutti il servizio ( Interface ) per prenotare un biglietto.

    
risposta data 01.11.2012 - 19:31
fonte

Leggi altre domande sui tag