Programowanie imperatywne

Programowanie imperatywneparadygmat programowania, który opisuje proces wykonywania jako sekwencję instrukcji zmieniających stan programu. Podobnie jak tryb rozkazujący w lingwistyce wyraża żądania jakichś czynności do wykonania. Programy imperatywne składają się z ciągu komend do wykonania przez komputer. Rozszerzeniem (w sensie wbudowanych funkcji) i rodzajem (w sensie paradygmatu) programowania imperatywnego jest programowanie proceduralne.

Programowanie imperatywne różni się od funkcyjnego czy też programowania logicznego. W tamtych paradygmatach nie istnieje pojęcie instrukcji; kładą one bardziej nacisk na to, co ma zostać wykonane, natomiast nie w jaki sposób, co ma miejsce w przypadku programowania proceduralnego.

Przegląd edytuj

Prawie każdy sprzęt komputerowy pracuje w sposób imperatywny. Został on zaprojektowany do wykonywania kodu maszynowego, napisanego właśnie w stylu imperatywnym. Z tego niskopoziomowego punktu widzenia, stanem programu jest zawartość pamięci komputera, a instrukcjami są komendy składające się na kod maszynowy. Bardziej wysokopoziomowe języki używają zmiennych i bardziej złożonych instrukcji, lecz mimo tego nadal należą do tego samego paradygmatu. Ponieważ podstawowe założenia programowania imperatywnego są bardzo podobne lub bezpośrednio odwzorowane w sprzęcie komputerowym, większość dostępnych języków programowania jest imperatywna.

W językach imperatywnych można wyróżnić wiele wspólnych elementów. Instrukcje przypisania wykonują pewne zadanie na zlokalizowanych w pamięci danych i odkładają tam wynik działania na potrzeby późniejszych operacji. Języki wysokopoziomowe umożliwiają dodatkowo wykonywanie bardziej złożonych wyrażeń składających się z operacji arytmetycznych oraz całych funkcji. Instrukcje pętli umożliwiają wielokrotne wykonanie tego samego kodu - w zależności od potrzeb, "wielokrotność" może oznaczać pewną określoną z góry ilość powtórzeń lub wykonywanie do czasu spełnienia pewnych warunków. Instrukcje warunkowe wykonują pewien blok kodu tylko wtedy, kiedy spełniony jest określony warunek. W przeciwnym razie blok ten jest pomijany podczas wykonywania. Języki imperatywne zezwalają też na przekazanie sterowania do zupełnie innej części programu. Realizowane jest to poprzez bezwarunkowy skok zwany "goto" oraz wywołanie podprogramu (procedury).

Historia edytuj

Najwcześniejszymi językami imperatywnymi był kod maszynowy pierwotnych komputerów. Istniejące w nich zestawy komend były bardzo proste lub nawet prymitywne - można je było bardzo prosto zaimplementować po stronie sprzętowej, lecz pisanie przy ich pomocy bardziej złożonych programów było niezwykle trudne. Zaprojektowany przez Johna Backusa z IBM język FORTRAN był pierwszym ważniejszym projektem usuwającym niedogodności płynące z pisania bezpośrednio w kodzie maszynowym. Był to język kompilowany umożliwiający stosowanie nazywanych zmiennych, złożonych wyrażeń, procedur i wielu innych struktur typowych dla współczesnego imperatywnego języka programowania. Następne dwie dekady to burzliwy rozwój takich języków. Pod koniec lat pięćdziesiątych i w latach sześćdziesiątych stworzono ALGOL, umożliwiający jeszcze łatwiejsze programowanie algorytmów matematycznych, a nawet występował jako podstawowy język niektórych systemów operacyjnych. COBOL (1960) i BASIC były projektami posiadającymi składnię zbliżoną wyglądem do normalnego języka angielskiego. W latach siedemdziesiątych powstały dwa najpowszechniej stosowane języki imperatywne: Pascal autorstwa Niklausa Wirtha oraz C stworzony przez Dennisa Ritchie'ego, gdy pracował w Bell Laboratories. Wirth rozpoczął później prace nad Modula-2, Modula-3 oraz Oberonem. Na potrzeby Departamentu Obrony Stanów Zjednoczonych Jean Ichbiah oraz zespół inżynierów z Honeywell stworzyli język Ada w 1974, jednak prace nad kompletną specyfikacją trwały aż do 1983 roku.

Od lat osiemdziesiątych datuje się gwałtowny wzrost zainteresowania językami zorientowanymi obiektowo. W swych podstawach nadal miały one charakter imperatywny, lecz dodawały wsparcie dla obiektów. W 1980 roku Xerox Palo Alto Research Center wprowadziło na rynek Smalltalk-80, pierwotnie sformułowanego 11 lat wcześniej przez Alana Kaya. Bjarne Stroustrup, bazując na koncepcji pierwszego obiektowego języka na świecie, Simula, wprowadził obiektowość do języka C, tworząc C++, którego pierwsza implementacja powstała w 1985 roku. W latach dziewięćdziesiątych powstał cały szereg imperatywno-obiektowych języków:

Przykładowe języki edytuj

Kanonicznymi przykładami imperatywnych języków programowania są FORTRAN i ALGOL. Wielu zalicza do nich także Pascala, C i Adę.