Programski jezici - namena i definicija

 

Računarski sistem se sastoji od hardvera i softvera. Hardver čine delovi računara, a softver programi koje računar izvršava. Računar je mašina bez inteligencije, on izvršava samo ono što mu je zadato i to na način kako mu je zadato. Programom zadajemo računaru način na koji izvršava poslove. Da bismo rešili neki problem korišćenjem računara, moramo računaru precizno opisati sve korake - instrukcije (naredbe) koje on izvršava zadatim redosledom. Skup instrukcija napisan za rešavanje nekog problema naziva se program, a pisanje instrukcija programiranje.

Kratak pregled razvoja programskih jezika

Za komunikaciju između ljudi koriste se jezici. Jezik je sredstvo za predstavljanje i prenošenje informacija. Čovek mora na neki način da saopšti računaru niz instrukcija koje on treba da izvrši. Programski jezik je sredstvo kojim čovek saopštava računaru program. Korišćenjem programskog jezika komuniciraju čovek i računar. Prirodni jezici dopuštaju nejednoznačnost i nepreciznost. Računar može „razumeti“ samo formalni zapis, ne tolerišući ni najmanje nepreciznosti. Zbog toga je došlo do razvoja programskih jezika koji omogućavaju zapis niza instrukcija računaru koje se ne mogu višeznačno protumačiti. Jednoznačnost svake konstrukcije programskog jezika je njegova najbitnija karakteristika. Programski jezik je skup pravila kojim se računaru predstavljaju instrukcije i opisuju podaci.

Programske jezike možemo podeliti po stepenu zavisnosti programskog jezika i računara na:

  • mašinski jezik

  • simbolički jezik

  • jezici višeg nivoa

Mašinski i simbolički jezici su zavisni od računara i njih nazivamo mašinski zavisnim jezicima. Oni su tesno povezani za konkretnu mašinu i uzimaju u obzir specifičnosti arhitekture odgovarajućeg procesora. To su jezici niskog nivoa. Jezici višeg nivoa pripadaju skupini koje nazivamo mašinski nezavisni jezici. Grade se nezavisno od računara na kome će se izvršavati. Oni su sredstvo u kome programer zapisuje svoje ideje ne upuštajući se u detalje arhitekture računara. Mašinski nezavisni jezici su namenjeni primenama u različitim delatnostima i za svaku od tih primena grade se posebne klase programskih jezika visokog nivoa.

Mašinski zavisni jezici

Najjednostavniji programski jezik je interni jezik računara – mašinski jezik. Najvažniji delovi računara izgrađeni su od elektronskih i magnetnih komponenti, koje karakterišu dva stabilna stanja (ima napona – nema napona, teče struja - ne teče struja, severni pol – južni pol). Zbog tehničke realizacija računara u računarima se sve predstavlja pomoću dva simbola 0 i 1, binarnom azbukom. Jedan znak binarne azbuke predstavlja bit (binary digit). Sve informacije u računaru predstavljaju se nizom bitova grupisanim u grupe od 8, 16, 32, 64 bita. Grupa od 8 bitova naziva se bajt (byte).

Mašinski jezik je izgrađen nad binarnom azbukom. Sve operacije i svi podaci predstavljeni su nizom bitova. U zavisnosti od arhitekture računara ti nizovi bitova imaju različita tumačenja i različite su veličine.

Kako se mašinski program sastoji od niza nula i jedinica, i zahteva dobro poznavanje načina rada i arhitekture određenog računara, vrlo je teško programirati na njemu. Programi na prvim računarima bili su zapisani mašinskim jezikom, i to je uslovilo da uzak krug ljudi piše i održava programe. Programiranje na mašinskom jeziku omogućilo bi maksimalno korišćenje mogućnosti računara, ali njegova binarna forma čini mašinski jezik praktično neupotrebljivim za čoveka.

Da bi se premostile teškoće u pisanju programa na mašinskom jeziku, dolazi do razvoja simboličkih jezika. Umesto instrukcija pisanih nizom bitova, uvedene su mnemotehničke skraćenice za operacije i simboličke oznake podataka, npr. naredbom

ADD a, b

vrši se sabiranje podataka a i b. Na taj način se olakšava proces programiranja ali i dalje je zavistan od konkretnog procesora, tj. i dalje je potrebno poznavati tehničke karakteristike konkretnog računara za koji pišemo program.

Da bi se program napisan na simboličkom jeziku izvršavao na računaru, mora se prethodno prevesti na mašinski jezik. Kako svakoj naredbi simboličkog jezika odgovara jedna naredba mašinskog jezika, posao je automatizovan tako što je napisan program koji kao ulaz dobija program napisan u simboličkom jeziku, a kao izlaz odgovarajući program na mašinskom jeziku. Program koji vrši prevođenje iz simboličkog u mašinski jezik naziva se asembler (translator). Zato se simbolički jezik često naziva asemblerski jezik ili kraće asembler. Napomenimo da skup naredbi simboličkog jezika zavisi od arhitekture računara, pa program napisan u simboličkom jeziku za jedan računar ne može se koristiti za računar druge arhitekture, već se mora ponovo pisati. Često za mašinske i simboličke jezike kažemo da su mašinski zavisni jezici. Važno je istaći da pri programiranju na mašinski zavisnim jezicima programer mora vrlo detaljno, u malim koracima opisati rešavanje problema.

Programski jezici višeg nivoa

Da bi se premostile poteškoće u programiranju na asemblerskim jezicima veoma rano počinju da se razvijaju mašinski nezavisni jezici, drugim rečima jezici višeg nivoa. Korišćenjem jezika višeg nivoa opis naredbi i podataka vrši se na način blizak prirodnom (engleskom) jeziku. Ovim jezicima jednoj naredbi odgovara više naredbi simboličkog jezika. Važno je napomenuti da ovi jezici imaju visok stepen nezavisnosti u odnosu na arhitekturu računara i operativni sistem na kojem se izvršavaju.

S obzirom da računar razume samo program napisan na mašinskom jeziku svaki program pisan jezikom višeg nivoa mora se prevesti na mašinski jezik. Na osnovu načina prevođenja i izvršavanja jezike višeg nivoa delimo na kompajlerske i interpreterske jezike. Prvo su nastali kompajlerski jezici Algol, Fortran, Cobol, PL/I... Kod ovih jezika izgrađuju se programi za prevođenje (kompajleri) kojim se ceo program napisan na višem programskom jeziku prevodi u njemu ekvivalentan mašinski program, koji se može izvršavati na računaru. Kod interpreterskih jezika program na višem programskom jeziku se prevodi i izvršava instrukcija po instrukcija. Primeri interpreterskih jezika su Lisp, Prolog, Basic, ...

 

Često se razvoj programskih jezika opisuje kao razvoj po generacijama:

Generacije programskih jezika mogu se definisati kroz četiri hierarhijska nivoa:

  1. Mašinski jezici -Predstavljaju skup mašinskih instrukcija (mašinskih naredbi) kojima se zadaju računaru elementarne operacije, i koje on može direktno raspoznati i izvršiti. Svaka mašinska instrukcija predstavlja binarni KOD koji služi za upravljanje radom računara.
  2. Simbolički mašinski jezici – Drugačije nazvan ASEMBLERSKI JEZIK je jezik blizak mašinskom u kome se označavanje operacija i operanada u mašinskim instrukcijama koriste simbolička imana. Simbolički programi zahtevaju poseban sistemski program ASEMBLER za prevođenje NA MAŠINSKI JEZIK. Da bi zapis programa bio kompaktniji, u simboličke mašinske jezike uvode se MAKRO-NAREDBE sibmolička imena za grupe naredbi koje se često sreću u programima i predstavljaju funkcionalne celine, pa se zato nazivaju MAKROASEMBLERSKI JEZICI. Asemblerski i makroasemblerski jezici nazivaju se još i mašinski orijentisani programski jezici ili programski jezici niskog nivoa.
  3. Proceduralni programski jezici (viši programski jezici) -predstavljaju jezike nezavisne od mašine. Način pisanja je blizak načinu ljudskog izražavanja, a napor pri programiranju je znatno manji. Zadavanje postupka rešavanja zadatka sastoji se u opisu korak po korak kako program treba da se izvršava. Tu spadaju Pascal, C, Fortran, BASIC, Cobol. Pascal, Fortran i BASIC namenjeni su za naučno-tehničke primene, C je namenjen za sistemsko programiranje, Cobol zaposlovne primene. Oni se dele u dve grupe:
    1. algoritamski programski jezici namenjeni za opis algoritma široke klase problema,
    2. Problemski orijentisani jezici ili specijalni programski jezici koji raspolažu sredstvima posebno karakterističnim i pogodnim za određene oblasti primene.
  4. Neproceduralni programski jezici (programski jezici vrlo visokog nivoa) – omogućavaju pisanje programa na znatno većem nivou apstrakcije, težeći ka funkcionalnim ili opisnim formulacijama postupka rešavanja problema. Neproceduralni jezici specifikuju šta treba uraditi, umesto kako to treba uraditi, zbog čega se nazivaju i jezici vrlo visokog nivoa ili aplikativni jezici. Najznačajniji iz ove grupe jezika su objektno orijentisani (objektni) programski jezici. Osnovni pojmovi u ovim jezicima su objekat, klasa, primerak(član), poruka i metod.
    1. Objekat predstavlja opis ili model predmeta, pojave ili ideje iz realnog sveta.
    2. Klasa je opis skupa objekata koji imaju određene zajedničke atribute, strukturu i ponašanje.
    3. Primerak (en. instance) ili član je objekat koji pripada nekoj klasi.
    4. Metod predstavlja funkciju ili proceduru definisanu u klasi kojoj objekat pripada
    5. Poruka predstavlja poziv određenog metoda. Objekat odgovara na poruku izvršavanjem odgovarajućeg metoda.

Dok se kod proceduralnih jezika program može posmatrati kao skup potprograma (procedura i funkcija) kojima se prosleđuju podaci za obradu, kod objektnih jezika program se razvija ka skup objekata koji deluju jedni  na druge slanjem poruka.

...

 Da se podsetimo:

Programski jezik je veštački jezik koji nam omogućava zadavanje instrukcija računaru na njemu razumljiv način.

Skup instrukcija koju zadajemo računaru pomoću programskog jezika je računarski program.

*uvod u tematiku koju ćemo raditi na sledećem času:

Sintaksa i semantika

Da bismo formirali programski jezik, odnosno njegove konstrukcije, treba da postoji skup pravila na osnovu kojih je to moguće. Taj skup pravila naziva se sintaksa programskog jezika. Primenom sintaksnih pravila utvrđujemo da li je određena konstrukcija pravilna.

Kao što su kod prirodnog jezika slova, reči i rečenice, tako su kod programskog jezika simboli, leksemi i izrazi.
Sintaksne greške su: pogrešno otkucana reč, spojene dve reči i sl.

Za razliku od sintakse koja se odnosi na izgled konstrukcija određenog programskog jezika, semantika određuje značenje konstrukcija, odnosno programa u celini.
Semantičke greške su logičkog tipa i tiču se razumevanja toga kako program funkcioniše.


 

Elementi bilo kojeg programskog jezika su sintaksa, semantika i pragmatika.

  • Sintaksa je „pravopis“. Ona nam kaže kako nešto napisati.
  • Semantika je „značenje“ onoga što je napisano.
  • Pragmatika je kako se koristi programski jezik, odnosno kako napraviti dobar program.

ili, kako su to ispričali profesori na Fakultetu vašem predavaču:

I prirodni i veštacki jezici imaju tri komponente:

sintaksu: Sintaksa se odnosi na načine na koji pojedinačni simboli mogu da kreiraju ispravne rečenice jezika (ili programe). Sintaksa definise formalne relacije izmedju elemenata jezika, time pružajući strukturne opise različitih izraza koji čine ispravne niske jezika. Sintaksa se bavi samo formom i strukturom simbola jezika bez bilo kakvih razmatranja u vezi sa njihovim značenjem.

semantiku: Semantika pridružuje značenje sintaksno ispravnim niskama jezika. Za prirodne jezike, ovo znači povezivanje rečenica sa nekim specifičnim objektima, mislima i osećanjima. Za programske jezike, semantika opisuje ponašanje računara tokom izvršavanja programa napisanog na nekom jeziku. Ovo ponasanje moze se opisati relacijama izmedju ulaza i izlaza programa ili korak-po-korak objašnjenjem kako će se program izvršavati na stvarnoj ili apstraktnoj masini.

pragmatiku: Pragmatika se odnosi na one aspekte jezika koji uključuje korisnike jezika i psiholoske i sociološke aspekte kao sto su korisnost, opseg primena, i efekti na korisnike. Za programske jezike, pragmatika uključuje pitanja kao sto su lakoća programiranja, efkasnost u primenama i metodologija programiranja. Pragmatika je ključni predmet interesovanja onih koji dizajniraju i implementiraju programske jezike, uglavnom pisci kompajlera.

Last modified: Friday, 30 September 2022, 5:25 PM