Я думаю, чтобы понять этот вопрос, вам нужно понять, что такое абстракция. (Я слишком ленив, чтобы найти формальное определение, поэтому я уверен, что скоро начну испытывать затруднения, но здесь ...) Абстракция - это когда вы берете сложный предмет или сущность и скрываете большинство его деталей. при этом раскрывая функциональность, которая до сих пор определяет суть этого объекта.
Я считаю, что пример, который книга дала вам, был домом. Если вы внимательно посмотрите на дом, вы увидите, что он сделан из досок, гвоздей, окон, дверей ... Но мультфильм, изображающий дом рядом с фотографией, все еще остается домом, хотя его и не хватает. многие из этих деталей.
То же самое с программным обеспечением. Всякий раз, когда вы программируете, как советует книга, вы должны думать о своем программном обеспечении как о слоях. Данная программа может легко иметь более ста слоев. Внизу у вас могут быть инструкции по сборке, которые выполняются на процессоре, на более высоком уровне эти инструкции могут быть объединены для формирования подпрограмм дискового ввода-вывода, но на более высоком уровне вам не нужно работать с диском I / O напрямую, потому что вы можете использовать функции Windows для простого открытия / чтения / записи / поиска / закрытия файла. Все это абстракции еще до того, как вы перейдете к собственному коду приложения.
Внутри вашего кода уровни абстракции продолжаются. Возможно, у вас есть процедуры обработки строк / сети / данных более низкого уровня. На более высоком уровне вы можете объединить эти подпрограммы в подсистемы, которые определяют управление пользователями, уровень пользовательского интерфейса, доступ к базе данных. Еще один уровень, на котором эти подсистемы могут быть объединены в серверные компоненты, которые собираются вместе, чтобы стать частью более крупной корпоративной системы.
Ключом к каждому из этих уровней абстракции является то, что каждый из них скрывает детали, представленные предыдущим уровнем (уровнями), и представляет очень чистый интерфейс, который будет использоваться следующим уровнем вверх. Чтобы открыть файл, вам не нужно знать, как писать отдельные сектора или какие аппаратные прерывания обрабатываются. Но если вы начнете перемещаться по цепочке уровня абстракции, вы определенно сможете проследить от вызова функции Write (), вплоть до точной инструкции, отправляемой контроллеру жесткого диска.
Автор говорит вам, что когда вы определяете класс или функцию, подумайте, какой вы слой. Если у вас есть класс, который управляет подсистемами и объектами пользователя, тот же класс не должен выполнять низкоуровневые манипуляции со строками или содержать целый набор переменных только для выполнения вызовов сокетов. Это было бы нарушением пересечения уровней абстракции, а также наличия одного класса / функции, делающей только одно (SRP - принцип единой ответственности).