Ce este un nivel de limbaj de programare? Clasamente în profesia de programator sau creștere profesională într-o carieră IT.

31.07.2019 Efecte foto

Conceptul limbajelor de programare

Calculatorul înțelege doar programele prezentate în limbajul mașină (codul mașină). Este foarte dificil să scrii singur un program în codul mașinii, iar această complexitate crește brusc odată cu creșterea dimensiunii programului și a complexității rezolvării problemei dorite. În mod convențional, putem presupune că codul de mașină este acceptabil dacă dimensiunea programului nu depășește câteva zeci de octeți și nu este nevoie de operații manuale de introducere/ieșire a datelor.

Prin urmare, astăzi aproape toate programele sunt create folosind limbaje de programare. Teoretic, un program poate fi scris folosind un limbaj uman obișnuit (natural) - aceasta se numește programare într-un metalimbaj (o abordare similară este de obicei utilizată în etapa de compilare a unui algoritm), dar nu este încă posibilă traducerea automată a unui astfel de program. în codul mașinii din cauza ambiguității ridicate a limbajului natural.

limbaje de programare – limbaje artificiale. Ele diferă de cele naturale printr-un număr limitat de „cuvinte”, ale căror semnificații sunt de înțeles de către traducător și prin reguli foarte stricte pentru scrierea comenzilor (operatori). Totalitatea acestor cerințe formează sintaxa unui limbaj de programare, iar semnificația fiecărei comenzi și alte constructe de limbaj formează semantica acestuia. Încălcarea formularului de notare a programului duce la faptul că traducătorul nu poate înțelege scopul operatorului și afișează un mesaj de eroare de sintaxă. Ortografierea corectă a comenzilor de limbă care nu corespunde algoritmului duce la erori semantice (numite și erori logice sau erori de rulare).

Procesul de găsire a erorilor într-un program se numește testare, procesul de eliminare a erorilor se numește depanare.

Niveluri ale limbajelor de programare

Diferite tipuri de procesoare au seturi diferite comenzi Dacă un limbaj de programare se concentrează pe un anumit tip de procesor și ia în considerare caracteristicile acestuia, atunci se numește limbaj de programare nivel scăzut. ÎN în acest caz,„nivel scăzut” nu înseamnă „rău”. Aceasta înseamnă că operatorii de limbă sunt aproape de codul mașinii și sunt concentrați pe comenzi specifice procesorului.

Limba de cel mai jos nivel este limba asamblator , care reprezintă pur și simplu fiecare instrucțiune de cod de mașină, nu ca numere, ci folosind notații simbolice numite mnemonice. Conversia fără ambiguitate a unei instrucțiuni de mașină într-o instrucțiune de asamblare se numește transliterație. Deoarece seturile de instrucțiuni pentru diferite modele de procesor diferă, o arhitectură specifică de computer are propriul său limbaj de asamblare, iar un program scris în el poate fi utilizat numai în acest mediu.

Pe de o parte, folosind limbaje de nivel scăzut, sunt create programe foarte eficiente și compacte, deoarece dezvoltatorul are acces la toate capabilitățile procesorului. Pe de altă parte, necesită o foarte bună înțelegere a computerului, depanarea aplicațiilor mari este dificilă, iar programul rezultat nu poate fi transferat pe un computer cu un alt tip de procesor.

Astfel de limbaje sunt de obicei folosite pentru a scrie aplicații de sistem mici, drivere de dispozitiv și module de interfață cu echipamente non-standard, atunci când compactitatea, performanța și capacitatea de a accesa direct resursele hardware devin cele mai importante cerințe. În unele zone, de exemplu

grafica pe computer, bibliotecile sunt scrise în limbaj de asamblare care implementează eficient algoritmi de procesare a imaginilor care necesită calcule intensive.

mult mai aproape și mai de înțeles de o persoană decât de un computer. Prin urmare, caracteristicile arhitecturilor specifice computerelor nu sunt luate în considerare în ele programe create la nivel de text sursă sunt ușor de portat pe alte platforme pentru care a fost creat un traducător al acestei limbi. Dezvoltați programe în limbi nivel înalt Cu ajutorul unor comenzi clare și puternice, este mult mai ușor și se fac mult mai puține greșeli la crearea programelor.

Generații de limbaje de programare

Limbajele de programare sunt de obicei împărțite în cinci generații.

Prima generație include limbaje create la începutul anilor 1950, când s-au născut primele computere. A fost primul limbaj de asamblare creat pe principiul „o instrucțiune - o linie”.

A doua generație de limbaje de programare a înflorit la sfârșitul anilor 1950 și începutul anilor 1960. Apoi a fost dezvoltat un asamblator simbolic, în care a apărut conceptul de variabilă. A devenit primul limbaj de programare cu drepturi depline. Datorită apariției sale, viteza de dezvoltare și fiabilitatea programelor a crescut considerabil.

Apariția celei de-a treia generații de limbaje de programare este de obicei atribuită anilor 60. În acest moment, s-au născut limbi universale de nivel înalt, cu ajutorul lor este posibilă rezolvarea problemelor din orice zonă. Asemenea calități ale noilor limbaje precum simplitatea relativă, independența față de un anumit computer și capacitatea de a utiliza structuri sintactice puternice au făcut posibilă creșterea dramatică a productivității programatorilor. Structura acestor limbi, de înțeles de majoritatea utilizatorilor, a atras oamenii să scrie programe mici(de obicei de natură inginerească sau economică) un număr semnificativ de specialişti din domenii non-informatice. Marea majoritate a limbilor acestei generații sunt încă folosite cu succes astăzi.

De la începutul anilor 1970 până în prezent, perioada limbilor din a patra generație a continuat.


Aceste limbaje sunt concepute pentru a implementa proiecte mari, pentru a le crește fiabilitatea și viteza de creare. Ele sunt de obicei concentrate pe domenii de aplicare specializate, unde se pot obține rezultate bune folosind limbaje nu universale, ci orientate spre probleme, care operează cu concepte specifice unui domeniu îngust. De regulă, operatorii puternici sunt încorporați în aceste limbi, permițând unei singure linii să descrie funcționalitatea care ar necesita mii de linii pentru implementarea în limbi mai tinere cod sursă.

Nașterea limbilor din generația a cincea a avut loc la mijlocul anilor 1990. Acestea includ și sisteme crearea automată programe de aplicație folosind instrumente de dezvoltare vizuală, fără cunoștințe de programare. Ideea principală din spatele acestor limbaje este capacitatea de a genera automat textul rezultat în limbaje de programare universale (care apoi trebuie compilate). Instrucțiunile sunt introduse în computer în cea mai vizuală formă, folosind metode care sunt cele mai convenabile pentru o persoană care nu este familiarizată cu programarea.

Limbaje de programare la nivel înalt

Fortran(Fortran). Este primul limbaj compilat, creat de Jim Backus în anii 1950. Programatorii care au dezvoltat programe exclusiv în limbaj de asamblare și-au exprimat îndoieli serioase cu privire la posibilitatea de înaltă performanță

limbaj activ de nivel înalt, prin urmare principalul criteriu în dezvoltarea compilatoarelor Fortran a fost eficiența codului executabil.

Deși Fortran a fost pionier pentru o serie de concepte de programare importante, ușurința de a scrie programe a fost sacrificată în detrimentul capacității de a produce cod eficient de mașină. Cu toate acestea, un număr mare de biblioteci au fost create pentru acest limbaj, variind de la complexe statistice până la pachete de control prin satelit. Prin urmare, Fortran continuă să fie utilizat în mod activ în multe organizații, iar acum se lucrează la următorul standard Fortran F2k. Există o versiune standard a Fortran - HPF (High Performance Fortran) pentru supercalculatoare paralele cu procesoare multiple.

Cobol(Cobol). Este un limbaj compilat pentru rezolvarea problemelor de afaceri din domeniul economic, dezvoltat la începutul anilor 1960. Are multă „vorbire” - declarațiile sale arată uneori ca fraze obișnuite în engleză. În Kobol, foarte instrumente puternice lucrul cu cantități mari de date stocate pe diverse medii externe. Au fost create o mulțime de aplicații în acest limbaj, care sunt încă utilizate activ și astăzi.

Algol(ALGOL). Un limbaj compilat creat în 1960. A fost destinat să înlocuiască Fortran, dar datorită structurii sale mai complexe nu a fost utilizat pe scară largă. În 1968, a fost creată versiunea ALGOL 68, care, în posibilitățile sale, este încă înaintea multor limbaje de programare astăzi, dar din cauza lipsei unui calculatoare eficiente Nu a fost posibil să se creeze compilatoare bune pentru acesta în timp util.

Pascal(Pascal). Limbajul Pascal, creat la sfârșitul anilor 1970 de către fondatorul multor idei de programare modernă, Niklaus Wirth, amintește în multe privințe de Algol, dar a înăsprit o serie de cerințe pentru structura programului și are capabilități care îi permit să fie utilizat cu succes la crearea unor proiecte mari.

De bază(DE BAZĂ). Există atât compilatoare, cât și interpreți pentru această limbă, iar în ceea ce privește popularitatea este pe primul loc în lume. A fost creată în anii 1960 ca limbă educațională și este foarte ușor de învățat.

C (Si). Acest limbaj a fost creat la Laboratorul Bell și inițial nu a fost considerat un limbaj de masă. S-a planificat înlocuirea limbajului de asamblare pentru a putea crea programe la fel de eficiente și compacte și, în același timp, să nu depindă de un anumit tip de procesor.

C este similar cu Pascal în multe privințe și are facilități suplimentare pentru a lucra direct cu memoria (indicatoare).În anii 1970, multe programe de aplicații și de sistem și o serie de sisteme de operare cunoscute (Unix) au fost scrise în acest limbaj.

C++(C++). C++ este o extensie orientată pe obiecte a limbajului C creată de Bjarne Stroustrup în 1980. Multe noi capabilități puternice, care a făcut posibilă creșterea dramatică a productivității programatorilor, a fost suprapusă unei anumite naturi de nivel scăzut moștenit din limbajul C, drept urmare crearea unor programe complexe și de încredere a necesitat un nivel ridicat de pregătire profesională din partea dezvoltatorilor.

Java(Java, Java). Acest limbaj a fost creat de Sun la începutul anilor 1990 pe baza C++. Este conceput pentru a simplifica dezvoltarea aplicațiilor bazate pe C++, eliminând toate caracteristicile de nivel scăzut din acesta. Dar caracteristica principala Acest limbaj este compilat nu în codul de mașină, ci în codul de octet independent de platformă (fiecare comandă ocupă un octet). Acest bytecode poate fi executat folosind un interpret - JVM (Java Virtual Machine), ale cărui versiuni sunt create astăzi pentru toate platformele.

Datorită disponibilității multor mașini Java, programele Java pot fi portabile nu numai la nivel de text sursă, ci și la nivel de bytecode binar, astfel încât limbajul Java este astăzi pe locul al doilea ca popularitate în lume, după BASIC.

O atenție deosebită în dezvoltarea acestui limbaj este acordată două domenii: suport pentru toate tipurile de dispozitive mobileși microcalculatoare încorporate în aparatele de uz casnic (tehnologia Jini), precum și crearea de module software independente de platformă, capabile să ruleze pe servere la nivel global și rețele locale cu diverse sisteme de operare (tehnologia Java Beans). Până acum, principalul dezavantaj al acestui limbaj este performanța sa scăzută.

Nivelurile limbajelor de programare.

Curs 9. Limbaje de programare.

Întrebări de securitate

1. Ce este un algoritm?

2. Ce este un executor de algoritm?

3. Care sunt principalele proprietăți ale algoritmilor?

4. În ce formă se scriu algoritmii?

5. Ce este metoda graficaînregistrările algoritmului?

6. Ce este pseudocodul?

7. Ce sunt de bază structuri algoritmice?

8. Ce cicluri se numesc iterative?

9. Cum este diferit? metoda programaticaînregistrări ale algoritmilor de la alții?

În prezent, există câteva sute de limbaje de programare utilizate efectiv în lume. Fiecare are propriul său domeniu de aplicare.

Orice algoritm, după cum știm, este o succesiune de instrucțiuni, în urma cărora puteți trece de la datele inițiale la rezultat într-un număr finit de pași. În funcție de gradul de detaliu al instrucțiunilor, nivelul limbajului de programare este de obicei determinat - cu cât mai puține detalii, cu atât nivelul limbajului este mai mare.

Pe baza acestui criteriu putem distinge nivelurile următoare limbaje de programare:

  • maşină;
  • orientat pe mașină (asambleri);
  • independent de mașină (limbi de nivel înalt).

Limbaje mașină și limbaje orientate către mașină- acestea sunt limbi nivel scăzut, care necesită specificarea detaliilor fine ale procesului de prelucrare a datelor. Limbi nivel înalt imita limbajele naturale folosind unele cuvinte vorbite și simboluri matematice comune. Aceste limbi sunt mai prietenoase cu oamenii.

Limbile de nivel înalt sunt împărțite în:

  • procedural (algoritmic)(Basic, Pascal, C etc.), care sunt destinate unei descrieri clare a algoritmilor; pentru a rezolva o problemă, limbajele procedurale necesită ca procedura de rezolvare a acesteia să fie scrisă explicit într-o formă sau alta;
  • logic(Prolog, Lisp etc.), care sunt axate nu pe dezvoltarea unui algoritm pentru rezolvarea unei probleme, ci pe o descriere sistematică și formalizată a problemei astfel încât soluția să decurgă din descrierea compilată;
  • orientat pe obiecte(Obiect Pascal, C++, Java etc.), care se bazează pe conceptul de obiect care combină date și acțiuni asupra noastră. Un program într-un limbaj orientat pe obiecte, care rezolvă o anumită problemă, descrie în esență o parte a lumii legată de această problemă. Descrierea realității sub forma unui sistem de obiecte care interacționează este mai naturală decât sub forma unor proceduri care interacționează.

9.2. Care sunt avantajele și dezavantajele limbajelor de mașină?



Fiecare computer are propriul limbaj de mașină, adică propriul set de instrucțiuni de mașină, care diferă prin numărul de adrese din comandă, scopul informațiilor specificate în adrese, setul de operațiuni pe care le poate efectua mașina etc. .

Când programează în limbajul mașinii, programatorul poate controla fiecare instrucțiune și fiecare celulă de memorie și poate folosi toate capacitățile operațiunilor disponibile ale mașinii.

Dar procesul de scriere a unui program în limbaj mașină este foarte intensivă în muncăŞi plictisitor. Programul se dovedește greoi, greu de văzut, greu de depanat, schimbat și dezvoltat.

Prin urmare, în cazul în care trebuie să aveți program eficient, ținând cont de specificul unui anumit computer în măsura maximă, în loc de limbaje de mașină, sunt utilizate limbaje strâns legate de mașină (asambleri).

9.3. Care sunt avantajele limbajelor algoritmice față de limbajele mașini?

Principalele avantaje sunt:

  • Alfabetul limbajului algoritmic este mult mai larg decât alfabetul limbajului mașină, ceea ce crește semnificativ claritatea textului programului;
  • setul de operații permise pentru utilizare nu depinde de setul de operații ale mașinii, ci se alege din motive de comoditate în formularea algoritmilor de rezolvare a problemelor unei anumite clase;
  • formatul de propoziție este destul de flexibil și convenabil de utilizat, ceea ce vă permite să specificați o etapă destul de semnificativă a procesării datelor folosind o singură propoziție;
  • operațiile necesare sunt specificate folosind notații matematice general acceptate;
  • datelor în limbaje algoritmice li se atribuie nume individuale alese de programator;
  • o limbă poate oferi o gamă semnificativ mai largă de tipuri de date în comparație cu setul de tipuri de date ale mașinii.

Astfel, limbajele algoritmice sunt în mare măsură independent de mașină. Ele ușurează munca programatorului și sporesc fiabilitatea programelor create.

9.4. Ce componente formează limbaj algoritmic?

Un limbaj algoritmic este un sistem de notație pentru scrierea formală a algoritmilor peste cantități. Un limbaj algoritmic face posibilă compunerea de programe - adică algoritmi care pot fi executați de o mașină și scriși în limbaje speciale de programare. Putem spune că un limbaj algoritmic este un sistem de notații și concepte inerente într-o formă sau alta oricărui limbaj de programare.

Un limbaj algoritmic (ca orice alt limbaj) este format din cele trei componente ale sale : alfabet, sintaxă și semantică.

Alfabetul este fix pentru a acestei limbi set de simboluri de bază, aceste. „litere ale alfabetului” din care trebuie să fie compus orice text în limba respectivă - nu sunt permise alte caractere în text.

Sintaxă - acestea sunt regulile de construire a frazelor, permițându-vă să determinați dacă o anumită frază este scrisă corect sau incorect. Mai precis, sintaxa unei limbi este un set de reguli care stabilesc ce combinații de simboluri constituie propoziții semnificative în limba respectivă.

Semantică defineste sens semantic propoziții de limbă. Fiind un sistem de reguli pentru interpretarea constructelor individuale ale limbajului, semantica stabilește ce secvențe de acțiuni sunt descrise de anumite fraze ale limbajului și, în cele din urmă, ce algoritm este definit de un text dat într-un limbaj algoritmic.

9.5. Ce concepte folosesc limbajele algoritmice?

Fiecare concept al unui limbaj algoritmic implică o anumită unitate sintactică (construcție) și proprietățile obiectelor programului sau procesării datelor definite de aceasta.

Conceptul de limbaj este definit în interacțiunea regulilor sintactice și semantice. Regulile sintactice arată cum se formează un anumit concept din alte concepte și litere ale alfabetului, iar regulile semantice determină proprietăți acest concept

Conceptele de bază în limbajele algoritmice sunt de obicei următoarele.

1. Nume(identificatori) - folosit pentru a desemna obiecte de program(variabile, matrice, funcții etc.).

2. Operațiuni. Tipuri de operatii:

· aritmetică operații + , - , * , / etc. ;

· logic operațiuni și, sau, nu;

· operațiuni relaţie < , > , <= , >= , = , <> ;

· operare cuplaje(în caz contrar, „atașări”, „concatenări”) de valori de caractere între ele pentru a forma un șir lung; este reprezentată de semnul „+”.

3. Date - cantitățile procesate de program. Există trei tipuri principale de date: constante, variabile și tablouri.

  • constante- acestea sunt date care sunt înregistrate în textul programului și nu se modifică în timpul executării acestuia.

Exemple de constante:

    • numeric 7.5 , 12 ;
    • logic da(adevărat) , Nu(minciună);
    • simbolic(conțin exact un caracter) "A" , "+" ;
    • cu litere(conțin un număr arbitrar de caractere) „a0”, „World”, „” (șir gol).
  • Variabile sunt desemnate prin nume și își pot schimba valorile în timpul execuției programului. Sunt variabile întreg, real, logic, caracter și literal.
  • Matrice- secvențe de elemente de același tip, al căror număr este fix și cărora li se atribuie un singur nume. Poziția unui element într-o matrice este determinată în mod unic de indicii săi (unul, în cazul unui tablou unidimensional, sau mai mulți, dacă tabloul este multidimensional). Uneori sunt numite tablouri mesele.

4. Expresii – au scopul de a efectua calculele necesare, constau din constante, variabile, indicatori de funcție (de exemplu, exp(x)), unite prin semne de operație.

Expresiile sunt scrise sub formă secvențe liniare de caractere(fără indice și caractere superscript, fracții „cu mai multe etaje” etc.), ceea ce vă permite să le introduceți în computer prin apăsarea secvențială a tastelor corespunzătoare de la tastatură.

Există expresii aritmetică, logică și șir.

  • Expresii aritmetice sunt folosite pentru a determina o singură valoare numerică. De exemplu, (1+sin(x))/2. Valoarea acestei expresii la x=0 este 0,5, iar la x=p/2 este una.
  • Expresii booleene descrie unele condiții care pot fi sau nu îndeplinite. Deci o expresie booleană poate lua doar două valori - "adevărat" sau " minciună" (Da sau Nu). Luați în considerare ca exemplu expresia logică x*x + y*y< r*r , определяющее принадлежность точки с координатами (x, y) внутренней области круга радиусом r c центром в начале координат. При x=1, y=1, r=2 значение этого выражения - "adevărat", iar pentru x=2, y=2, r=1 - "minciună".
  • Expresii șir (literale) ale căror valori sunt texte. Expresiile șir pot include literal și constante de șir, variabile literale și șir, funcții literale separate prin semne de concatenare. De exemplu, A + B înseamnă adăugarea șirului B la sfârșitul șirului A. Dacă A = "tufa"și B = "verde", atunci valoarea expresiei A + B este "tufa verde"

5. Operatori(echipe). Un operator este cel mai mare și mai semnificativ concept al unei limbi: fiecare operator este o expresie completă a limbii și definește o etapă complet finalizată a procesării datelor.

  • Printre operatori se numără:
  • cuvinte cheie;
  • date;

expresii etc. Operatorii sunt împărțiți în executabili și neexecutabili. Neexecutabil instrucțiunile au scopul de a descrie datele și structura programului și executabil - pentru a efectua diverse acțiuni (de exemplu, operator de atribuire, operatori de intrare și de ieșire, operator condițional

, operatori de buclă, operator de procedură etc.).

Întrebări de securitate:

1. Cum sunt împărțite limbajele de programare?

2. Cum diferă limbile orientate către mașină de limbajele de nivel înalt?

3. Cum sunt împărțite limbile de nivel înalt? Dați exemple.

4. Care sunt avantajele și dezavantajele limbajelor de mașină?

5. Care sunt avantajele limbajelor algoritmice față de limbajele mașină?

6. Care este alfabetul unei limbi?

7. Ce componente alcătuiesc un limbaj algoritmic?

8. Ce concepte sunt folosite în limbajul algoritmic?

9. Ce tipuri de operații există?

10. Dați exemple de constante.

11. Ce sunt variabilele? Dați exemple.

12. Definiți matrice.

13. Ce este o expresie? Care sunt expresiile?

Găsi

Clasificarea limbajelor de programare În zori era computerului codul mașinii era singura cale

comunicarea dintre o persoană și un computer. Marea realizare a creatorilor de limbaje de programare a fost că au reușit să facă computerul însuși să funcționeze ca traducător din aceste limbaje în codul mașinii.

Limbajele de programare existente pot fi împărțite în două grupe: procedurale și non-procedurale (vezi Fig. 4.1).

Programele procedurale (sau algoritmice) sunt un sistem de instrucțiuni pentru rezolvarea unei probleme specifice. Rolul calculatorului se reduce la implementarea mecanică a acestor instrucțiuni.

Limbile procedurale sunt împărțite în limbi de nivel scăzut și de nivel înalt. procesoarele au seturi de instrucțiuni diferite. Dacă un limbaj de programare este axat pe un anumit tip de procesor și ia în considerare caracteristicile acestuia, atunci este numit limbaj de programare de nivel scăzut.
Aceasta înseamnă că operatorii de limbă sunt aproape de codul mașinii și sunt concentrați pe comenzi specifice procesorului.

Orez. 4.1. Clasificarea generală a limbajelor de programare

Limbajele de nivel scăzut (orientate către mașină) vă permit să creați programe din codul mașinii, de obicei în formă hexazecimală. Este greu de lucrat cu ele, dar programele create cu ajutorul lor de către un programator înalt calificat ocupă mai puțin spațiu de memorie și rulează mai repede. Aceste limbi fac mai ușor de dezvoltat programe de sistem, drivere (programe pentru controlul dispozitivelor computerizate), alte tipuri de programe.

Un limbaj de nivel scăzut (orientat către mașină) este Asamblator, care reprezintă pur și simplu fiecare instrucțiune de cod de mașină, nu ca numere, ci folosind notații simbolice numite
mnemonice.

Limbajele de nivel scăzut creează programe foarte eficiente și compacte, deoarece dezvoltatorul are acces la toate capacitățile procesorului.

Limbaje de programare la nivel înalt mult mai aproape și mai de înțeles de o persoană decât de un computer. Caracteristicile arhitecturilor specifice computerelor nu sunt luate în considerare în ele, prin urmare programele create la nivel de text sursă sunt ușor de portat pe alte platforme pentru care a fost creat un traducător al acestui limbaj. Este mult mai ușor să dezvoltați programe în limbaje de nivel înalt folosind comenzi clare și puternice și sunt mult mai puține greșeli făcute la crearea programelor.

Principalul avantaj al limbajelor algoritmice de nivel înalt este capacitatea de a descrie programe de rezolvare a problemelor într-o formă cât mai convenabilă pentru percepția umană. Dar, deoarece fiecare familie de calculatoare are propriul său limbaj intern specific (mașină) și poate executa doar acele comenzi care sunt scrise în această limbă, atunci pentru traducere programe sursă sunt folosite programe speciale de traducător în limbajul mașinii.

Munca tuturor traducătorilor se bazează pe unul dintre cele două principii: interpretarea sau compilarea.

Interpretare implică traducerea instrucțiune cu instrucțiune și execuția ulterioară a instrucțiunii traduse a programului sursă. În acest sens, pot fi remarcate două dezavantaje ale metodei de interpretare: în primul rând, programul de interpretare trebuie să fie în memoria computerului pe parcursul întregului proces de execuție a programului original, adică să ocupe o anumită cantitate de memorie; în al doilea rând, procesul de traducere a aceluiași operator se repetă de câte ori trebuie executată această comandă în program, ceea ce reduce drastic performanța programului.

În ciuda acestor neajunsuri, traducători-interpreți au devenit destul de răspândite, deoarece sunt convenabile pentru dezvoltarea și depanarea programelor sursă.

La compilare procesele de traducere și execuție sunt separate în timp: în primul rând, programul sursă este tradus complet în limbajul mașinii (după care prezența unui traducător în RAM devine inutil), iar apoi programul tradus poate fi executat în mod repetat. În consecință, pentru același program, traducerea folosind metoda de compilare oferă mai mult performante ridicate sistem de calcul la reducerea RAM-ului necesar.

Complexitatea mare în dezvoltarea unui compilator în comparație cu un interpret din aceeași limbă se explică prin faptul că compilarea unui program include două acțiuni: analiza, adică determinarea corectitudinii programului sursă în conformitate cu regulile de construire a constructelor de limbaj ale intrării. limbaj și sinteză - generarea unui program echivalent în coduri de mașină. Difuzarea folosind metoda de compilare necesită „vizionarea” repetată a programului difuzat, de exemplu. traducători-compilatori sunt multi-pass: la prima trecere, se verifică corectitudinea sintaxei constructelor de limbaj ale operatorilor individuali independent unul de celălalt, la următoarea trecere, corectitudinea relațiilor sintactice dintre operatori etc.

Programul obținut ca urmare a traducerii folosind metoda de compilare este numit modul obiect, care este un program echivalent în codul mașinii, dar nu „legat” la anumite adrese RAM. Prin urmare, înainte de execuție, modulul obiect trebuie procesat de un program special sistem de operare(folosind editorul de linkuri – Link) și convertit în modul de încărcare.

Alături de traducătorii-interpreți și traducătorii-compilatorii discutați mai sus, în practică se folosesc și traducătorii interpret-compilatoare, care combină avantajele ambelor principii de traducere: în etapa de dezvoltare și depanare a programelor, traducătorul funcționează în modul interpret, iar după finalizarea procesului de depanare, programul sursă este retradus într-un modul obiect (adică, folosind metoda de compilare). ). Acest lucru vă permite să simplificați și să accelerați semnificativ procesul de compilare și depanare a programelor și datorită primirii ulterioare modul obiect asigura o executie mai eficienta a programului.

Clasic programare procedurală necesită programator descriere detaliată cum se rezolvă problema, adică formularea algoritmului și notația sa specială. În acest caz, proprietățile așteptate ale rezultatului nu sunt de obicei indicate. Conceptele de bază ale limbilor acestor grupuri sunt operator și date.
În abordarea procedurală, operatorii sunt combinați în grupuri - proceduri. Programarea structurată în ansamblu nu depășește această direcție, doar remediază unele trucuri utile
tehnologii de programare.

O direcție fundamental diferită în programare este asociată cu metodologiile (numite uneori „paradigme”) ale programării non-procedurale. Acestea includ programarea orientată pe obiecte și declarativă. Un limbaj orientat pe obiecte creează un mediu sub forma multor obiecte independente. Fiecare obiect se comportă similar calculator separat, ele pot fi folosite pentru a rezolva probleme ca „cutii negre”, fără a se adânci în mecanismele interne ale funcționării lor. Din limbi programarea obiectelor, popular printre profesioniști, ar trebui să fie numit în primul rând C++ pentru o gamă mai largă de programatori, sunt preferate medii precum Delphi și Visual Basic;



Când folosește un limbaj declarativ, programatorul specifică structurile de informații inițiale, relațiile dintre ele și ce proprietăți ar trebui să aibă rezultatul. În același timp, programatorul nu construiește o procedură pentru obținerea acestuia („algoritm”) (conform cu cel puţin, ideal). Aceste limbi nu au conceptul de „operator” („comandă”). Limbile declarative pot fi împărțite în două familii - logice (un reprezentant tipic este Prolog) și funcționale (Lisp).

Să caracterizăm cele mai cunoscute limbaje de programare.

1.Fortran(Formula TRANslating system – sistem de traducere a formulelor); cel mai vechi limbaj care este încă folosit activ în rezolvarea problemelor de orientare matematică. Este un limbaj clasic pentru programarea pe calculator a problemelor de matematică și inginerie.

2.DE BAZĂ(Codul de instrucțiuni simbolice universale pentru începători - un cod de instrucțiuni simbolice universale pentru începători, în ciuda multor deficiențe și a abundenței de versiuni slab compatibile, este cel mai popular în ceea ce privește numărul de utilizatori.

3.ALGOL(ALGOrithmic Language - limbaj algoritmic); a jucat un rol important în teorie, dar acum nu este folosit aproape niciodată pentru programare practică.

4.PL/1(PL/1 Programming Language - primul limbaj de programare); limbaj polivalent; acum aproape niciodată folosit.

5.Pascal(Pascal – numit după omul de știință Blaise Pascal); extrem de popular atât atunci când învață programare, cât și printre profesioniști. Creat la începutul anilor '70 de omul de știință elvețian Niklaus Wirth. Limbajul Pascal a fost dezvoltat inițial ca un limbaj educațional și, într-adevăr, acum este unul dintre principalele limbaje pentru predarea programării în școli și universități. Cu toate acestea, calitățile sale generale s-au dovedit a fi atât de înalte încât programatorii profesioniști îl folosesc de bunăvoie. Succesul nu mai puțin impresionant, inclusiv financiar, a fost obținut de Philip Kahn, francezul care a dezvoltat sistemul Turbo Pascal. Esența ideii sale a fost de a combina etapele succesive ale procesării programului - compilare, editare link-uri, depanare și diagnosticare a erorilor - într-o singură interfață. Versiunile Turbo Pascal au umplut aproape totul institutii de invatamant, centre de programare și firme private. Au fost create mai multe limbi mai puternice pe baza limbajului Pascal (Modula, Ada, Delphi).

6.COBOL(Common Business Oriented Language - un limbaj orientat spre afaceri generale); a căzut în mare parte din uz. A fost conceput ca limba principală pentru prelucrare în masă date din zonele de management
și afaceri.

7.ADA;este limba câștigătoare (mai 1979) a competiției lingvistice universale a Pentagonului din 1975. Dezvoltatorii sunt un grup de oameni de știință condus de Jean Ikhbia. Limba câștigătoare a fost numită ADA, în onoarea Augustei Ada Lovelace. Limba ADA este un descendent direct al limbii
Pascal. Acest limbaj este destinat creării și întreținerii pe termen lung (mulți ani) a marii sisteme software, permite procesarea paralelă, controlul procesului în timp real și multe altele, ceea ce este dificil sau imposibil de realizat folosind limbaje mai simple.

8.Si(C – „si”); utilizat pe scară largă în crearea de software de sistem. A lăsat o urmă mare programare modernă(prima versiune - 1972), este foarte popular printre dezvoltatorii de sisteme software (inclusiv sisteme de operare). C combină atât caracteristicile unui limbaj de nivel înalt, cât și ale unui limbaj orientat pe mașină, permițând programatorului accesul la toate resursele mașinii, pe care limbaje precum BASIC și Pascal nu le oferă.

9.C++(C++); o extensie orientată pe obiecte a limbajului C creată de Bjarne Stroustrup în 1980. Multe caracteristici noi puternice care au crescut dramatic productivitatea programatorului au fost suprapuse unei anumite naturi de nivel scăzut moștenit din limbajul C.

10.Delphi(Delphi); limbaj de programare „vizual” orientat pe obiecte; V în acest moment extrem de popular. Creat pe baza limbajului Pascal de specialiștii Borland, limbajul Delphi, având puterea și flexibilitatea limbajelor C și C++, le depășește prin comoditatea și simplitatea interfeței atunci când se dezvoltă aplicații care oferă interacțiune cu baze de date și suport pentru diverse tipuri de muncă în interior rețele corporativeși internetul.

11.Java(Java); Un limbaj de programare orientat pe obiecte independent de platformă, care este extrem de eficient pentru crearea de pagini web interactive. Acest limbaj a fost creat de Sun la începutul anilor 90 pe baza SI++. Este conceput pentru a simplifica dezvoltarea aplicațiilor bazate pe C++, eliminând toate caracteristicile de nivel scăzut din acesta.

12.Lisp(Lisp) este un limbaj de programare funcțional. Este axat pe o structură de date sub forma unei liste și vă permite să organizați procesarea eficientă a unor volume mari de informații text.

13.Prolog(Programare în LOGIC – programare logica). Scopul principal al limbajului este dezvoltarea programe inteligenteși sisteme. Prolog este un limbaj de programare creat special pentru lucrul cu baze de cunoștințe bazate pe fapte și reguli (unul dintre elementele sistemelor inteligenţă artificială). Limbajul implementează un mecanism de backtracking pentru a efectua un lanț înapoi de raționament, în care anumite inferențe sau concluzii sunt presupuse a fi adevărate, iar apoi aceste ipoteze sunt verificate cu o bază de cunoștințe care conține fapte și reguli de inferență.
Dacă ipoteza nu este confirmată, se face o returnare și se face o nouă ipoteză. Limbajul se bazează pe model matematic teoria calculului predicatului.

Limbaje de programare pentru internet:

1. HTML. Un limbaj binecunoscut pentru pregătirea documentelor. Este foarte simplu și conține comenzi de bază pentru formatarea textului, adăugarea de imagini, setarea fonturilor și culorilor, organizarea legăturilor și a tabelelor.

2. PERL. A fost conceput ca un mijloc de procesare eficientă a marilor fișiere text, generând rapoarte text și gestionând sarcini.
Perl este semnificativ mai puternic decât limbaje precum C. Include multe funcții utilizate frecvent pentru lucrul cu șiruri de caractere, matrice, gestionarea procesoarelor și lucrul cu informații de sistem.

3. Tcl/Tk. Acest limbaj este axat pe automatizarea proceselor de rutină și constă din comenzi puternice. Este independent de sistem și încă vă permite să creați programe cu o interfață grafică.

4. VRML. Creat pentru a organiza interfețe virtuale tridimensionale pe Internet. Vă permite să descrieți forma text diverse scene tridimensionale, lumini și umbre, texturi.

Alegerea unui limbaj de programare depinde de mulți factori: scopul, ușurința în scrierea programelor sursă, eficiența programelor obiect rezultate etc. Varietatea problemelor rezolvate de un calculator determină varietatea limbajelor de programare.

Întrebări de securitate

1. Ce sunt sistemele de programare și cărei clase de programe aparțin?

2. Ce este inclus în sistemele de programare?

3. În ce limbaj de programare au fost create primele programe?

4. În ce limbi sunt împărțite limbile procedurale?

5. Descrieți limbaje de nivel scăzut.

6. Ce limbă este o limbă de nivel scăzut?

7. Avantajele limbajelor de nivel scăzut.

8. Descrieți limbaje de nivel înalt.

9. Avantajele limbilor de nivel înalt.

10. Dați exemple de limbaje de nivel înalt.

11. Pentru ce sunt destinați traducătorii?

12. Cum diferă un compilator de un interpret?

13. Dezavantajele interpretării (ca tip de traducător).

14. Care este procesul de compilare a unui program?

15. Ce acțiuni sunt efectuate în timpul compilării?

16. Cum diferă un modul de încărcare de un modul obiect?

17. Cum diferă programarea procedurală de programarea non-procedurală?

18. Ce tipuri de programare sunt non-procedurale?
programare?

19. Caracteristici ale limbajelor declarative.

20. Descrieți pe scurt limbajele de programare: Fortran, BASIC, Pascal, Cobol.

21. Descrieți pe scurt limbajele de programare: Ada, C, C++, Delphi, Java.

22. Dați exemple de limbaje orientate pe obiecte.

23. Cărei clase de limbi aparține limbajul Lisp?

24. Cărei clase de limbi aparține Prolog?

Proiectarea limbajelor de programare

Scopul limbajelor de programare

Limbaje de programare

Limbajele de programare sunt concepute pentru a comunica între o persoană și un sistem cu microprocesor. Aceasta conexiune consta in transmiterea de la o persoana catre sistem a unui set de comenzi (instructiuni) care trebuie executate. Se numește un set ordonat de astfel de instrucțiuni program.

Că. limbajele de programare sunt concepute pentru a scrie programe de calculator, care conține instrucțiuni pentru efectuarea unui anumit proces și organizarea controlului oricăror dispozitive.

Limbajele de programare sunt concepute pentru a fi utilizate ASCII, adică disponibilitatea tuturor elementelor grafice caractere ASCII este o condiție necesară și suficientă pentru scrierea oricăror constructe ale limbajului.

Programul în limba este scris în editor de text. Deoarece Procesorul înțelege doar digitalul cod binar, comenzile scrise sunt convertite în cod mașină folosind un program de traducere numit traducător. Există două tipuri de traducători:

1) interpreți - procesează textul direct în timpul scrierii unui program, adică fiecare linie separat;

2) compilatoare - convertiți tot textul programului în același timp.

Programul funcționează prin prelucrarea datelorconstanteŞi variabile. Operatorii determină acțiuni asupra constantelor și variabilelor. Operator este o instruire de limbă.

Un program este o succesiune de afirmații scrise una după alta. În ceea ce privește structura lor, programele pot fi liniare, ciclice și ramificate.

Există diferite niveluri (în raport cu cel natural, uman) ale limbajelor de programare:

Nivel scăzut – limbaje mașină;

Limbajele de asamblare sunt apropiate de limbajele de mașină;

Limbile de nivel înalt sunt aproape de oameni.

Utilizare limbajul mașinii, singurul de înțeles de către microprocesor, provoacă dificultăți asociate cu necesitatea de a înregistra combinații de coduri binar greoaie, greu de memorat, dificultatea de a găsi erori în programul compilat, care este o secvență de coduri digitale și dificultatea de a efectuarea de modificări în programul compilat.

Alături de aceste neajunsuri, limbajul combinații de coduri Are si avantaje. Un program în acest limbaj se dovedește a fi cel mai eficient, ocupă cantitatea minimă de memorie și se execută mai rapid.

Exemplu: Pentru a reprezenta limbajul mașină pe care îl folosim program DOS DEBUG- program special, inclusă în utilitarele MS-DOS, pentru introducerea și executarea pas cu pas a programelor scrise în limbaj mașină sau folosind comenzi de asamblare (Fig. 3.16).

Figura 3.16 – Vizualizarea conținutului celulelor de memorie în fereastra programului DEBUG

Se numesc limbaje de programare care sunt orientate spre comenzile procesorului și iau în considerare caracteristicile acestuia limbi de nivel scăzut. „Nivel scăzut” nu înseamnă rău sau nedezvoltat, înseamnă că operatorii acestui limbaj sunt aproape de nivel hardware, codul mașinii se concentrează pe comenzile unui anumit tip de procesor. Codul mașinii a fost folosit ca limbaj de programare în prima generație de mașini.

Limba de cel mai jos nivel este asamblator. Programul de pe el reprezintă o secvență de comenzi de cod de mașină, dar scrise folosind mnemonici simbolice. Folosind limbaje de nivel scăzut, compact programe optime, deoarece programatorul are acces la toate capabilitățile procesorului. Pe de altă parte, acest lucru necesită o bună înțelegere a structurii computerului, iar utilizarea unui astfel de program pe un computer cu un alt tip de procesor este imposibilă. Astfel de limbaje de programare sunt folosite pentru a scrie mic aplicații de sistem, drivere de dispozitiv, module de andocare cu echipamente non-standard, atunci când compactitatea, performanța și accesul direct la resursele hardware sunt mai importante.

Limbajele de programare care imită limbajele naturale, au comenzi mari și sunt „orientate spre om” sunt numite limbi de nivel înalt. Caracteristicile arhitecturilor specifice computerelor nu sunt luate în considerare. Cu cât nivelul limbajului este mai ridicat, cu atât structurile de date și construcțiile utilizate în program sunt mai apropiate de conceptele naturale ale sarcinii originale.

Astfel, limbajele de programare de nivel înalt sunt concentrate pe rezolvarea conținutului mare probleme aplicate. Este mult mai ușor să dezvoltați programe în limbaje de nivel înalt folosind comenzi clare și puternice, iar numărul de erori făcute în timpul procesului de programare este mult mai mic.

Folosind un limbaj de programare, un program nu este creat gata de execuție, ci doar textul său (se numește cod sursă- cod sursă), descriind algoritmul dezvoltat. Texte sursă programele sunt ușor de portat pe alte platforme pentru care sunt concepute traducători a acestei limbi. Traducătorii (programele care traduc codul sursă în cod mașină) sunt de două tipuri principale: compilatori și interpreți.

Compilator procesează complet întregul text al programului: caută erori de sintaxă, efectuează analize semantice și numai atunci, dacă textul programului respectă întocmai regulile limbii, este tradus (tradus) automat în limbajul mașinii în cod gata de executat (fișier EXE) care poate funcționa rulând sistemul de operare. Poate fi transferat pe alte computere cu un procesor care acceptă codul de mașină corespunzător.

Interpret preia următoarea instrucțiune de limbă din textul programului, îi analizează structura și apoi o execută imediat. După executarea cu succes a comenzii curente, interpretul continuă să analizeze și să execute următoarea. Dacă aceeași instrucțiune este executată de mai multe ori într-un program, interpretul o tratează de fiecare dată ca și cum ar fi fost întâlnită pentru prima dată. Prin urmare, programele care necesită o cantitate mare de calcule repetitive vor rula lent. În plus, pentru a rula programul pe un alt computer, trebuie instalat și un interpret, deoarece fără el programul nu va funcționa.

Principalul dezavantaj al compilatoarelor este laboriositatea traducerii limbajelor de programare axate pe prelucrarea datelor dintr-o structură complexă, necunoscută în prealabil sau care se schimbă dinamic în timpul funcționării programului. Pentru astfel de programe, în codul mașinii sunt introduse verificări și analize suplimentare privind disponibilitatea resurselor sistemului de operare, precum și mijloace pentru capturarea și eliberarea dinamică a memoriei computerului, care este destul de dificil de implementat la nivelul instrucțiunilor mașinii specificate static și pentru unele sarcini este aproape imposibil.

Folosind un interpret, dimpotrivă, pentru a examina conținutul memoriei, este posibil să întrerupeți programul în orice moment, să organizați un dialog cu utilizatorul, să efectuați orice transformări complexe de date și, în același timp, să monitorizați constant software-ul și hardware-ul mediu, care asigură o fiabilitate ridicată a programului. La executarea fiecărei comenzi, interpretul verifică și analizează resursele necesare sistemului de operare, iar dacă apar probleme, emite mesaje de eroare.