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, Python, 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.
  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

  • Haskell: Uvod. Tipovi podataka. Klase tipova. Osnovne strukture podataka.
  • Zadaci: [ tekst ] [ rešenja ]

Č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).

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
  2. Komponentno programiranje
  3. Programiranje ograničenja
  4. Funkcionalno programiranje
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