Le interfacce (Java) possono essere chiamate API? [duplicare]

1

Sto cercando di capire cos'è esattamente un'API.

Dalla mia attuale comprensione, un'API (Application Programming Interface) è un contratto fornito da un'istanza software, che garantisce un insieme definito di comportamenti, che sono innescati da un insieme definito di azioni.

Un'API è una sorta di costrutto "pubblico", in quanto definisce le regole di comunicazione con il mondo esterno.

Allo stesso modo, un'interfaccia Java in poche parole, è anche un costrutto, che una determinata classe Java (che implementa quell'interfaccia) deve fornire, ad es. fornire la funzionalità definita in tale interfaccia (scrivendo le implementazioni della funzione).

Entrambi sembrano fare praticamente la stessa cosa, definendo un insieme di comportamenti che verranno attivati se viene intrapresa l'azione giusta (ad es., chiamata o formato della chiamata).

Quindi è corretto fare riferimento alle interfacce fornite da Java (ad es. raccolte) o anche a quelle scritte da me, come API?

    
posta gEdringer 24.10.2018 - 13:32
fonte

1 risposta

4

"API" è un termine molto elastico e può descrivere qualsiasi cosa, da un insieme di URL a una firma del metodo.

  • Sì, le interfacce Java descrivono un'API o almeno parte di un'API.
  • Ma non tutte le API hanno un'interfaccia Java.

Quando si usano le interfacce Java per descrivere un'API, si noti cosa contiene l'interfaccia: solo un paio di firme dei metodi, e possibilmente qualche JavaDoc. La firma descrive l'API per il controllo del tipo, ma non può descrivere cose come le precondizioni di questo metodo. Questi requisiti aggiuntivi potrebbero essere espressi nella documentazione per quell'interfaccia, ma non fa realmente parte dell'interfaccia stessa. Per esempio. ci sono alcune interfacce marcatore come Serializable che sono vuote e non dichiarano alcun metodo, ma hanno un significato che non può essere espresso direttamente all'interno del sistema di tipi di Java.

Non dovresti avvicinarti alle interfacce con un processo di pensiero come "questa è una API → usiamo le interfacce". Invece, le interfacce descrivono quale tipo di metodi un oggetto offre al consumatore di quell'oggetto. Un percorso verso buone interfacce spesso conduce attraverso un breve processo di refactoring:

  • Questa funzione utilizza un altro oggetto. Vorrei poter usare diversi tipi di oggetti ...
  • Descrivi come utilizziamo quell'oggetto, usando un'interfaccia. Quindi qui abbiamo bisogno di getBar() e laggiù il nostro oggetto ha bisogno di frobnicate(Something) .
  • Implementa l'interfaccia in tutte le classi pertinenti. Se non hai alcun controllo sulla classe, usa il Pattern adattatore per renderlo conforme alla nuova interfaccia.

Si noti che l'estensione di una classe base eredita sia un'interfaccia / API sia l'implementazione per tale API. Si scopre che questo non è l'ideale e che di solito è meglio usare le interfacce Java per l'ereditarietà delle interfacce e la composizione per il riutilizzo dell'implementazione.

    
risposta data 24.10.2018 - 14:00
fonte

Leggi altre domande sui tag