DIZAJN PROGRAMSKIH JEZIKA

Kurs dizajn programskih jezika je obavezan kurs na trećoj godini R smera. U okviru kursa se proučavaju različite karakteristike programskih jezika i stilova programiranja:

  • Skript programiranje kroz Python
  • Komponentno programiranje kroz PyQt (prethodnih godina rađena biblioteka JavaFX)
  • Konkurentno programiranje i odgovarajući mehanizmi konkurentnog programiranja kroz GO (prethodnih godina rađena Java)
  • Generičko programiranje kroz C++
U okviru studija postoje i drugi kursevi koji se bave bliskim temama.

Predmetni nastavnik:

Asistent:

  • Petar Đorđević

Obavezni predmet

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

Završni ispit (100 poena):

  • teorija: 45 poena
  • zadaci: 55 poena
Napomene: Na prvom delu ispita rade se samo zadaci. Za izlazak na usmeni, student treba da sakupi najmanje 40% na zadacima (22 poena) od čega minimum 30% na C++u i minimum 30% na GO. Na praktičnom delu ispita dolazi celo gradivo i taj deo traje 2.5 sata. Studenti koji ispune ovaj prag, dogovaraju termin sa predmetnim profesorom i polažu teoriju na usmenom delu ispita. Odlaganje usmenog je dozvoljeno samo u spojenim ispitnim rokovima. Ukoliko se polož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. Neophodno je da prijavite ispit i u roku u kojem polažete praktični deo i u roku u kojem polažete teoriju.

Dodatni poeni (seminarski radovi, aktivnosti na vežbama i 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.

Materijali

Link na video materijale.

Materijali će biti dopunjavani tokom semestra.
  • Uvod o kursu i obnavljanje
    • Pogledati video koji se odnosi na Dodatne programske paradigme (43:59)
  • Pogledati video materijale
    • 01.01 Uvod u konkurentno programiranje (20:18)
    • 01.02 Konkurentno programiranje. Potrebna podrska, skalabilnost, portabilnost (15:30)
    • 01.03.01 Konkurentno programiranje. Osnovni koncepti. Zadatak, proces, nit (18:16)
  • Pogledati video materijale
    • 01.03.02 Konkurentno programiranje. Osnovni koncepti. Izbor nivoa konkurentnosti. (28:31)
    • 01.03.03 Konkurentno programiranje. Osnovni koncepti. Komunikacija i sinhronizacija (44:23)
  • Uvod u programski jezik Go
  • Programski jezik Go
  • Pogledati video materijale
    • 01.04 Konkurentno programiranje. Distribuirani sistemi. Definicija. Prednosti. Izazovi. (18:10)
    • 01.04 Konkurentno programiranje. Distribuirani sistemi: podaci, transakcije, izračunavanje, poruke. (25:30)
    • 01.05.01 Konkurentno programiranje. Veza sa programskim jezicima. Java. Scala. Kotlin. Clojure. (24:00)
    • 01.05.02 Konkurentno programiranje. Veza sa programskim jezicima. Erlang, Elixir, Elm (18:57)
    • 01.05.03 Konkurentno programiranje. Veza sa programskim jezicima. Rust, Go (16:49)
  • Generičko programiranje, C++

Tekući rezultati

Tekuće rezultate možete pratiti preko naredne tabele (link će uskoro biti postavljen).

O kursu

  • Uvod: o kursu i obavezama na kursu. Slajdovi.

Programski jezici i programske paradigme - obnavljanje

Konkurentno programiranje

Parametarski polimorfizam

  • Parametarski polimorfizam. Generičko programiranje kroz C++.
    Slajdovi. Tekst.
  • Dimenziona analiza u jeziku C++. Slajdovi

Skript programiranje

Osnovna svojstva programskih jezika

Dodatni materijali

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.

Ispitna pitanja

Ispitna pitanja za školsku 2022/23. godinu mogu se naći ovde.

Organizacija časova

  • Video materijali i propratni kodovi se ažuriraju na nedeljnom nivou.
  • Video materijali biće postavljeni na server enastava petkom za narednu nedelju vežbi (uputstvo je poslato na početku kursa na zvanične alas naloge).
  • U terminu vežbi studenti mogu da postave pitanje u vezi sa odgledanim video materijalom, odnosno, ako je potrebno obnoviti neki deo gradiva, da dođu na konsultacije. Konsultacije najaviti najkasnije u sredu do 12h za tekuću nedelju.
  • Pitanja postaviti putem forme kojoj možete pristupiti [ovde], pri čemu će na njih biti odgovoreno tekuće nedelje u terminu vežbi.

Virtuelna mašina

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

Seminarski radovi

Materijali sa časova

ČAS 1

  • Uvodni čas.

ČAS 2

  • Python: Različiti formati podataka. Datum. Argumenti komandne linije. Sortiranje. Obilazak direktorijuma.
    [Zadaci] [Rešenja]

ČAS 3

  • Python: Komponentno programiranje. PyQt5 biblioteka.
    [Zadaci] [Rešenja]
  • Dodatne primere u PyQt-u možete pogledati [ovde].

ČAS 4

ČAS 5

ČAS 6

ČAS 7

  • Konkurentno programiranje. Sinhronizacija niti. Podela poslova po nitima unapred.
    [Zadaci] [Rešenja]

ČAS 8

  • Konkurentno programiranje. Podela poslova po nitima unapred. Uslovni redovi čekanja.
    [Zadaci] [Rešenja]

ČAS 9

ČAS 10

ČAS 11

ČAS 12

ČAS 13

Ispit

  • Na ispitu dolazi celokupno pređeno gradivo. Ispit traje 2.5 sata i sastoji se od pet zadataka, u okviru stranice obaveze studenata podsetiti se pragova. Primer ispita: [Zadaci]

  • Struktura ispita:
    - Python: jedan zadatak koji obuhvata celo gradivo iz skript i komponentnog programiranja
    - GO: dva zadatka koji obuhvataju celo gradivo iz konkurentnog programiranja
    - C++: dva zadatka koji obuhvataju celo gradivo iz generičkog programiranja

Literatura za predavanja

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

Literatura za vežbe

Spisak programa potrebnih za kurs

  • Python 3.6
  • Python biblioteke: pandas, numpy, matplotlib, PyQt5, python-constraint
  • GO
  • G++
  • Visual Studi Code (preporuka, može se koristiti i neki drugi editor)

Otkazan termin predavanja

Sledeći dvočas predavanja iz Dizajna programskih jezika, 26.03, po dogovoru od ove nedelje, neće biti održan. O nadoknadi ćemo se dogovoriti na sledećim časovima.

20.03.2024.

Nadoknada termina predavanja

Nadoknada dvočasa predavanja iz Dizajna programskih jezika, po dogovoru od utorka, biće 15.02 u 12h u sali 706.

14.02.2024.

Prijava seminarskih radova

Na narednoj adresi možete naći formu koju treba da popunite da biste se prijavili za seminarski rad. Rok je do petka, 15.03.2024. u 23:59h.

08.03.2024.

Otkazan termin predavanja

Sledeći dvočas predavanja iz Dizajna programskih jezika, 27.02, po dogovoru od prethodne nedelje, neće biti održan. O nadoknadi ćemo se dogovoriti na sledećem času 05.03.

25.02.2024.

Matematički fakultet, Univerzitet u Beogradu
školska 2021/22. godina