Myślę, że aby zrozumieć to pytanie, musisz zrozumieć, czym jest abstrakcja. (Jestem zbyt leniwy, by znaleźć formalną definicję, więc jestem pewien, że zaraz się oszukam, ale oto idzie ...) Abstrakcja dotyczy sytuacji, w których bierzesz skomplikowany temat lub byt i ukrywasz większość jego szczegółów ujawniając funkcjonalność, która wciąż definiuje istotę tego obiektu.
Wierzę, że przykładem, który dała ci książka, był dom. Jeśli przyjrzysz się bardzo szczegółowo domowi, zobaczysz, że jest zrobiony z desek, gwoździ, okien, drzwi ... Ale rysunek domu obok zdjęcia jest nadal domem, mimo że go brakuje wiele z tych szczegółów.
To samo dotyczy oprogramowania. Ilekroć programujesz, tak jak radzi książka, musisz myśleć o swoim oprogramowaniu jako o warstwach. Dany program może mieć z łatwością ponad sto warstw. Na dole mogą znajdować się instrukcje asemblera działające na procesorze, na wyższym poziomie instrukcje te można łączyć w celu utworzenia procedur we / wy dysku, na jeszcze wyższym poziomie nie trzeba pracować z dyskowym we / wy O bezpośrednio, ponieważ możesz użyć funkcji systemu Windows, aby po prostu otworzyć / odczytać / zapisać / wyszukać / zamknąć plik. Są to wszystkie abstrakty, nawet zanim przejdziesz do własnego kodu aplikacji.
W twoim kodzie warstwy abstrakcji są kontynuowane. Mogą istnieć procedury manipulacji ciągami / siecią / danymi niższego poziomu. Na wyższym poziomie można łączyć te procedury w podsystemy, które definiują zarządzanie użytkownikami, warstwę interfejsu użytkownika, dostęp do bazy danych. Jeszcze inna warstwa te podsystemy mogą być łączone w komponenty serwera, które łączą się, aby stać się częścią większego systemu korporacyjnego.
Kluczem do każdej z tych warstw abstrakcji jest to, że każda z nich ukrywa szczegóły odsłonięte przez poprzednie warstwy (warstwy) i zapewnia bardzo czysty interfejs do wykorzystania przez kolejne warstwy. Aby otworzyć plik, nie powinieneś wiedzieć, jak pisać poszczególne sektory ani jakiego sprzętu przerwać. Ale jeśli zaczniesz podróżować w dół łańcucha warstwy abstrakcji, na pewno będziesz w stanie prześledzić wywołanie funkcji Write () aż do dokładnej instrukcji wysyłanej do kontrolera dysku twardego.
Autor mówi ci, abyś zdefiniował klasę lub funkcję, zastanów się, na jakiej warstwie jesteś. Jeśli masz klasę zarządzającą podsystemami i obiektami użytkownika, ta sama klasa nie powinna wykonywać niskopoziomowych operacji na łańcuchach ani zawierać całej gamy zmiennych tylko do wywoływania gniazd. Byłoby to naruszeniem przekraczania warstw abstrakcji, a także posiadania jednej klasy / funkcji, by wykonywać tylko jedną rzecz (SRP - zasada pojedynczej odpowiedzialności).