Przygotowuję prezentację, która pokazuje różnice między programowaniem strukturalnym a programowaniem obiektowym i chcę zilustrować, dlaczego ludzie potrzebują OOP, na przykładzie, w którym zastosowanie koncepcji OOP znacznie ułatwi kodowanie, dzięki czemu odbiorcy naprawdę poczują, że potrzebują OOP.
Jakieś pomysły ??
java
c++
object-oriented
Ahmed
źródło
źródło
Odpowiedzi:
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ć?
źródło
Istnieją 3 podstawowe sposoby programowania komputera:
goto
s, jak w starych tłumaczach BASIC lub w asemblerze. Niewiele osób programuje już w ten sposób.Moim zdaniem programowanie obiektowe jest czymś innym. Chodzi o to, jak zorganizować swój program na większą skalę. Nie zastępuje ani nie dezaktualizuje żadnego z 3 paradygmatów, o których wspomniałem powyżej - w ciele metody nadal musisz wybrać jeden z 3 paradygmatów z listy, aby zapisać.
źródło
Wszystko zależy od tego, jak przewidujesz zmiany.
Obie koncepcje nadają się do ponownego użycia, ale OOP otwiera drzwi do łatwiejszych zmian. Program OOP ma wszystkie możliwości wielokrotnego użytku, jakie oferuje programowanie strukturalne, ale można go również użyć do tworzenia nowych funkcji przy mniejszym wysiłku.
Można powiedzieć, że OOP dziedziczy całą funkcjonalność programowania strukturalnego z dodatkową funkcjonalnością dziedziczenia! :-RE
źródło
Pojęcia są ortogonalne. Programowanie strukturalne polega na tworzeniu kodu w ramach procedur / funkcji / metod. Podczas wykonywania OOP jest całkowicie możliwe (i pożądane) przestrzeganie zasad programowania strukturalnego w ramach metod klasowych.
źródło
To rodzaj subiektywnego sformułowania - programowanie strukturalne i OOP to style rozwiązywania problemów, a jedno nie zawsze jest lepsze od drugiego. Pisanie biblioteki metod numerycznych ma sens, jeśli jest wykonywane w stylu strukturalnym, w którym przeprowadzane są transformacje danych wejściowych. Jednak prosty agent obsługiwany przez maszynę stanu może być łatwo wyrażony jako samodzielna klasa w Javie lub C ++. OOP może być naturalnym sposobem wyrażania kontenerów pamięci dla struktur danych.
Mówienie o ukrywaniu informacji i modułowości jest dobrym sposobem na naturalną motywację OOP jako stylu.
Ciekawe podejście do tej kwestii napisał Steve Yegge - w pewnym sensie jeden z lepszych opisów różnic w podejściach między tymi dwoma stylami.
źródło
OOP jest łatwiejsze do zrozumienia, kiedy tworzysz model biznesowy. Kiedy myślisz o elementach aplikacji, używasz między nimi OBIEKTÓW i STOSUNKÓW, np. Książka ma Autorów, Tytuł, ISBN. Książka jest wynajmowana w Bibliotece i może być pożyczona przez Studenta. Programowanie strukturalne wymusza myślenie o konkretnych procesach, implementacjach nie w abstrakcji.
OOP jest przeznaczony do łatwych zmian. Zmiana w programie strukturalnym jest możliwa, ale musi być opisana kodem. Zmianę w programie OO można opisać abstrakcyjną zmianą modelu.
źródło
Zmienny zakres:
Myślę, że zasadą języków zapewniającą dobre programowanie jest ograniczenie zakresu zmiennych. W językach strukturalnych, takich jak C, zakres obejmuje głównie dwa typy -
Wszyscy wiemy, że globalny zasięg jest szkodliwy. Ale czasem lokalne zakresy nie wystarczą do uruchomienia programu. Unikanie globalnych zasięgów ma wtedy szersze zastosowanie wskaźników, które umożliwiają stosowanie zmiennych poza zakresem. Ale wskaźniki są trudne do zrozumienia i użycia.
Języki OOP, takie jak C ++, dodają nowy typ zakresu - zakres klasy / obiektu poprzez enkapsulację. Ten zakres jest dodatkowo wzmacniany przez odmiany prywatne / publiczne. I to rozwiązuje wiele problemów związanych ze zmiennym określaniem zakresu. Zakresy są bardziej zdefiniowane w OOP. Wskaźniki są mniej potrzebne.
Jest to jedna z wielkich funkcji OOP.
źródło