Я думаю, щоб зрозуміти це питання, потрібно зрозуміти, що таке абстракція. (Я лінивий, щоб знайти офіційне визначення, тому я впевнений, що я збираюся зануритися, але тут іде ...) Абстракція - це коли ти береш складний предмет або сутність і приховуєш більшість його деталей під час викриття функціоналу, який все ще визначає суть цього об'єкта.
Я вірю, що прикладом, який ви дали книга, був будинок. Якщо ви дуже детально подивитесь на будинок, то побачите, що він зроблений з дощок, цвяхів, вікон, дверей ... Але мультфільмний малюнок будинку поруч із фотографією все-таки є будинком, хоч він і відсутній багато з цих деталей.
Те саме з програмним забезпеченням. Щоразу, коли ви програмуєте, як радить книга, вам потрібно думати про своє програмне забезпечення як про шари. Дана програма може легко мати більше ста шарів. Внизу у вас можуть бути інструкції по збірці, які працюють на центральному процесорі, на більш високому рівні ці інструкції можуть поєднуватися для формування підпрограм вводу / виводу диска на ще більш високому рівні, вам не потрібно працювати з Disk I / O безпосередньо, оскільки ви можете використовувати функції Windows просто для відкриття / читання / запису / пошуку / закриття файлу. Це все абстракції ще до того, як ви перейдете до власного коду програми.
У межах вашого коду шари абстракції продовжуються. Можливо, у вас є підпрограми маніпулювання рядками / мережею / даними нижчого рівня. На більш високому рівні ви можете комбінувати ці підпрограми в підсистеми, що визначають управління користувачами, рівень користувальницького інтерфейсу, доступ до бази даних. Ще один рівень цих підсистем може бути об'єднаний в серверні компоненти, які об'єднуються і стають частиною більшої корпоративної системи.
Головне для кожного з цих шарів абстрагування полягає в тому, що кожен з них приховує деталі, викриті попереднім шаром (ими), і представляє дуже чистий інтерфейс, який повинен бути використаний наступним шаром вгору. Щоб відкрити файл, ви не повинні знати, як писати окремі сектори або які апаратні переривання обробляються. Але якщо ви почнете подорожувати по ланцюгу шару абстракції, ви, безумовно, зможете простежити від виклику функції Write (), аж до точної інструкції, що надсилається на контролер жорсткого диска.
Те, що пропонує вам зробити автор, коли ви визначаєте клас чи функцію, подумайте, який саме ви є шаром. Якщо у вас є клас, який керує підсистемами та об’єктами користувача, той самий клас не повинен виконувати маніпуляції з рядком низького рівня або містити цілу купу змінних лише для здійснення дзвінків з сокета. Це було б порушенням схрещування шарів абстракції, а також того, щоб мати один клас / функцію, робити лише одне (SRP - єдиний принцип відповідальності).