Odpowiem na twoje pytanie pytaniem; kiedy pojechałeś dziś rano do pracy (zakładam, że tak zrobiłeś), czy obchodziło cię dokładnie, jak silnik otworzył zawory, aby wpuścić mieszanki paliwowo-powietrzne, a następnie je zapalił? Nie. Nie obchodzi Cię, jak działa silnik twojego samochodu podczas jazdy w dół drogi. Dbasz, że ma pracę.
Załóżmy, że pewnego dnia twój samochód nie działa. Nie uruchamia się, rzuca pręt, zrywa pasek, niewytłumaczalnie wbija się w tę betonową barierę bez własnej winy, kiedy byłeś zajęty pisaniem wiadomości. Teraz potrzebujesz nowego samochodu (przynajmniej tymczasowo). Czy obchodzi Cię dokładnie, jak działa ten nowy samochód? Nie. Najważniejsze jest, aby po pierwsze działało, a po drugie, możesz korzystać z tej samej wiedzy i umiejętności, których używałeś do prowadzenia starego samochodu do prowadzenia nowego. Idealnie powinno ci się wydawać, że nie ma zmian w samochodzie, którym jeździsz. Realistycznie sposób, w jaki działa ten nowy samochód, powinien dać ci jak najmniej „niespodzianek”, jak to możliwe.
Te podstawowe zasady są podstawową zasadą enkapsulacji i abstrakcji. Wiedza o tym, jak obiekt robi to, co robi, nie powinna być wymagana do używania go do robienia tego, co robi. Nawet w programowaniu komputerowym szczegóły ścieżek elektrycznych w procesorze uruchomionym przez program są wyodrębnione za co najmniej kilkanaście warstw instrukcji I / O, sterowników, oprogramowania systemu operacyjnego i środowiska wykonawczego. Wielu bardzo udanych inżynierów oprogramowania pisze doskonale dobry kod, nie martwiąc się nawet o dokładną architekturę sprzętu, a nawet kompilację systemu operacyjnego, która go uruchomi. W tym mnie.
Ukrywanie enkapsulacji / informacji pozwala na mentalność „nie przejmuj się, jak to robi, tylko dbaj o to”. Twój obiekt powinien ujawniać to, co jest użyteczne dla konsumenta, w taki sposób, aby konsument mógł go łatwo konsumować. Teraz, w prawdziwym świecie, nie oznacza to, że samochód nie powinien przekazywać użytkownikowi żadnych informacji o wewnętrznych działaniach ani że samochód powinien umożliwiać użytkownikowi jedynie najbardziej podstawowe funkcje, takie jak zapłon, kierownica, i pedały. Wszystkie samochody mają prędkościomierze i wskaźniki paliwa, tachometry, światła idioty i inne informacje zwrotne. Praktycznie wszystkie samochody mają również przełączniki do różnych niezależnych podsystemów, takich jak reflektory, kierunkowskazy, radio, regulacja siedzeń itp. Niektóre samochody umożliwiają dość ezoteryczny wkład użytkownika, na przykład czułość środkowego mechanizmu różnicowego o ograniczonym poślizgu. We wszystkich przypadkach, jeśli wiesz wystarczająco dużo, możesz go otworzyć i zmienić, aby działał nieco inaczej. Ale w większości przypadków, być może, użytkownik może nie być w stanie bezpośrednio i niezależnie sterować pompami paliwa z kabiny? Może, być może, użytkownik nie powinien być w stanie włączyć swoich świateł hamowania bez faktycznego naciśnięcia pedału hamulca?
Abstrakcja pozwala na to, że „to nie to samo, ale ponieważ oba są XI, mogę używać ich tak, jak bym dowolną X”. Jeśli Twój obiekt dziedziczy lub implementuje abstrakcję, twoi klienci powinni oczekiwać, że twoja implementacja przyniesie taki sam lub podobny wynik jak inne znane implementacje abstrakcji. Toyota Camry i Ford Fusion to „samochody”. Jako takie mają one wspólny zestaw oczekiwanych funkcji, takich jak kierownica. Obróć w lewo, samochód jedzie w lewo. Obróć w prawo, samochód jedzie w prawo. Możesz wsiąść do dowolnego samochodu w Stanach Zjednoczonych i oczekiwać, że samochód będzie miał kierownicę i co najmniej dwa pedały, z których jeden po prawej to pedał „samochód jedzie”, a środkowy to pedał „samochód zatrzymuje się” .
Następstwem abstrakcji jest „teoria najmniejszego zdziwienia”. Jeśli zasiadłeś za kierownicą nowego samochodu na jazdę próbną, obróciłeś kierownicę zgodnie z ruchem wskazówek zegara, a samochód skręcił w lewo, byłbyś zaskoczony co najmniej. Oskarżyłbyś dealera o sprzedawanie punktów sprzedaży i mało prawdopodobne jest, aby usłyszał którykolwiek z jego powodów, dla których nowe zachowanie jest „lepsze” niż to, do czego jesteś przyzwyczajony, lub jak dobrze to zachowanie jest „udokumentowane” lub jak „ przejrzysty ”system sterowania. Pomimo tego, że nowy samochód i wszystkie inne, którymi jeździłeś, nadal są „samochodami”, prowadząc ten samochód, musisz zmienić kilka podstawowych koncepcji, w jaki sposób samochód powinien być prowadzony, aby z powodzeniem prowadzić nowy samochód. To zazwyczaj zła rzecz, i dzieje się tak tylko wtedy, gdy nowy paradygmat ma intuicyjną przewagę. Być może dodanie pasów bezpieczeństwa jest dobrym przykładem; 50 lat temu właśnie wsiadłeś i pojechałeś, ale teraz musisz się zapiąć, intuicyjną zaletą jest to, że nie przechodzisz przez przednią szybę lub do siedzenia pasażera w razie wypadku. Nawet wtedy kierowcy stawiali opór; wielu właścicieli samochodów odcina pasy bezpieczeństwa od samochodu, dopóki nie zostaną uchwalone przepisy nakazujące ich stosowanie.