PROGRAMSKE PARADIGME

R smer

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

  • imperativno programiranje - istorijski razvoj, osnovne karakteristike i mogućnosti različitih imperativnih jezika
  • objektno-orijentisano programiranje - osnovni koncepti objektno orijentisanog programiranja
  • funkcionalno programiranje - teorijske osnove (lambda račun), programski jezici Haskell i Python
  • logičko programiranje - teorijske osnove (logika prvog reda), programski jezik Prolog
  • programiranje ograničenja, programski jezici Prolog i Python
U okviru studija postoje i drugi kursevi koji se bave bliskim temama.

Predmetni nastavnik:

Asistent:

Obavezni predmet

  • 5 ESPB bodova
  • 2 časa predavanja
  • 2 časa vežbi

Ispitne obaveze: (100 poena):

  • praktični deo - zadaci: 55 poena
  • usmeni deo - teorija: 45 poena
Na praktični deo ispita dolazi celo gradivo: 5 zadataka, trajanje 2.5 sata.
Pragovi na zadacima:
  • 40% od ukupnog broja poena na zadacima
  • najmanje 30% od ukupnog broja poena koje nose zadaci iz funkcionalnog dela
  • najmanje 30% od ukupnog broja poena koje nose zadaci iz logičkog programiranja i programiranja ograničenja
Pragovi na teoriji:

Dodatni poeni (seminarski radovi, aktivnosti na predavanjima 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 2022/23. godini
Praktični i teorijski deo ispita se polažu u istom ispitnom roku. Eventualno je dozvoljeno polagati praktični deo ispita u januaru a teorijski deo ispita u februarskom ispitnom roku (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 Jun 1/2 i 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 februaru a drugog u junu, ili polaganje dela ispita u junu a drugog dela ispita u septembru).

Struktura praktičnog dela ispita

Trajanje praktičnog dela ispita: 2.5 sata. Na praktični deo ispita dolazi celo gradivo, ukupno 5 zadataka:
  • funkcionalno programiranje - 1 zadatak Python i 2 zadatka Haskell
  • logičko programiranje - 1 zadatak Prolog
  • programiranje ograničenja - 1 zadatak Prolog ili Python
Pragovi na zadacima:
  • 40% od ukupnog broja poena na zadacima
  • najmanje 30% od ukupnog broja poena koje nose zadaci iz funkcionalnog dela
  • najmanje 30% od ukupnog broja poena koje nose zadaci iz logičkog programiranja i programiranja ograničenja
Primer ispita možete pogledati ovde: [Zadaci] [Rešenja]
Napomena: na ispitu dolazi celokupno gradivo, primer ispita je samo jedna kombinacija.

Materijali sa časova

Napomena: ovi materijali biće dopunjavani i menjani u toku godine. Predavanja - video materijali

Funkcionalno programiranje.

Slajdovi. Tekst.
Neke karakteristike sistema tipova.
  • Video materijali vezani za drugu temu:
    • 01.01 Uvod u funkcionalno programiranje(37:19)
    • 01.02 Uvod u Haskell (18:09)
    • 01.03.01 Osnovna svojstva funkcionalnih jezika (16:12)
  • Video materijali vezani za treću temu:
    • 01.03.02 Osnovna svojstva funkcionalnih jezika - gradjani prvog reda (23:28)
    • 01.03.03 Osnovna svojstva funkcionalnih jezika - stanje programa i transparentnost referenci (30:01)
  • Video materijali vezani za četvrtu temu:
    • 01.03.04 Osnovna svojstva funkcionalnih jezika - tipovi i polimorfizam (32:31)
    • 01.03.05 Svojstva funkcionalnih jezika (39:20)
  • Video materijali vezani za petu temu:
    • 01.04.01 Lambda račun. Istorijski pregled. Sintaksa. Slobodne i vezane promenljive (23:01)
    • 01.04.02 Lambda račun. Redukcije (26:18)
    • 01.04.03 Lambda račun. Funkcije višeg reda. (9:29)
    • 01.04.04 Lambda račun. Normalni oblik. (19:25)
    Proverite da li ste dobro razumeli lambda račun i izvođenje normalnog oblika:

Logičko programiranje

Slajdovi. Tekst.
  • Video materijali vezani za šestu temu
    • 02.01.01 Logičko programiranje: uvodni primer (7:13)
    • 02.01 Logičko programiranje: uvod (14:52)
    • 02.02.01 Logičko programiranje: Logika. Sintaksa. Supstitucija i unifikacija. (20:43)
    • 02.02.02 Logičko programiranje: Logika. Metod rezolucije (25:17)
  • 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.
  • Video materijali vezani za sedmu temu
    • 02.03.01 Logičko programiranje: Prolog. Uvod. Sintaksa. Programi (23:20)
    • 02.03.02 Prolog. Sistemski predikati i operatori. (19:11)
    • 02.03.03 Prolog. Stablo izvođenja. (18:20)
    • 02.03.04-05 Prolog. Operator sečenja. Svojstva Prologa. (38:18)
    Proverite da li ste dobro razumeli stablo izvođenja:
    • Samostalno uradite narednu vežbu.
    • Proverite svoje rezultate: rešenje.

Programiranje ograničenja

Slajdovi. Tekst.

Domenski specifični jezici

Slajdovi. Tekst.
  • Video materijali vezani za osmu temu
    • 03 Programiranje ograničenja
    • 04 Domenski specifični jezici
    • Primer domenski specifičnog jezika (za one koji žele da znaju više): Osnove jezika P4 za programiranje mrežnog saobraćaja. Slajdovi. Video.

Imperativna paradigma

Slajdovi. Tekst.
  • Video materijali vezani za devetu temu
    • 05 Imperativno programiranje
    Strukturno programiranje:
    • Samostalno uradite narednu vežbu.
    • Proverite svoje rezultate: rešenje.

Objektno orjentisana paradigma

Slajdovi. Tekst.
  • Video materijali vezani za desetu temu
    • 06.01 Objektno orjentisano programiranje. Uvod: nastanak i ideje
    • 06.02 Objektno orjentisano programiranje. Osnovni pojmovi

Organizacija časova

Časovi će biti održavani uživo u terminima vežbi. Video snimci časova vežbi koje su držane prošle godine dostupni su preko servera enastava i mogu biti korisni ukoliko propustite neke vežbe uživo.

Potreban softver

  • Ubuntu virtuelna mašina sa potrebnim softverom za kurs na kojoj user admin ima sudo privilegije, pa je moguće instalirati i dodatni softver: [ link ].
    Da biste pokrenuli virtuelnu mašinu, potrebno je da imate instaliran VirtualBox koji možete preuzeti [ ovde ].
    U paketu sa mašinom se mogu pronaći i slike koje prikazuju osnovne korake podešavanja mašine iz VirtualBox-a.
    Prilikom podizanja sistema može se birati klasičan Ubuntu, ali i Lubuntu (lightweight Linux operating system) koji se koristi na ispitu.
    Studentima je na raspolaganju nalog admin (lozinka: adminstudent).
  • Uputstvo za instalaciju Haskell-a na Windows operativnom sistemu: [ link ].

Materijali sa časova

ČAS 1

ČAS 2

  • Python: Funkcije. Rad sa promenljivim brojem argumenata. Funkcije višeg reda.
    [Zadaci] [Rešenja]

ČAS 3

ČAS 4

ČAS 5

ČAS 6

ČAS 7

ČAS 8

  • Prolog: Uvodni primeri. Rekurzivni predikati.
    [Zadaci] [Rešenja]
  • Napomena za VM: BProlog se pokrece zadavanjem putanje /opt/BProlog/bp iz terminala.
    Uputstvo za instaliranje na ličnom sistemu pogledati u odeljku 3.1.2 u skripti.

ČAS 9

ČAS 10

ČAS 11

ČAS 12

Literatura za predavanja

  • Materijali i slajdovi sa predavanja i vežbi
  • Predavanja - video materijali
  • 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

  • Video materijali na serveru enastava
  • Graham Hutton: "Programming in Haskell"
  • Zvanična stranica programskog jezika Haskell
  • Leon Sterling, Ehud Shapiro: "The Art of Prolog"
  • Predrag Janičić, Mladen Nikolić: "Veštačka inteligencija"

Dodatno

Dodatni materijali sadrže seminarske radove koji su rađeni prethodnih godina iz oblasti kursa.
Upozorenje: seminarski radovi sadrže razne korisne informacije, ali mogu sadržati i greške!
Link na dodatne materijale.

Usmeni ispit u februarskom ispitnom roku

Usmeni ispit u februarskom ispitnom roku biće održan u sredu i petak, 21.02 i 23.02. Molim studente koji planiraju da izađu da se jave nastavniku na mejl sa odabranim terminom do utorka 11:59AM, kada će biti objavljena okvirna satnica odgovaranja.

18. 02. 2024.

Rezultati praktičnog dela ispita u februarskom ispitnom roku

Rezultate ispita možete pogledati ovde. Za uvid u zadatke javite se asistentu mejlom do srede u 12h.
Napomena: Studenti koji nisu ostvarili uslov na nekom delu su označeni crvenom bojom u poslednjoj koloni.

12. 02. 2024.

Prijava za ispit u februarskom roku

Molimo vas da se putem upitnika prijavite ukoliko planirate da polažete ispit u ovom roku. Upitnik možete pronaći [ovde].
Prijava traje do srede u podne. U slučaju da odustanete o tome obavestite asistenta putem mejla.

03.02.2024.

Rezultati praktičnog dela ispita u januarskom ispitnom roku

Rezultate ispita možete pogledati ovde. Za uvid u zadatke javite se asistentu mejlom do četvrtka u 12h.
Napomena: Studenti koji nisu ostvarili uslov na nekom delu su označeni crvenom bojom u poslednjoj koloni.

23. 01. 2024.

Usmeni ispit u januarskom ispitnom roku

Usmeni ispitnom u januarskom ispitnom roku biće održan u petak, 26.01. Molim studente koji planiraju da izađu da se jave nastavniku na mejl do četvrtka 11:59AM, kada će biti objavljena okvirna satnica odgovaranja.

22. 01. 2024.

Početak semestra

Svim studentima želimo uspešan početak školske 2023/24. godine!

09. 10. 2023.

Matematički fakultet, Univerzitet u Beogradu
školska 2023/24. godina