W jednym z wielu anty-OOP na cat-v.org znalazłem fragment Joe Armstronga, który podniósł kilka zastrzeżeń przeciwko modelowi OOP, z których jeden był następujący:
Sprzeciw 4 - Obiekty mają stan prywatny
Państwo jest źródłem wszelkiego zła. W szczególności należy unikać funkcji wywołujących skutki uboczne.
Podczas gdy stan w językach programowania jest niepożądany, w rzeczywistości jest go mnóstwo. Jestem bardzo zainteresowany stanem mojego konta bankowego, a kiedy wpłacam lub wypłacam pieniądze z mojego banku, oczekuję, że stan mojego konta bankowego zostanie poprawnie zaktualizowany.
Biorąc pod uwagę fakt, że państwo istnieje w świecie rzeczywistym, jakie udogodnienia powinien zapewnić język programowania do radzenia sobie z państwem?
OOPL mówią „ukryj stan przed programistą”. Stany są ukryte i widoczne tylko poprzez funkcje dostępu. Konwencjonalne języki programowania (C, Pascal) mówią, że widoczność zmiennych stanu jest kontrolowana przez reguły zakresu języka. Czyste języki deklaratywne mówią, że nie ma państwa. Globalny stan systemu jest przenoszony na wszystkie funkcje i wynika ze wszystkich funkcji. Mechanizmy takie jak monady (dla FPL) i DCG (języki logiczne) służą do ukrywania stanu przed programistą, dzięki czemu mogą programować „tak jakby stan nie miał znaczenia”, ale w razie potrzeby mają pełny dostęp do stanu systemu.
Wybrana przez OOPL opcja „ukryj stan przed programistą” jest najgorszym możliwym wyborem. Zamiast ujawniać stan i próbować znaleźć sposoby na zminimalizowanie uciążliwości stanu, ukrywają go.
Co to dokładnie oznacza? Mam bardzo niski poziom doświadczenia lub procedur, głównie OOP, więc prawdopodobnie wyjaśnia to, jak bardzo się z tym nie znam. I z bardziej nowoczesnego punktu widzenia, skoro minęła już większość histerii zorientowanej obiektowo (przynajmniej o ile mi wiadomo), jak według was trafne / istotne jest to przejście?
Dzięki za pomoc.