Programare imperativă

În informatică , programarea imperativă este o paradigmă de programare care descrie operațiile în secvențe de instrucțiuni executate de computer pentru a schimba starea programului. Acest tip de programare este cel mai răspândit printre toate limbajele de programare existente și este diferit de programarea declarativă (dintre care programarea logică sau chiar programarea funcțională sunt subseturi).

Limbaje imperative și procesoare

Aproape toate procesoarele care echipează computerele sunt imperative în natură: sunt create pentru a executa o serie de instrucțiuni elementare, codificate sub formă de coduri opționale (pentru coduri de funcționare ). Setul de coduri de opțiuni formează limbajul mașinii specific arhitecturii procesorului . Starea programului la un moment dat este definită de conținutul memoriei principale din acel moment.

Limbajele de nivel superior folosesc variabile și operații mai complexe, dar urmează aceeași paradigmă . Rețetele de gătit și verificările proceselor industriale sunt două exemple de concepte familiare care seamănă cu programarea imperativă; din acest punct de vedere, fiecare pas este o instrucțiune, iar lumea fizică constituie starea modificabilă. Deoarece ideile de bază ale programării imperative sunt atât familiare din punct de vedere conceptual, cât și direct integrate în arhitectura microprocesoarelor, marea majoritate a limbajelor de programare sunt imperative.

Instrucțiuni de bază imperative

Majoritatea limbilor la nivel înalt au cinci tipuri principale de instrucțiuni:

  1. succesiunea instrucțiunilor
  2. cesiune sau cesiune
  3. instrucțiune condiționată
  4. bucla
  5. conexiunile

Secvența instrucțiunilor

O secvență de instrucțiuni (sau un bloc de instrucțiuni ) desemnează faptul că mașina execută o instrucțiune, apoi alta, etc., în ordine. De exemplu

este o secvență de instrucțiuni. Această construcție diferă de faptul de a executa instrucțiuni în paralel .

Instrucțiuni de atribuire

Declarațiile de atribuire efectuează, în general, o operație de memorie, iar informațiile sunt înregistrate pentru a fi utilizate ulterior. Limbajele la nivel înalt permit, de asemenea, evaluarea expresiilor complexe care pot consta dintr-o combinație de operații aritmetice și evaluări de funcții și atribuirea rezultatului în memorie. De exemplu:

atribuie valoarea , deci 5, variabilei de nume .

Declarații condiționate

În instrucțiunile condiționale permit un bloc de instrucțiuni de a fi executat în cazul în care o condiție predeterminată este îndeplinită. În caz contrar, instrucțiunile sunt ignorate și secvența de execuție continuă de la instrucțiunea imediat după sfârșitul blocului. De exemplu

va trimite mesajul numai dacă conexiunea este deschisă.

Instrucțiuni Loopback

Cele Instrucțiunile loopback sunt folosite pentru a repeta o secvență de instrucțiuni un număr predeterminat de ori ( a se vedea Boucle_for ), sau până la o anumită condiție se realizează. De exemplu

va face o buclă până când conexiunea este deschisă.

Se pare că aceste patru construcții fac posibilă realizarea tuturor programelor de computer posibile, fac posibilă realizarea unui sistem complet Turing .

Conexiuni necondiționate

De Conexiunile necondiționate permit secvența de execuție care urmează să fie transferat într -o altă parte a programului. Aceasta include saltul, numit „ go ” ( mergeți la , / ɡəʊ tuː /, „mergeți la”) în multe limbi și subrutine, sau apeluri de procedură. Instrucțiunile Loopback pot fi văzute ca o combinație între o ramură condițională și un salt. Apelurile către o funcție sau o procedură (deci un subprogram ) corespund unui salt, finalizat prin trecerea parametrilor, cu un salt de întoarcere.

Istoric

Limbajul mașinii

Cele mai vechi limbi imperative sunt limbile mașinii computerelor timpurii. În aceste limbi, setul de instrucțiuni este minim, ceea ce face ca implementarea hardware să fie mai simplă - controlăm direct ce se întâmplă în memorie - dar împiedică crearea de programe complexe.

A-0

Primul compilator - un program pentru verificarea prealabilă a unui program și traducerea acestuia în limbajul mașinii - numit A-0 , a fost scris în 1951 de Grace Murray Hopper .

Fortran

Fortran , dezvoltat de John Backus la IBM din 1954 , a fost primul limbaj de programare capabil să reducă obstacolele prezentate de limbajul mașinii în crearea de programe complexe. Fortran a fost un limbaj compilat, care a permis, printre altele, utilizarea variabilelor denumite, expresii complexe și subrutine. După mai multe revizuiri ale limbajului, Fortran este încă folosit în comunitatea științifică pentru calitatea bibliotecilor sale digitale și viteza sa mare, ceea ce îl face să fie limbajul pentru computer care a avut cea mai mare longevitate.

Algol

Următoarele două decenii au văzut apariția altor câteva limbi importante la nivel înalt. ALGOL , dezvoltat în 1958 de un consorțiu american-european pentru a concura cu FORTRAN, care era un limbaj proprietar , a fost strămoșul multor limbaje de programare de astăzi.

COBOL

COBOL ( 1960 ) este un limbaj pentru aplicații de gestionare a programării dezvoltat cu mai multe obiective: pe de o parte să aibă un limbaj standardizat, cu surse portabile pe echipamente diferite, pe de altă parte să aibă surse care să fie lizibile și verificabile de către non-utilizatori. -specialiști în calculatoare. În acest scop, a fost definit cu o sintaxă apropiată de engleză. Limbajul a evoluat apoi pentru a integra programarea structurată (COBOL 85) și programarea orientată pe obiecte (2000). Flota uriașă de aplicații COBOL existente în companii mari îi asigură longevitatea.

DE BAZĂ

Limbajul BASIC ( 1963 ) a fost conceput ca o versiune simplificată a FORTRAN în scopuri educaționale, destinată începătorilor și interactivă. Simplitatea sa și faptul că BASIC a fost interpretat au facilitat foarte mult dezvoltarea programelor, ceea ce i-a dat rapid o mare popularitate, în ciuda sărăciei construcțiilor sale. Din păcate, chiar această sărăcie urma să conducă la o serie de programe nestructurate și, prin urmare, dificil de întreținut. După un articol al lui Edsger Dijkstra care denunța ravagiile BASIC, reputația BASIC ca limbă pentru predarea programării a scăzut, în favoarea lui Pascal.

Pascal

În anii 1970 , Pascal a fost dezvoltat de Niklaus Wirth , cu scopul de a preda programarea structurată și modulară . Pascal a fost derivat dintr-o propunere făcută de N. Wirth (și refuzată) pentru evoluția limbajului ALGOL. Acesta combină construcțiile de bază ale programării structurate (as-as, repeat-until și counter-loop), capacitatea de a defini propriile tipuri de date, într-un pachet elegant (deservit de un număr mare de tipuri predefinite.: Set, enumerări, interval), care a asigurat succesul durabil ca limbaj de inițiere (înlocuind BASIC). Ulterior, Niklaus Wirth a fost la originea Modula-2 , Modula-3 și Oberon , succesorii lui Pascal.

VS

În același timp, Dennis Ritchie a creat limbajul C la Bell Laboratories , pentru dezvoltarea sistemului Unix . Puterea lui C, care permite indicatorilor să funcționeze la un nivel apropiat de mașină, precum și accesul complet la primitivele sistemului, i-au asigurat un succes care nu a fost niciodată negat de atunci.

Una dintre cauzele succesului limbajului C în comparație cu alte limbaje procedurale din aceeași generație provine din modul său de distribuire: universitățile americane ar putea cumpăra o licență la prețul de 300 de dolari pentru întreaga universitate și toți studenții săi .

Ada

În 1974, Departamentul Apărării al Statelor Unite a căutat un limbaj ale cărui specificații accentuează siguranța execuției, pentru toate nevoile sale viitoare. Alegerea a căzut pe Ada , o limbă creată de Jean Ichbiah la CII-Honeywell Bull , a cărei specificație nu a fost finalizată până în 1983. Limba a suferit mai multe revizuiri, cea mai recentă datând din 2012.

Convorbire scurtă

În anii 1980 , în fața problemelor ridicate de complexitatea crescândă a programelor, a existat o creștere rapidă a interesului pentru programarea orientată pe obiecte . Smalltalk-80 , proiectat inițial de Alan Kay în 1969 , a fost prezentat în 1980 de Centrul de Cercetare Palo Alto al companiei Xerox ( Statele Unite ).

C ++ și obiectivul C

Din conceptele de obiect, Bjarne Stroustrup , cercetător la Bell Labs, a proiectat în 1985 o extensie orientată obiect a C numită C ++ . Între timp, o extensie la C mai puțin ambițioase, dar inspirat de Smalltalk au apărut, Obiectiv C . Succesul obiectivului C, utilizat în special pentru dezvoltarea pe stațiile de lucru NeXT și Mac OS X , a rămas slab în comparație cu C ++.

Perl, Tcl, Python, PHP, Java, JavaScript

În anii 1980 și 1990 , noile limbaje imperative interpretate sau semi-interpretate și-au dat succesul dezvoltării scripturilor pentru pagini web dinamice și aplicații client-server. Aceste categorii includ Perl ( Larry Wall , 1987 ), Tcl (John Ousterhout, 1988 ), Python (Guido van Rossum, 1990 ), PHP (Rasmus Lerdorf, 1994 ), Java ( Sun Microsystems , 1995 ), JavaScript ( Brendan Eich , Netscape Navigator , 1995 ).

Limbaje funcționale și limbaje de programare logică

Limbajele de programare imperative ar trebui să se distingă de alte tipuri de limbaje, limbaje funcționale și limbaje de programare logice . Limbajele funcționale, precum Haskell sau ML , nu sunt secvențe de instrucțiuni și nu se bazează pe ideea de stare globală, ci dimpotrivă tind să se extragă din acest model pentru a se plasa la un nivel mai conceptual (care are fundații în lambda-calcul ). Limbajele de programare logice, cum ar fi Prolog , se concentrează pe ceea ce urmează să fie calculat, nu pe modul în care trebuie efectuat calculul.

Anexe

linkuri externe

<img src="https://fr.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;">