Możesz zajrzeć na ten szybki blog wideo . Rezultat jest taki, że różnica między programowaniem strukturalnym a programowaniem OO zależy od tego, co zabierają programowaniu, a nie od tego, co dodają. Dyscypliny oprogramowania, takie jak programowanie strukturalne i programowanie obiektowe, są ograniczające, a nie włączające. Oto kilka definicji. Ostrzeżenie: nie polubisz ich.
Programowanie strukturalne to dyscyplina narzucona goto (bezpośrednie przekazanie kontroli)
Programowanie OO to dyscyplina nałożona na wskaźniki do funkcji (pośrednie przekazanie kontroli)
Programowanie funkcjonalne to dyscyplina narzucana przy przydzielaniu zadań.
Pierwszy nie jest zbyt trudny do zrozumienia. Dijkstra stwierdził, że niemożliwe było stworzenie ogólnych dowodów poprawności, gdy goto było dozwolone w algorytmach. Jeśli jednak struktury kontrolne byłyby ograniczone do sekwencji, selekcji i iteracji, możliwe byłyby dowody poprawności . Oczywiście nie próbujemy nawet dzisiaj udowodnić, że wszystko jest w porządku, ale podoba nam się prostota i elegancja programowania strukturalnego.
Trochę trudniej zrozumieć OO. Często definiujemy OO jako enkapsulację, dziedziczenie i polimorfizm. Mniejsze jest to, że wszystkie trzy z tych atrybutów są osiągalne i często zostały osiągnięte w C. Rzeczywiście, C ++ zaczęło się jako preprocesor skompilowany do C. Nie jest tak naprawdę trudne do enkapsulacji w C. Nie jest też trudne do zbudowania struktury danych, które są wzajemnie podzbiorami, symulując dziedziczenie. Polimorfizm jest jednak nieco trudniejszy. Wymaga wskaźników do funkcji, które w C są trudne do dobrego zarządzania. Języki takie jak C ++ dały nam dyscyplinę narzuconą na te wskaźniki funkcji. Kompilator C ++ zbudował dla nas vtables i zainicjował wskaźniki w nich zgodnie z surowym formalizmem. W bardzo realnym sensie OO jest po prostu dyscyplinąpośrednie przekazanie kontroli, tj. wskaźników do funkcji.
Programowanie strukturalne polega na tym, jak nie używać goto. OO polega na tym, jak nie używać wskaźników do funkcji. Również programowanie funkcjonalne polega na tym, czego nie należy robić. W programowaniu funkcjonalnym nie przypisujemy zmiennych, z wyjątkiem najbardziej ściśle kontrolowanych przypadków.
W końcu wszystkie te „technologie” programowania faktycznie ograniczają dyscypliny, a nie technologie wspomagające. Mówią nam, co nie robić więcej niż mówią nam, co do zrobienia. A to oznacza, że rozwój oprogramowania nie rozwinął się w ciągu ostatnich 40 lat. Raczej się skurczył. Staje się coraz bardziej ograniczony, ponieważ nauczyliśmy się wszystkich rzeczy, których nie powinniśmy robić.
Uczenie się, czego nie należy robić, jest dobre; ale oto niepokojące pytanie: jakie nowe rzeczy nauczyliśmy się robić?