Penso che per capire questa domanda, devi capire cos'è un'astrazione. (Sono troppo pigro per trovare una definizione formale, quindi sono sicuro che sto per essere oscurato, ma qui va ...) Un'astrazione è quando prendi un soggetto complesso, o un'entità e nascondi la maggior parte dei suoi dettagli mentre espone la funzionalità che definisce ancora l'essenza di quell'oggetto.
Credo che l'esempio che ti ha dato il libro fosse una casa. Se dai un'occhiata molto dettagliata alla casa, vedrai che è fatta di assi, chiodi, finestre, porte ... Ma un disegno di cartone animato di una casa accanto a una fotografia è ancora una casa, anche se manca molti di quei dettagli.
Stessa cosa con il software. Ogni volta che programmi, proprio come suggerisce il libro, devi pensare al tuo software come livelli. Un determinato programma può avere facilmente oltre cento livelli. In fondo, potresti avere istruzioni di assemblaggio che girano su una CPU, a un livello superiore queste istruzioni potrebbero essere combinate per formare routine di I / O su disco, a un livello ancora più alto, non è necessario lavorare con Disk I / O direttamente perché puoi usare le funzioni di Windows semplicemente per aprire / leggere / scrivere / cercare / chiudere un file. Queste sono tutte astrazioni anche prima di arrivare al tuo codice dell'applicazione.
All'interno del codice, i livelli di astrazione continuano. Potresti avere routine di manipolazione di stringhe / reti / dati di livello inferiore. A un livello superiore è possibile combinare tali routine in sottosistemi che definiscono la gestione degli utenti, il livello dell'interfaccia utente e l'accesso al database. Ancora un altro livello di questi sottosistemi potrebbe essere combinato in componenti server che si uniscono per diventare parte di un sistema aziendale più grande.
La chiave di ciascuno di questi livelli di astrazione è che ognuno nasconde i dettagli esposti dai livelli precedenti e presenta un'interfaccia molto pulita da consumare dal livello successivo. Per aprire un file, non dovresti sapere come scrivere singoli settori o quali interruzioni hardware elaborare. Ma se inizi a viaggiare lungo la catena del livello di astrazione, sarai sicuramente in grado di tracciare dalla chiamata della funzione Write (), fino alle esatte istruzioni che vengono inviate al controller del disco rigido.
Ciò che l'autore ti dice di fare è quando definisci una classe o una funzione, pensa a quale livello sei. Se si dispone di una classe che gestisce sottosistemi e oggetti utente, la stessa classe non dovrebbe eseguire la manipolazione di stringhe di basso livello o contenere un intero gruppo di variabili solo per effettuare chiamate socket. Sarebbe la violazione dell'incrocio dei livelli di astrazione e anche del fatto che una sola classe / funzione faccia solo una cosa (SRP - Single Responsibility Principle).