Una classe può ottenere un'astrazione senza implementare un'interfaccia o estendere una classe astratta?

3

Ho letto molte definizioni di astrazione e come è stato realizzato in linguaggi di programmazione come Java e C ++ usando interfacce (solo Java) e classi astratte.

Comprendo che sono necessarie classi e interfacce astratte per consentire a più classi di fornire le proprie implementazioni dei metodi astratti e quindi raggiungere l'astrazione.

Possiamo anche considerare una classe che nasconde tutti i dettagli dell'implementazione in metodi privati e fornisce un insieme di metodi pubblici (dai quali chiama internamente i metodi privati) come se avesse ottenuto l'astrazione come per la progettazione orientata agli oggetti?

Questa domanda è specificamente correlata ai meccanismi disponibili nei linguaggi di programmazione per raggiungere l'astrazione - Vedo le interfacce e le classi astratte menzionate comunemente ma non i metodi pubblici.

    
posta programmerravi 12.10.2017 - 17:11
fonte

1 risposta

5

L'astrazione, o "un'astrazione" può variare da una costante semplice a un insieme di interfacce, ad es. un'intera API.

Questo intervallo include anche una singola funzione e anche un gruppo di metodi (cioè una classe o un'interfaccia).

La qualità di un'astrazione va alla sua usabilità e completezza: un'astrazione incompleta spesso richiede ai clienti di sapere più di quanto dovrebbero sui dettagli di implementazione per compensare la caduta corta, che crea un codice accoppiato più stretto di quello che vorremmo vedere .

Quindi, per esempio, una singola costante, mentre una forma di astrazione, probabilmente non è molto completa da sola senza altre costanti e metodi.

La stratificazione è l'alternanza di fornire un'astrazione, la cui implementazione è in termini di altre astrazioni. Idealmente, il consumatore di un dato livello (ad esempio il livello sopra) interagisce solo con quel livello e non ha bisogno di andare a un livello inferiore.

Le astrazioni possono essere impacchettate in vari modi: informalmente attraverso la documentazione (ad esempio la documentazione che alcuni di questi metodi funzionano insieme) o più formalmente usando costrutti di linguaggio, a seconda del linguaggio di programmazione, naturalmente.

Classi e interfacce sono un meccanismo formale che raggruppa i metodi in un'astrazione.

I namespace sono un meccanismo formale che raggruppa classi e interfacce (e altri spazi dei nomi) in un'astrazione di un'API più grande.

    
risposta data 12.10.2017 - 18:36
fonte

Leggi altre domande sui tag