PROGRAMSKE PARADIGME

I smer

Kurs programske paradigme je kurs na trećoj godini I smera u okviru kojeg se proučavaju karakteristike osnovnih programskih paradigmi i stilova programiranja:

  • skript programiranje - programski jezik Python
  • programiranje ograničenja - programski jezici Python i Prolog
  • funkcionalno programiranje - teorijske osnove (lambda račun), programski jezici Haskell i Python
  • konkurentno programiranje - programski jezik Scala
  • distribuirano programiranje - programski jezik Scala i biblioteka Scala Spark
  • logičko programiranje - teorijske osnove, programski jezik Prolog
  • komponentno programiranje - programski jezik Python i biblioteka pyQt
U okviru studija postoje i drugi kursevi koji se bave bliskim temama.

Predmetni nastavnik:

Asistenti:

Tekući rezultati

Tekuće rezultate možete da pratite u okviru naredne tabele. U okviru tabele izaberite karticu za odgovarajući ispitni rok.

Obavezni predmet

  • 6 ESPB bodova
  • 2 časa predavanja
  • 3 časa vežbi

Ispitne obaveze: (100 poena):

  • teorija: 45 poena
  • zadaci: 55 poena
Na praktičnom delu ispita se rade i zadaci i teorija. Na zadacima dolazi celo gradivo: 4 zadataka, trajanje 120 minuta.
Zadaci će biti iz sledećih oblasti:
  1. Funkcionalno programiranje, Haskell, najmanje jedan zadatak u svakom ispitnom roku, oko 50% poena
  2. Konkurentno programiranje, Scala, oko 25% poena
  3. Distribuirano programiranje, Scala, oko 25% poena
  4. Komponentno programiranje, Python, oko 25% poena
  5. Programiranje ograničenja, Python/Prolog, oko 25% poena
  6. Logičko programiranje, Prolog, oko 25% poena
Pragovi na zadacima:
  • 40% od ukupnog broja poena koje nose Haskell zadaci.
  • 40% od ukupnog broja poena na svim zadacima.
Trajanje rada teorije je 50 minuta. Pitanja će biti iz svih oblasti sa predavanja. Teoriju možete da polažete i putem testova tokom godine. Biće dva testa, jedan sredinom semestra (najverovatnije u terminu predavanja), drugi krajem semestra (poslednja nedelja nastave). Ti testovi će menjati teoriju na ispitu, nisu obavezni, ne poništavaju se ako se padne praktični deo i mogu da se iskoriste u bilo kojem ispitnom roku.
Pragovi na teoriji:
  • 40% od ukupnog broja poena na teoriji.
    • Minimum 30% na pitanjima koja se odnose na funkcionalno programiranje
    • Minimum 20% na pitanjima koja se odnose na konkurentno programiranje
    • Minimum 10% na pitanjima koja se odnose na logičko programiranje

Dodatni poeni (seminarski radovi, aktivnosti na predavanjima, domaći zadaci i slično) koji su skupljeni u toku godine važe do poslednjeg ispitnog roka za dati kurs. Dodatni poeni mogu se koristiti samo za povećanje ocene, ne i za polaganje ispita. Dakle, neophodno je da imate najmanje 51 poen na ispitu da bi na to mogli da se dodaju ovi poeni.

Organizacija ispita u 2025/26. godini

Praktični i teorijski deo ispita se polažu u istom ispitnom roku. Eventualno je dozvoljeno polagati praktični deo ispita u junu 1 a teorijski deo ispita u junu 2 (tačna satnica polaganja će uvek biti dostupna u okviru obaveštenja na strani kursa). U tom slučaju, neophodno je da prijavite ispit u oba roka. Ako bude još neki vezani rok sa mogućnošću polaganja ispita u oba roka (npr Septembar 1/2), moguće je da se polaganje praktičnog i teorije na isti način rasporede i u ta dva roka. Podela polaganja ispita na dva nesusedna roka nije dozvoljena (npr, nije dozvoljeno polaganje jednog dela ispita u junu a drugog u septembru). Ukoliko se položi ispit, tj. i praktični i teorija, ocena će biti zavedena u Hipatiji u roku u kojem je položena teorija. Ukoliko se ne položi teorija, potrebno je ponovo da se polaže i praktični deo ispita. Ukoliko polažete praktični deo i teorijski deo ispita u istom roku, teorija se pregleda samo ukoliko položite praktični deo (jer je polaganje praktičnog dela preduslov za teoriju). Neophodno je da prijavite ispit i u roku u kojem polažete praktični deo i u roku u kojem polažete teoriju.

Primer ispita

  • Primer praktičnog dela ispita: link.
  • Napomena: oblasti na ispitu mogu varirati.

Materijali

Sva predavanja su snimljena i dostupna. Link na video materijale.

Linkovi na pisane materijale su dati u nastavku. Možete koristiti i narednu skriptu. Skripta će biti menjana i dopunjavana tokom godine.
  1. Uvod
  2. Funkcionalno programiranje Slajdovi. Tekst.
    Neke karakteristike sistema tipova.
    Proverite da li ste dobro razumeli lambda račun i izvođenje normalnog oblika:
  3. Logičko programiranje
    Slajdovi. Tekst.
    Proverite da li ste dobro razumeli metod rezolucije:
    Metodom rezolucije u logici prvog reda rešiti dva primera koje je definisao Lewis Carroll (sa slajdova 55 (109/194) i 56 (110/194), zaključak "Guinea pigs never really appreciate Beethoven" i zaključak "I always avoid a kangaroo").
    Proverite svoje rezultate: Proverite da li ste dobro razumeli unifikaciju:
    • Samostalno uradite narednu vežbu.
    • Proverite svoje rezultate: rešenje.
  4. Proverite da li ste dobro razumeli stablo izvođenja:
    • Samostalno uradite narednu vežbu.
    • Proverite svoje rezultate: rešenje.
  5. Imperativno programiranje
    Slajdovi. Tekst.
    Proverite da li ste dobro razumeli strukturno programiranje:
    • Samostalno uradite narednu vežbu.
    • Proverite svoje rezultate: rešenje.
  6. Objektno orjentisano programiranje
    Slajdovi. Tekst.
    Interesantna kritika modernog OOP-a i prednosti funkcionalnog programiranja u odnosu na OOP.
  7. Konkurentno programiranje.
    Slajdovi. Tekst. (kompletno gradivo)
    Proverite da li ste dobro razumeli različite vrste paralelizacije:
    • Samostalno uradite narednu vežbu.
    • Proverite svoje rezultate: rešenje.
    Dodatno: Programski jezik Go. Slajdovi.
    Konkurentnost u programskom jeziku Go (Master rad Miloš Mitrović, mentor Milena Vujošević Janičić)
  8. Skript programiranje
    Slajdovi. Tekst.
  9. Domenski specifični jezici
    Slajdovi. Tekst.
  10. Osnovna svojstva programskih jezika
    Slajdovi. Tekst.

Materijali

Svi potrebni materijali za pripremu ispita su dostupni preko narednih linkova.

Za vežbe su dostupni video materijali.
YouTube plejlista (asistent Ivan Ristovic): link.
YouTube plejlista (asistent Milan Cugurovic): link.
Google Drive materijali: link.
GitHub repozitorijum: link.
Automatsko pregledanje ispita: detalji.

ČAS 1

ČAS 2

ČAS 3

ČAS 4

ČAS 5

ČAS 6

ČAS 7

ČAS 8

ČAS 9

ČAS 10

ČAS 11

ČAS 12

Literatura

  • Materijali i slajdovi sa predavanja i vežbi
  • Link na video materijale za predavanja
  • Link na video materijale za vežbe
  • A. Tucker and R. Noonan: "Programming Languages: Principles and Paradigms", McGraw-Hill Science, 2001.
  • R. Sebesta: "Concepts of programming languages", Addison Wesley, (10. ed.), 2012.
  • P. Van Roy, S. Haridi: "Concepts, Techniques, and Models of Computer Programming", MIT Press, 2003.

Literatura za vežbe

Dodatno

  • Link za preuzimanje virtuelne mašine za studente: [link].
    Lozinke su identične nazivima naloga, preporučeno je mašinu pokretati sa 2 CPU i 4GB RAM-a (mašina je testirana i na 1CPU i 2GB RAM-a).

Drugi teorijski test, praktični kolokvijum i odbrane seminarskih radova

Drugi teorijski test biće održan u utorak 9. juna u terminu predavanja. Kao i za prvi test, biće neophodna prijava radi organizacije polaganja po grupama.

Javne odbrane (prezentacije) seminarskih radova biće održane u utorak 16. juna u terminu predavanja.

Drugi praktični kolokvijum biće održan u petak 19. juna u terminu vežbi. Kao i za prvi kolokvijum, biće neophodna prijava radi organizacije polaganja po grupama.

22.05.2026.

Rezultati prvog kolokvijuma

Rezultati prvog kolokvijuma su uneti u tabelu. Poeni su skalirani u odnosu na najbolje urađen rad. Uvid u radove je moguć pretragom indeksa u izveštaju testera koji se nalazi na narednom linku za sve tri grupe.

19. 05. 2026.

Rezultati prvog teorijskog testa

Test je pregledan svim studentima. Poeni su uneti u tabelu. Uvid u radove moguć je u utorak 19. maja u pauzama između predavanja.

15. 05. 2026.

Raspored polaganja za prvi kolokvijum

Raspored polaganja se može naći na narednom linku. Kolokvijum se održava u Jagićevoj, učionice JAG1 i JAG2. Grupa A počinje rad u 11:30, Grupa B u 13:15, dok grupa C počinje rad u 15:00.

Molimo studente da na kolokvijum dođu barem 10 minuta pre početka svoje grupe zbog organizacije i velikog broja prijava.

14. 05. 2026.

Rezultati prvog teorijskog testa

Test je pregledan svim studentima koji su polagali u prvom terminu. Poeni su uneti u tabelu. Uvid u radove moguć je u utorak 12. maja u pauzama između predavanja.

Studentima koji su polagali u drugom terminu radovi će biti pregledani u toku nedelje a uvid u radove biće 19. maja u pauzama između predavanja.

11. 05. 2026.

Prijava za prvi praktični kolokvijum

Prijava za prvi kolokvijum moguća je preko naredne forme . Prijavite se ukoliko planirate da izađete na kolokvijum i odjavite se ukoliko se kasnije predomislite.

Prijava i odjava su mogući do 13. maja u 20h.

06. 05. 2026.

Prvi teorijski test

Na osnovu broja prijavljenih, prvi teorijski test će biti održan u dve grupe u utorak 5. maja. Prva grupa će početi sa radom u 12h, a druga grupa u 13h. Raspored po grupama pogledajte ovde (druga kartica, sa imenom Raspored po grupama).

U terminu u 8h ujutru imaćemo predavnje.

03. 05. 2026.

Obaveštenje o kolokvijumima

U okviru kursa će biti organizovana dva kolokvijuma:
  • Prvi kolokvijum (oblast: Haskell) biće održan 15. maja od 11h u Jagićevoj.
  • Drugi kolokvijum (obuhvata sve preostale teme) biće održan u poslednjoj nedelji nastave.
Kolokvijumi nisu obavezni i imaju funkciju oslobađanja dela ispita, odnosno celog ispita (u slučaju da student izađe na oba kolokvijuma i ostvari odgovarajući rezultat). Izlazak na jedan kolokvijum ne podrazumeva obavezu izlaska na drugi.

Studenti koji izađu na kolokvijum, a ne ostvare bodove, dobijaju negativne poene (-5).

Zbog potreba organizacije, biće otvorena prijava za prvi kolokvijum u toku sledeće nedelje, sa mogućnošću kasnije odjave. Molimo studente da prate obaveštenja na stranici radi blagovremene prijave.

Za sva dodatna pitanja se obratiti nastavniku ili asistentima putem mejla.

29. 04. 2026.

Prijavljivanje za test

Prijava za prvi teorijski test moguća je preko naredne forme. Prijavite se ukoliko planirate da izađete na test i odjavite se ukoliko se kasnije predomislite. Rezultati prijave/odjave dostupni su u narednoj tabeli. Prijava i odjava su mogući do 3. maja u 13h.

Dostupna je nova verzija skripte koja sadrži sve oblasti koje će biti na testu.

Prvi test iz teorije biće održan u utorak 5. maja. Test će se polagati u jednom od dva termina predavanja, dok će u drugom terminu predavanja biti održano predavanje za tu nedelju. Kada će biti termin predavanja a kada testa, dogovorićemo se nakon prijava (kada budem znala broj studenata koji planiraju da izađu na test).

Na testu će biti pitanja iz narednih oblasti:

  1. Programski jezici i paradigme. (Prva glava u skripti)
  2. Dodatne programske paradgime. (Osma glava u skripti)
  3. Funkcionalno programiranje (Četvrta glava u skriti)
  4. Skript programiranje (Šesta glava u skripti)
Test zamenjuje pola ispita. Ko ne izađe na test, polagaće taj deo gradiva na ispitu. Takođe, ko ne izađe na test, može da izađe na drugi test koji će biti održan u poslednjoj nedelji nastave. Položen test može da se iskoristi u bilo kojem ispitnom roku i važi čak i ako padnete praktični deo ispita. S druge strane, položena teorija važi samo u odgovarajućim (vezanim) ispitnim rokovima, a u slučaju pada na praktičnom potrebno je polagati ponovo teoriju.

26. 04. 2026.

Seminarski radovi - repozitorijumi za izradu

Kreirani su timovi i repozitorijumi u okviru GitHub organizacije za sve timove koji su finalizirali temu, i oni mogu početi izradu seminarskog rada. Molimo sve prijavljene timove koji još nisu precizirali svoju temu ili nisu ažurirali prijavu seminarskog rada u Google formi da popune nedostajuće podatke u prijavi kako bismo mogli da kreiramo repozitorijume za izradu.

Podsećamo da je rok za predaju seminarskog rada 31. maj. Za sva pitanja ili probleme, kontaktirati koordinatore za seminarske radove:

26. 04. 2026.

Rezultati mini provere znanja

Rezultati svake mini provere znanja će uvek biti dostupni u tabeli sa rezultatima. U toj tabeli će uvek biti i link ka tabeli sa brojem poena na testu i učesnicima testa. Proverite i ukoliko uočite neke nepravilnosti, javite.

24.04.2026.

Rezultati prve mini provere znanja

Rezultati prve mini provere znanja su dostupni na narednoj adresi. Rezultati su upisani i u tabelu sa rezultatima - proverite i ukoliko uočite neke nepravilnosti, javite.

17.04.2026.

Nadoknada časova vežbi

Nadoknada časova vežbi za grupe 3I1A i 3I2A će se održati, po kalendaru aktivnosti, u subotu 18.04. od 11h u Jagićevoj.

17. 04. 2026.

Seminarski radovi - formiranje teme i pristup organizaciji

Svim studentima koji su se prijavili za izradu seminarskog rada su poslate pozivnice za GitHub organizaciju. Molimo sve prijavljene da prihvate pozivnice kako bismo mogli da kreiramo odgovarajuće timove i repozitorijume na GitHub-u.

Podsećamo da je rok za prijavu prve verzije teme 19. april. Za pomoć oko odabira teme i tehnologija koje će biti pokrivene tokom izrade, kontaktirati koordinatore za seminarske radove:

14. 04. 2026.

Prvi teorijski test

Prvi test iz teorije biće odrzan u utorak 5. maja. Test će se polagati u jednom od dva termina predavanja, dok će u drugom terminu predavanja biti održano predavanje za tu nedelju. Kada će biti termin predavanja a kada testa, dogovorićemo se nakon prijava (kada budem znala broj studenata koji planiraju da izađu na test).

Na testu će biti pitanja iz narednih oblasti:

  1. Programski jezici i paradigme. (Prva glava u skripti)
  2. Dodatne programske paradgime. (Osma glava u skripti)
  3. Funkcionalno programiranje (Četvrta glava u skriti)
  4. Skript programiranje (Šesta glava u skripti)
Test zamenjuje pola ispita. Ko ne izađe na test, polagaće taj deo gradiva na ispitu. Takođe, ko ne izađe na test, može da izađe na drugi test koji će biti održan u poslednjoj nedelji nastave. Položen test može da se iskoristi u bilo kojem ispitnom roku i važi čak i ako padnete praktični deo ispita. S druge strane, položena teorija važi samo u odgovarajućim (vezanim) ispitnim rokovima, a u slučaju pada na praktičnom potrebno je polagati ponovo teoriju.

09. 04. 2026.

Seminarski radovi (opciono)

Ažurirane su informacije za opcione seminarske radove, i mogu se pronaći ovde. Molimo zainteresovane timove da se prijave putem forme do 10. aprila.
Za pomoć oko odabira teme i tehnologija koje će biti pokrivene tokom izrade, kontaktirati koordinatore za seminarske radove:

27. 03. 2026.

Početak semestra

Svim studentima želimo uspešan početak novog semestra!

13. 03. 2026.

Matematički fakultet, Univerzitet u Beogradu
školska 2024/25. godina