Je pense que pour comprendre cette question, il faut comprendre ce qu'est une abstraction. (Je suis trop paresseux pour trouver une définition formelle, donc je suis sur le point de m'énerver, mais voilà ...) Une abstraction est quand vous prenez un sujet complexe ou une entité et cachez la plupart de ses détails tout en exposant la fonctionnalité qui définit toujours l'essence de cet objet.
Je crois que l'exemple que le livre vous a donné était une maison. Si vous jetez un coup d'oeil très détaillé à la maison, vous verrez qu'elle est faite de planches, de clous, de fenêtres, de portes ... Mais le dessin humoristique d'une maison à côté d'une photo est toujours une maison, même s'il en manque beaucoup de ces détails.
Même chose avec un logiciel. Comme vous le recommandez, chaque fois que vous programmez, vous devez considérer votre logiciel sous forme de couches. Un programme donné peut facilement comporter plus d'une centaine de couches. En bas, vous pouvez avoir des instructions d'assemblage qui s'exécutent sur un processeur. À un niveau supérieur, ces instructions peuvent être combinées pour former des routines d'E / S de disque. À un niveau encore supérieur, vous n'avez pas besoin de travailler avec Disk I / O directement parce que vous pouvez utiliser les fonctions Windows pour simplement ouvrir / lire / écrire / chercher / fermer un fichier. Ce sont toutes des abstractions avant même que vous obteniez votre propre code d'application.
Dans votre code, les couches d'abstraction continuent. Vous pourriez avoir des routines de niveau inférieur / réseau / manipulations de données. À un niveau supérieur, vous pouvez combiner ces routines en sous-systèmes définissant la gestion des utilisateurs, la couche d'interface utilisateur et l'accès à la base de données. Encore une autre couche, ces sous-systèmes peuvent être combinés dans des composants de serveur qui s’unissent pour faire partie d’un système plus vaste.
La clé de chacune de ces couches d'abstraction est que chacune d'elles cache les détails exposés par la ou les couches précédentes et présente une interface très propre à utiliser par la couche suivante. Pour ouvrir un fichier, vous ne devriez pas avoir besoin de savoir comment écrire des secteurs individuels ni quelles interruptions matérielles traiter. Mais si vous commencez à voyager le long de la chaîne de la couche d'abstraction, vous serez certainement en mesure de tracer depuis l'appel de la fonction Write () jusqu'à l'instruction exacte envoyée au contrôleur de disque dur.
Ce que l’auteur vous dit de faire, c’est que lorsque vous définissez une classe ou une fonction, réfléchissez à la couche que vous êtes. Si vous avez une classe qui gère des sous-systèmes et des objets utilisateur, la même classe ne doit pas effectuer de manipulation de chaîne de bas niveau ni contenir un grand nombre de variables uniquement pour effectuer des appels de socket. Cela constituerait une violation des couches d'abstraction croisées et le fait d'avoir une classe / fonction ne ferait qu'une chose (PRS - Principe de responsabilité unique).