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 (tabela će biti naknadno postavljena).

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.
Trajanje rada zadataka je 120 minuta. Zadaci će biti iz sledećih oblasti:
  1. Funkcionalno programiranje, Haskell, oko 50% poena
  2. Konkurentno ili distribuirano programiranje, Scala, oko 25% poena
  3. Logičko programiranje ili programiranje ograničenja, Prolog, oko 25% poena
Trajanje rada teorije je 50 minuta. Pitanja će biti iz sledećih oblasti:
  1. Uvod (oko 3 poena)
  2. Funkcionalno programiranje (oko 15 poena)
  3. Logičko programiranje (oko 10 poena)
  4. Konkurentno programiranje (oko 10 poena)
  5. Skript programiranje (oko 5 poena)
  6. Domenski specifični jezici (oko 3 poena)
Pragovi na zadacima:
  • 40% od ukupnog broja poena na svim zadacima
Pragovi na teoriji:
  • 40% od ukupnog broja poena na teoriji.
Organizacija ispita u 2024/25. godini

Praktični i teorijski deo ispita se mogu polagati u različitim isptinim rokovima. Teorija se pregleda i ocenjuje samo nakon što je položen praktični deo. Dakle, mežete prvo da radite teoriju, ali će teorija biti pregledana tek kada položite praktični deo. Teoriju je moguće polagati i iz dva dela. U prvom delu se radi deo vezan za funkcionalno, skript i domenski specifično programiranje. U drugom delu uvod, konkurentno i logičko programiranje.

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

ČAS 4

ČAS 5

ČAS 6

ČAS 7

ČAS 8

ČAS 9

ČAS 10

ČAS 11

ČAS 12

ČAS 13

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 nove (Februar 2022) 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).
  • Uputstvo za generisanje JAR fajlova za Scalu [ovde]

Biće uvek neophodna prijava ispita putem forme na strani kursa! Molimo Vas da o tome vodite računa jer će organizacija ispita biti veoma zahtevna.

Praktični deo ispita

Ukupan broj poena na praktičnom delu je 55. Na praktičnom delu ispita biće zastupljene naredne oblasti:
  1. Funkcionalno programiranje, Haskell, oko 50% poena
  2. Konkurentno ili distribuirano programiranje, Scala, oko 25% poena
  3. Logičko programiranje ili programiranje ograničenja, Prolog, oko 25% poena
Ukupan prag za polaganje ispita je 40% poena na zadacima, neće biti pragova po pojedinačnim zadacima. Ove godine programski jezik Python neće biti ispitivan na praktičnom delu ispita.

Teorijski deo ispita

Ukupan broj poena na teorijskom delu je 45. Na teoriji će biti pitanja iz narednih oblasti
  1. Uvod, programiranje ograničenja (oko 3 poena)
  2. Funkcionalno programiranje (oko 15 poena)
  3. Logičko programiranje (oko 10 poena)
  4. Konkurentno programiranje (oko 10 poena)
  5. Skript programiranje (oko 5 poena)
  6. Domenski specifični jezici (oko 3 poena)
Ukupan prag za polaganje ispita je 40% poena na teoriji, neće biti pragova po pojedinačnim oblastima.

Praktični i teorijski deo ispita se mogu polagati u različitim isptinim rokovima. Teorija se pregleda i ocenjuje samo nakon što je položen praktični deo i nakon što su polagana oba dela teorije. Dakle, mežete prvo da radite teoriju, ali će teorija biti pregledana tek kada položite praktični deo. Teoriju je moguće polagati i iz dva dela (dva testa). U prvom delu se radi deo vezan za funkcionalno, skript i domenski specifično programiranje. U drugom delu uvod, programiranje ograničenja, konkurentno i logičko programiranje. Ako delite teoriju, podrazumeva se da prvo radite prvi deo pa kasnije drugi.

Teorija se polaže u istom terminu sa praktičnim delom. Dakle, studenti koji izađu na ispit prvo rade praktični pa teoriju (ili obrnuto, zavisi od organizacije ispita i broja prijavljenih studenata - biće uvek jasno navedeno na strani kursa kada se šta radi). Između praktičnog i teorije imate kratku pauzu, 5-10 minuta. Jedan deo teorije se radi oko 20 minuta (dva dela oko 40 minuta).

Na primer, možete da polažete praktični u prvom roku, prvi deo teorije u drugom roku, a drugi deo teorije u četvrtom roku. Rezultate praktičnog ćete dobiti odmah, a rezultate teorije (ukoliko je praktični položen) u četvrtom roku, tj. kada kompletirate polaganje teorije.
Ili, možete da polažete oba dela teorije u prvom roku, i posle praktični u trećem roku. U tom slučaju, dobićete sve rezultate u trećem roku.
Kombinujte kako vam najviše odgovara. Termin polaganja je uvek zvanični termin ispita i neće biti polaganja u drugim danima.

Ukoliko je neko polagao deo teorije prošle godine i želi da to iskoristi, to može da uradi u prva dva ispitna roka. U ta dva roka može da se polaže teorija po starom (dakle teorija koja uključuje sve oblasti i sva tri testa). Potrebno je da se pre ispita javite predmetnom asistentu kako biste dobili odgovarajuće testove. U preostalim rokovoma nije moguće polagati po starom.

23. 07. 2025.

Polaganje ispita u akademskoj 2024/2025

U ovoj godini neće biti projekata, obzirom da su projekti do sada bili dodatna (neobavezna) aktivnost. Za izvođenje projekata neophodni su aktivna nastava, konsultacije i kasnije odbrane, što u ovom trenutku nije moguće organizovati na pravi način.
Ispit će se polagati putem praktičnog i teorijskog dela. Više informacija biće poznato kada bude poznat plan rada u ovoj godini.

08. 03. 2024.

Početak semestra

Svi materijali potrebni za pripremu ispita su dostupni sa kartica za predavanja i vežbe. Po okončanju blokada, nastava će biti organizovana u skladu sa opštim dogovorom sa studentima. Za sva pitanje i dodatne informacije možete poslati mejl.

17. 02. 2025.

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