Jakie były wzorce projektowe ery programowania proceduralnego? [Zamknięte]


24

Podobne: Jak zrobiono programowanie 20 lat temu?

OOP jest obecnie dość modny, ma swoje korzenie w Simula 67 w latach 60. XX wieku, a później stał się popularny w Smalltalk i C ++ . Mamy DRY, SOLID, wiele książek o wzorach projektowych w świecie obiektowym.

Ale jakie były główne zasady programowania przed przyjęciem całego paradygmatu OOP? A jakie były główne wzorce projektowe?


11
OOP jest w rzeczywistości trochę starszy: patrz en.wikipedia.org/wiki/Smalltalk . Ponadto DRY nie jest unikalne dla OOP; zasadą może być (i powinna być) we wszystkich paradygmatach programowania, chociaż mają różne odpowiedzi, jak to osiągnąć.
tdammers

4
OOP pochodzi głównie z Simuli
Charles Salvia

8
OOP ma swoje korzenie w C ++ ??? Dzieci w dzisiejszych czasach ... :(
Andres F.

5
Na szczęście cały ten marketingowy bezużyteczny bełkot, wszystkie hype słowa są stosunkowo nową rzeczą w naszej branży. W dawnych czasach po prostu programowaliśmy, bez żadnych bzdur.
SK-logic

@AndresF., Możesz edytować to bezpośrednio w moim pytaniu.
Vorac,

Odpowiedzi:


31

Byłem programistą Cobol, zanim nauczyłem się Java. Tworzę od ponad 35 lat.

W czasach języków proceduralnych większość przetwarzania odbywała się wsadowo. Cofnij się wystarczająco daleko w historii, a nawet kompilacja programu została wykonana za pomocą talii kart dziurkowanych w partii.

Wbrew twierdzeniom Kiliana Fotha mieliśmy wzorce projektowe w latach 70. i 80. W Cobolu istniał pewien sposób na kodowanie dopasowania / scalania wielu plików. Był pewien sposób na kodowanie dodawania transakcji do pliku głównego (taśmy) w Cobolu. W Cobolu istniał pewien sposób na kodowanie generowania raportów. Dlatego pisarz raportów IBM nigdy tak naprawdę nie zyskał na popularności w wielu sklepach Cobol.

Nastąpiło wczesne zastosowanie zasady DRY. Utwórz wiele akapitów, aby się nie powtarzać. Techniki kodowania strukturalnego zostały opracowane w latach siedemdziesiątych, a Cobol dodał do języka słowa strukturalne (czasowniki) w 1985 roku.

Ogólnie, kiedy pisaliśmy nowy program Cobol, skopiowaliśmy stary program Cobol i zmieniliśmy nazwy, aby chronić niewinnych. Prawie nigdy nie kodowaliśmy programu Cobol z pustej kartki papieru lub pustego ekranu. To duży wzorzec projektowy, gdy możesz kopiować i wklejać całe programy.

Było tak wiele wzorców projektowych Cobola, że ​​programista Cobol potrzebował lat, aby się ich nauczyć. To jeden z powodów, dla których programiści Cobola w większości nadal używają składni z 1985 roku.


2
+1. Miałem to samo doświadczenie z Cobolem, Pascalem i uczyłem się Podstawowego na Vic-20, kiedy. Było wiele rzeczy, które wykorzystałem i skopiowałem.
JohnP

Co powiesz na BONSOP, który jest nadal używany;)
dbasnett

Nazywanie „kopiuj / wklej / zmień” nie wydaje się słuszne nazywać „wzorcem projektowym” (przynajmniej tak, jak dziś używamy tego terminu) - może to bardziej „wzorzec kodowania”?
Izkata

@Izkata: To nie jest tak naprawdę wzór kodowania, ponieważ unikasz większości kodowania. Co powiesz na „wzorzec szablonu”? Masz rację, że kopiowanie / wklejanie / zmiana nie jest dobrym projektem według dzisiejszych standardów. Wtedy było to najlepsze, co mieliśmy.
Gilbert Le Blanc

1
Wzorzec projektowy jest taki sam, jak w przypadku C&P Cobol, singleton jest zawsze kodowany dokładnie w ten sam sposób - możesz nawet dostać trochę IDE, by wypluł dla ciebie teraz płytkę kotłową. To nie różni się niczym od wycinania i wklejania.
gbjbaanb

25

„Wzory projektowe” w oprogramowaniu nie istniały w erze, o której mówisz, ponieważ koncepcja nie została wynaleziona. To nie mnie jest niepoważny - to faktycznie jest powód; bycie nazywanym rozpoznawalną nazwą sprawia, że ​​wzorzec projektu jest „wzorzec projektu”, a nie tylko kodem, który ciągle używasz w takiej czy innej formie (np. „fabryka”, a nie „rodzaj klasy statycznej, którą lubię używać, a nie asortyment konstruktorów ”), a sama koncepcja nie jest wyjątkiem.

To powiedziawszy, oczywiście były rzeczy, które spełniały dokładnie taką samą rolę w pracy praktyków, jak obecnie wzorce projektowe. Ale będziesz rozczarowany, gdy usłyszysz o nich: typową „sztuczką guru” były w tamtych czasach rzeczy, które są dla nas dość nudne - np. Pojedynczo połączone listy, pętle kontrolowane przez indeks zwiększany przy każdej iteracji, sprytny „akcesor” „metody, które wydają się nic nie robić, ale dają swobodę w zmianie zdania na temat szczegółów implementacji później.

Zgadza się, rzeczy, które teraz bierzemy za pewnik - które czasami są nawet częścią używanych przez nas języków - były zaawansowanymi (a czasem zazdrośnie strzeżonymi) koncepcjami znanymi tylko bardziej doświadczonym programistom. Są szanse, że prawie wszystko, co nie jest zupełnie trywialne, czego nauczysz się podczas podstawowego kursu programowania, przeszło fazę, w której był to moralny odpowiednik „wzorca projektowego” dla praktyków tamtych czasów. Konstrukcja oprogramowania może jeszcze nie być rygorystyczną dyscypliną inżynieryjną, ale jeśli studiujesz najnowszą technologię lat 50. i 60., nie można zaprzeczyć, że od początku była ogromna .


4
wzorzec projektowy to tylko nazwa Beck i Cunningham wymyślili, aby sformalizować koncepcję powtarzającego się wzoru kodu. Zrobili to w 1987 roku. Fowler opublikował swoją książkę w 2002 roku i upowszechnił je.
gbjbaanb

1
@ gbjbaanb, myślałem, że wzorce projektowe cofają się co najmniej kilka dekad wstecz
Vorac

3
@Vorac te nie były przeznaczone dla oprogramowania
komnata

18

Poprzedni duży paradygmat polegał na programowaniu strukturalnym . Zamiast UML istniało wiele różnych diagramów (schematy przepływu, diagramy przepływu danych, schematy struktur itp.). Rozwój był głównie odgórny i następował po procesie rozkładu funkcjonalnego. Jednym z podstawowych pomysłów było to, że struktura twojego programu powinna przypominać diament: główny moduł u góry, rozwijający się w moduły sterujące wysokiego poziomu, które wywoływały procedury w modułach niższego poziomu. Te moduły niższego poziomu zbudowane na jeszcze niższych modułach, z których wszystkie (teoretycznie) ostatecznie zbiegły się w kilku podstawowych procedurach We / Wy. Moduły wysokiego poziomu miały zawierać logikę programu, moduły niższego poziomu były bardziej zainteresowane integralnością danych i obsługą błędów.

Ważnymi pojęciami wprowadzonymi w tym czasie były ukrywanie informacji, modułowość oraz wysoka kohezja / niskie sprzężenie. Zobacz prace Dave'a Parnasa, aby znaleźć kilka ważnych artykułów na te tematy. Zobacz także twórczość Larry'ego Constantine'a, Toma DeMarco i Eda Yourdon.


Tak, tego się nauczyłem 25 lat temu
Binary Worrier,

10

Podejrzewam, że jednym dużym (oprócz samego programowania strukturalnego) była koncepcja przekazania uchwytu - w OO masz obiekt i zawiera on stan i funkcjonalność. Wcześniej przed OO miałbyś mnóstwo niezależnych funkcji i przekazywałeś uchwyt do jakiegoś stanu między nimi - ciasteczka, jeśli chcesz. To dało ci zasady OO bez faktycznego posiadania OO.

Widać to bardzo często w starym kodzie Win32, należy przekazać UCHWYT, który byłby nieprzezroczystym typem reprezentującym stan przydzielony w jądrze systemu Windows. Możesz to zrobić samodzielnie, przekazując wskaźnik do struktury, którą wcześniej przypisałeś jako pierwszy parametr do funkcji działających na tych danych.


To całkiem interesujące. Szukam również innych przykładów. Na przykład, w jaki sposób „zbudowano logikę wokół struktur danych, a nie na odwrót”?
Vorac

2
Tak samo jak teraz, z tym wyjątkiem, że twoje metody to bezpłatne funkcje powiązane ze strukturami danych na podstawie konwencji, implikacji lub dokumentacji, a nie ze specjalną obsługą języka.
Bezużyteczne

1
to tak, jak javascript robi OO, tylko w JS wskaźniki funkcji mogą być częścią struktury, którą przekazujesz. Nic tak naprawdę się nie zmienia, po prostu
nakładamy

5

Ponieważ nikt jeszcze nie wspomniał o oczywistym: jednym wielkim wzorcem projektowym w erze proceduralnej był Object. Podobnie jak wiele popularnych wzorców projektowych przed (np. Podprogram) i później (np. Iterator), stał się tak popularny, że otrzymał nawet wsparcie językowe.


3

„Maszyna stanów skończonych” może być liczona jako wzorzec, a moduły FSM zostały napisane (np. Dla protokołów komunikacyjnych) przy użyciu języków sprzed OO.

Popularne były również „procedury obsługi przerwań” i TSR, np. W systemie DOS.


3

Terminy takie jak „Kod spaghetti” i „Pojedynczy punkt wyjścia” są w rzeczywistości cofnięciami do tamtych czasów. Obecnie nazywamy kod, ale nie lubimy „kodu spaghetti”, ale tak naprawdę jest to odniesienie do kodu powiązanego (źle) z GOTO i JMP.

(Dzisiaj cierpimy na „kod ravioli”, w którym kod jest jak grupa niepowiązanych, ciasno spakowanych klas, podobnie jak talerz ravioli. Jednak niektórzy eksperci OO słusznie pytają: „Ale czy to nie OO powinno to robić wygląda jak?")

„Single Point of Exit” jest dziś frustrującą przeszkodą w refaktoryzacji. Wielu deweloperów, z którymi rozmawiam, nawet o tym nie słyszało i są przerażeni, kiedy to wyjaśniam. Ale w dawnych czasach oznaczało to, że nie wyskakuj nagle z bloku kodu i nie wprowadzaj kodu spaghetti. Przeskocz do przodu na koniec logiki, a następnie z wdziękiem wyjdź.

Rozciągając moją pamięć w przeszłość, wydaje mi się, że pomysł połączenia kodu w procedury był dużym krokiem naprzód. Pomysł, że można spakować procedury w interoperacyjne moduły wielokrotnego użytku, był swego rodzaju Świętym Graalem programowania.

EDYCJA: „Kod samodopasowujący się” był również wzorem stosowanym szczególnie w oryginalnej Doomie. Właśnie tam program nadpisuje instrukcje szybszymi instrukcjami w zależności od jego stanu. Kiedy byłem tykiem na kursie programistycznym w Muzeum Nauki, mój instruktor ostrzegł nas surowo: „Nie pisz kodu modyfikującego sam siebie!”

EDYCJA EDYCJA: Jednak przed Internetem słowo wędrowało znacznie wolniej. Pomysł implementacji algorytmów i struktur danych był znacznie większy. Dzisiaj sortuję cały czas, nawet nie wiedząc, jakiego używam. Ale wtedy musiałeś to sam zakodować. Pamiętam jeden artykuł mówiący o wyzwaniach programistycznych, które kiedyś zajmowały dni, które dzisiaj nokautujemy za pół godziny lub krócej. Tak naprawdę świadome programowanie „algorytmiczne” i „struktura danych” prawdopodobnie znalazłoby się na liście, znacznie bardziej niż dzisiaj.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.