Sekcije kursa

Uvod u programiranje

Programski jezici

Šta su programski jezici? Ljudi za međusobnu komunikaciju koriste jezik. Čovek mora na neki način da saopšti računaru niz instrukcija koje treba da budu izvršene. Već smo rekli da računar nije baš pametan i ne razume (za sada!) ako mu se čovek obrati na svom maternjem jeziku. Da bi se čovek i računar razumeli izmišljeni su programski jezici. Programski jezik služi  da pre­mo­sti jaz iz­me­đu ra­ču­nar­skog har­dve­ra ko­ji ope­ri­še u ter­mi­ni­ma bi­ta i re­gi­sta­ra i čo­ve­ka ko­ji se iz­ra­ža­va pri­rod­nim je­zi­kom. Računar može “razumeti” samo formalni zapis, pri čemu ne toleriše ni najmanje nepreciznosti. Pre nego što pređemo na podelu programskih jezika, bavićemo se kratko binarnim brojevima. Da li znate šta su binarni brojevi? Ako razumete sledeći vic na dobrom ste putu! “Postoji 10 vrsta ljudi na svetu: Oni koji znaju binarne brojeve i oni koji ih ne znaju…” U slučaju da niste razumeli vic, evo male pomoći: “10” predstavlja binarni zapis dekadnog broja “2″. Ljudi najčešće koriste dekadni brojni sistem, ali računar radi na binarnom. Svaki broj u dekadnom brojnom sistemu može da se predstavi u binarnom sistemu koristeći nule i jedinice. Ovde nećemo objašnjavati algoritam kako se broj iz dekadnog zapisa prebacuje u binarni (a ni obrnuto). Programske jezike možemo podeliti na razne načine, a jedna od podela je u zavisnosti od toga da li su zavisni od računara ili ne, pa ih delimo na:

  • mašinski-zavisne
  • mašinski-nezavisne

Ma­šin­ski‑za­vi­sni pro­gram­ski je­zi­ci zah­te­va­ju od pro­gra­me­ra da po­zna­je kon­struk­ci­o­ne ka­rak­te­ri­sti­ke ra­ču­na­ra za ko­ji pi­še pro­gram. Raz­li­ku­je­mo dva ni­voa ma­šin­ski‑za­vi­snih je­zi­ka:

  1. ma­šin­ski je­zik– jedini jezik koji računar razume! Mašinski jezik je bi­nar­ni je­zik; pro­gram na nje­mu se sa­sto­ji is­klju­či­vo od nu­la i je­di­ni­ca. Pi­sa­nje pro­gra­ma na ma­šin­skom je­zi­ku je mu­ko­tr­pan po­sao i  pod­lo­žan gre­ška­ma. Ta­ko­đe, sva­ki tip ra­ču­na­ra ima svoj ma­šin­ski je­zik ko­ji za­vi­si od nje­go­vih kon­struk­tiv­nih ka­rak­te­ri­sti­ka, pa pro­gra­mer ko­ji po­zna­je je­zik jed­nog ra­ču­na­ra ne mo­že  pro­gra­mi­ra­ti na dru­gom ra­ču­na­ru. 01010000 01110010 01101111 01100111 01110010 01100001 01101101 01101001 01110010 01100001 01101110 01101010 01100101 00100000 01101010 01100101 00100000 01101100 01100001 01101011 01101111 00100001 Da li ste razumeli poslednju rečenicu? Piše “Programiranje je lako!” Ako želite da isprobate da neku Vašu rečenicu prebacite u binarni zapis, možete to da isprobate klikom na sledeći link.
  2. sim­bo­lič­ko‑ma­šin­ski je­zik je na­stao u te­žnji da se pre­va­zi­đu te­ško­će pro­gra­mi­ra­nja na ma­šin­skom je­zi­ku. Umesto instrukcija pisanih nulama i jedinicama, uvedene su mnemotehničke skraćenice za operacije i simboličke oznake podataka, na primer ako želimo da saberemo podatke a i b pisaćemo ADD a, b umesto gomile nula i jedinica. Malo lakše, zar ne? Ali pisanje koda na simbolično-mašinskom jeziku i dalje zavisi od konkretnog procesora, odnosno i dalje je potrebno poznavati tehničke karakteristike konkretnog računara za koji pišemo program. Još jedna bitna stvar: programi pisani na sim­bo­lič­ko‑ma­šin­skom je­zi­ku ZAHTEVAJU pre­vo­đe­nje na ma­šin­ski je­zik da bi ga računar razumeo. Da ponovimo još jednom: jedini jezik koji računari razumeju se sastoji isključivo od nula i jedinica! Pre­vo­di­o­ci sa sim­bo­lič­ko‑ma­šin­skog je­zi­ka na ma­šin­ski je­zik zo­vu se asem­ble­ri. Ali ako mislite da se u 21. veku više ne koriste mašinsko-zavisni jezici grdno se varate! Programi pi­sa­ni na sim­bo­lič­ko‑ma­šin­skom je­zi­ku su, po pra­vi­lu, efi­ka­sni­ji od svo­jih ekvi­va­le­na­ta na dru­gim pro­gram­skim je­zi­ci­ma, pa se iz tog razloga po­je­di­ni de­lo­vi ope­ra­tiv­nih si­ste­ma i da­nas pi­šu na sim­bo­lič­kim je­zi­ci­ma!

Ma­šin­ski‑ne­za­vi­sni pro­gram­ski je­zi­ci omo­gu­ća­va­ju pro­gra­me­ru da za­pi­su­je al­go­rit­me u no­ta­ci­ji ko­ja je bli­ža go­vor­nom je­zi­ku i da ne vo­di ra­ču­na o mno­gim de­ta­lji­ma ve­za­nim za kon­kre­tan ra­ču­nar. Zna­čaj­no me­sto u isto­ri­ji ma­šin­ski‑ne­za­vi­snih pro­gram­skih je­zi­ka za­u­zi­ma pro­gram­ski je­zik FOR­TRAN ko­ji je 1954. go­di­ne raz­vi­jen u ame­rič­koj kom­pa­ni­ji IBM i bio na­me­njen za re­ša­va­nje ma­te­ma­tič­kih pro­ble­ma. Mašinski-nezavisni programski jezici predstavljaju programske jezike višeg nivoa. Za razliku od simboličkih jezika gde jednoj naredbi simboličkog odgovara jedna naredba mašinskog jezika, u jezicima višeg nivoa jednoj naredbi jezika višeg nivoa odgovara više naredbi simboličkog jezika. To znači manje pisanja koda, zar ne? Svaki program napisan na jeziku višeg nivoa mora se prevesti na mašinski jezik, a u zavisnosti od načina prevođenja i izvršavanja, jezike višeg nivoa možemo da podelimo na kompajlerske i interpretatorske jezike. Prvi kompajlerski jezici koji su nastali su na primer Algol, Fortran, Cobol, itd. Ovi jezici zahtevaju programe za prevođenje – kompajlere kojim se CEO program napisan na višem programskom jeziku prevodi u njemu ekvivalentan, mašinski program koji se može izvršiti na računaru. Kod interpretatorskih jezika, program se prevodi i izvršava instrukcija po instrukcija. Primer interpretatorskog programkog jezika je Python.

U ovom kursu se nećemo detaljnije baviti podelama mašinski nezavisnih programih jezika, ali ćemo spomenuti objektno-orijentisane jezike. Objekt­no ori­jen­ti­sa­no pro­gra­mi­ra­nje se po­ja­vi­lo osam­de­se­tih go­di­na kao no­va me­to­do­lo­gi­ja iz­ra­de ve­li­kih pro­gram­skih si­ste­ma. Usa­vr­ša­va­nje ra­ču­nar­skog har­dve­ra, gde se sa sva­kom no­vom ge­ne­ra­ci­jom br­zi­na pro­ce­so­ra dra­stič­no po­ve­ća­va, dik­ti­ra stal­no uslo­žnja­va­nje soft­ver­skih si­ste­ma. Dotadašnje tehnike pro­gra­mi­ra­nja ni­su bile do­volj­no moć­ne da obez­be­de pro­jek­to­va­nje vr­lo slo­že­nih soft­ver­skih si­ste­ma. Kao rezultat toga nastaje objekt­no ori­jen­ti­sa­no pro­gra­mi­ra­nje u čijem centru su objek­ti. Objek­ti su “in­te­li­gent­ni” po­da­ci ko­ji mo­gu da se na­la­ze u raz­li­či­tim sta­nji­ma. Ta sta­nja mo­gu da se pro­me­ne pri­me­nom od­re­đe­nih me­to­da. Skup srod­nih obje­ka­ta či­ni jed­nu kla­su.Tako nastaju  objekt­no ori­jen­ti­sa­ni je­zi­ci kao što je C#, Ja­va,… U objektno-orijentisanom programiranju cilj programera je da sakupi podatke i akcije u neku vrstu “kutije sa alatom” koja će se koristiti za brzi razvoj aplikacija.