Perché le API in genere sono costituite da interfacce? [duplicare]

0

Sto iniziando con la progettazione dell'API Java e leggendo basi di codice esistenti, ho scoperto che la maggior parte delle API consiste di interfacce solo con le loro implementazioni raggruppate in un pacchetto diverso.

Dopo aver letto che le interfacce sono generalmente più problematiche da usare / gestire rispetto alle classi astratte, perché non vengono usate classi astratte invece di interfacce?

    
posta Pawan 24.06.2014 - 14:14
fonte

3 risposte

3

Che cos'è un'API? è un'interfaccia definizione .

Considera il software che stai utilizzando come una blackbox. Non dovresti sapere come sono fatte le cose internamente, né dovresti vuoi , o semplicemente costruiresti le cose da solo. Inoltre, provare ad estendere una classe API da solo potrebbe compromettere il comportamento dello strumento (che, ancora una volta, non lo sai davvero).

Il software che stai usando ei tuoi software sono due software diversi, quindi l'unica cosa di cui avresti bisogno è il collegamento tra loro, cioè l'interfaccia. Guarda cosa significa un'interfaccia interfaccia in informatica e dovresti capire perché si applica al significato OOP della parola.

Ora come per il tuo argomento di classe astratto, sembra completamente soggettivo. Per quanto mi riguarda, una classe in Java può implementare diverse interfacce ma estendere solo una classe base.

    
risposta data 24.06.2014 - 16:07
fonte
1

Non sei sicuro di dove leggi che le interfacce sono più problematiche da usare o da mantenere. Puoi ereditare solo da una classe base, ma puoi implementare tutte le interfacce che vuoi, quindi le interfacce sono intrinsecamente più flessibili. Per esempio. Considera cosa succederebbe se Closeable e Readable fossero classi astratte; non avresti modo di fare, ad esempio, un FileReader che sottoclassi entrambi.

    
risposta data 24.06.2014 - 14:22
fonte
0

Il motivo principale è che le interfacce ti consentono di fornire un terreno comune tra l'implementazione e chi utilizza il tuo codice. Ci sono scenari in cui non vuoi che il chiamante sappia come stai eseguendo determinate parti della logica. Le ragioni di ciò possono essere algoritmi di sicurezza o proprietari, per citarne alcuni.

Quando definisci un'interfaccia, definisci quali funzioni offri. Nella maggior parte dei casi, al chiamante non interessa come hai implementato, diciamo, un meccanismo di ordinamento. Il chiamante si preoccupa semplicemente che funzioni.

La codifica su un'interfaccia ti dà anche un grado relativamente grande di libertà dal momento che non sei in nessun punto costringendoti alla logica implementata. Pertanto, se il tuo metodo restituisce un List anziché un ArrayList , stai dando la libertà al chiamante di risolverlo in qualsiasi classe che implementi l'elenco.

Come ha detto @Benjamin Rogge, mi piacerebbe anche vedere dove leggi che le classi astratte sono più difficili da mantenere.

    
risposta data 24.06.2014 - 14:33
fonte

Leggi altre domande sui tag