Procenjeno vreme za rad na kursu: 68h 38m
- Učenje: 29h 3m
- Izrada zadataka: 2h
- Izrada testova: 7h 52m
- Komunikacija: 3h 40m
- Vežbanje: 26h 2m

Opis kursa

Kurs Advanced Java Programming bavi se naprednim konceptima programiranja korišćenjem programskog jezika Java. Kurs započinje izučavanjem naprednog objektnog programiranja. Polaznici imaju prilike da se upoznaju sa brojnim naprednim pojmovima Java jezika, kao što su apstraktne klase, interfejsi, anonimne klase, lambda izrazi... Reč je o kompletnom arsenalu specifičnih jezičkih mogućnosti koje omogućavaju pisanje modernih, visoko optimizovanih Java aplikacija. Pored nabrojanih pojmova, uvodni modul kursa obrađuje i pojmove kao što su događaji, refleksija i dizajn šabloni. Drugi deo kursa posvećen je različitim načinima za kreiranje struktura podataka. Tako polaznici imaju prilike da, pored objekata i nizova, poznavanje različitih struktura podataka prošire pojmovima kao što su enumeracije i kolekcije. Uporedo sa kolekcijama, polaznici imaju prilike da se upoznaju i sa generičkim tipovima podataka i načinima za tipsku parametrizaciju. Kako bi se upotpunila priča o kolekcijama, kurs Advanced Java Programming obrađuje i pojam tokova, kao svojevrstan način za lako sprovođenje nekih uobičajenih operacija nad kolekcijama podataka. Kurs Advanced Java Programming obrađuje i napredne pristupe rada sa tekstualnim podacima, pre svih koncept regularnih izraza. Priča o tipovima podataka upotpunjena je i različitim načinima za predstavljanje datuma i vremena u Java programima. Kako bi polaznici bili u mogućnosti da kreiraju aplikacije koje mogu da uvoze i izvoze podatke, kurs Advanced Java Programming obrađuje i različite ulazno/izlazne tokove, kao i pristupe za obavljanje serijalizacije i deserijalizacije i rukovanje fajl sistemom. Ulazno/izlazni tokovi se koriste i u narednom segmentu kursa Advanced Java Programming, u kome se obrađuju pristupi za mrežnu komunikaciju korišćenjem Java programa. Polaznici imaju prilike da nauče kako se kreiraju serveri i klijenti koji preko mreže komuniciraju uz poštovanje TCP, UDP i HTTP protokola. Kurs Advanced Java Programming se završava obradom koncepta niti i višenitnog programiranja. Obrađuju se najznačajnije tehnike koje Java programima omogućavaju da svoju logiku obavljaju u nekoliko nezavisnih niti.

Potrebno predznanje
Podrazumeva se da polaznik ima osnovno predznanje korišćenja kompjutera, prvenstveno obavljanja osnovnih operacija na operativnim sistemu. Podrazumeva se da polaznik poseduje predznanje iz kursa Core Java Programming.

Cilj kursa

Upoznavanje polaznika sa naprednim konceptima Java jezika. Osposobljavanje polaznika za samostalno kreiranje naprednijih Java programa, koji koriste mrežu, poseduju veći broj niti i primenjuju napredne postulate objektno orijentisanog programiranja.

Moduli i jedinice

  1. Napredno objektno programiranje
    1. Objektno orijentisano programiranje u Javi
    2. Apstraktne klase i interfejsi
    3. Klase unutar klasa
    4. Događaji
    5. Refleksija
    6. Dizajn šabloni
  2. Strukture podataka
    1. Enumeracije
    2. Kolekcije
    3. Generički tipovi podataka
    4. Tokovi
  3. Tekst, datumi i vreme
    1. Napredni rad sa tekstom
    2. Datumi i vreme
  4. Rad sa podacima
    1. Ulazno/izlazni tokovi
    2. Serijalizacija
    3. Fajlovi i folderi
  5. Rukovanje mrežom
    1. Uvod u internet mrežne protokole
    2. TCP socket programiranje
    3. Rukovanje HTTP-om
    4. UDP socket programiranje
  6. Niti
    1. Uvod u višenitno programiranje
    2. Rukovanje nitima
    3. Konkurencija i sinhronizacija

Rezime kursa

1. Napredno objektno programiranje

  1. Objektno orijentisano programiranje u Javi
    • Objektno orijentisano programiranje omogućava apstrahovanje modela zasnovanih na pojmovima iz realnog sveta.
    • Klase predstavljaju šablone za izgradnju objekata.
    • Osnovni postulati objektno orijentisanog programiranja su: apstrakcija, enkapsulacija, nasleđivanje i polimorfizam.
    • Apstrakcija omogućava da se složeni entiteti iz realnog sveta modeluju sa nivoom detalja koji odgovara potrebama programske logike.
    • Enkapsulacija se odnosi na postupak objedinjavanja informacija i funkcionalnosti unutar jedne celine – objekta i na kontrolu vidljivosti takvih klasnih članova izvan same klase.
    • Nasleđivanje omogućava kreiranje objekata koji osobine i ponašanja nasleđuju od nekog drugog objekta.
    • Jedna klasa može imati samo jednu roditeljsku klasu.
    • Nasleđivanje se postiže upotrebom ključne reči extends.
    • Pristup objektu roditeljske klase unutar klase koja nasleđuje moguće je obaviti upotrebom ključne reči super.
    • Ukoliko se konstruktor ne definiše, Java izvršno okruženje samostalno kreira podrazumevani konstruktor.
    • Podrazumevani konstruktor nema parametara, a unutar njega se obavlja pozivanje konstruktora roditeljske klase.
    • Polimorfizam se odnosi na višestruko značenje jednog istog pojma, što se često koristi za kreiranje više metoda istog naziva, ali nešto drugačije logike.
    • Overriding predstavlja redefinisanje metoda u nasleđenim klasama.
    • Overloading predstavlja preklapanje metoda u okviru jedne iste klase.
  2. Apstraktne klase i interfejsi
    • Apstraktna klasa služi kao obrazac, odnosno smernica koja diktira šta sve treba da sadrže klase koje je nasleđuju.
    • Apstraktne klase se ne mogu instancirati.
    • Deklarisanje klase kao apstraktne postiže se upotrebom ključne reči abstract.
    • Apstraktne klase mogu da sadrže apstraktne metode.
    • Apstraktne metode su metode koje imaju samo potpis i koje moraju da budu implementirane u nasleđenim klasama.
    • U objektno orijentisanom programiranju, interfejs je dogovor o tome kakva ponašanja jedna klasa mora pružiti.
    • Interfejsi primarno sadrže samo javne, apstraktne metode, ali pored njih mogu imati i konkretne javne i privatne metode i konstante.
    • Interfejs se definiše ključnom rečju interface.
    • Da bi neka klasa implementirala interfejs, koristi se ključna reč implements.
    • Klasa koja implementira interfejs mora da obezbedi implementaciju svih apstraktnih metoda koje postoje u interfejsu.
    • Interfejsi su referentni tipovi.
  3. Klase unutar klasa
    • Klase koje su deklarisane samostalno, izvan bilo koje druge klase, drugačije se nazivaju top-level klase (top-level classes).
    • U programskom jeziku Java moguće je napraviti klasu koja se nalazi u okviru druge klase; takve klase se nazivaju ugnežđene klase.
    • Statička ugnežđena klasa predstavlja člana klase u kojoj je definisana, i ona može biti instancirana bez prethodnog instanciranja matične klase; ovakve klase nemaju pristup objektnim članovima klase u kojoj su definisane.
    • Nestatičke ugnežđene klase predstavljaju objektne članove, odnosno postoje samo u okviru objekata klasa u kojima se nalaze; ovakve klase imaju pristup objektnim članovima klase u kojoj se nalaze.
    • Lokalne klase su klase koje su definisane u okviru bloka; najčešće se ove klase nalaze u okviru tela metoda.
    • Anonimne klase su klase bez imena; one omogućavaju da deklarisanje i instanciranje bude obavljeno u okviru jedne naredbe (izraza).
    • Lambda izrazi predstavljaju kompaktnu sintaksu za kreiranje instance klasa koje implementiraju funkcionalni interfejs, odnosno interfejs sa jednom apstraktnom metodom.
    • Referenca na metodu omogućava da se lambda izraz dodatno optimizuje kada implementacija metode iz funkcionalnog interfejsa podrazumeva isključivo poziv neke druge metode.
  4. Događaji
    • Programiranje koje podrazumeva praćenje i obradu događaja u toku izvršavanja aplikacije naziva se event-based.
    • Rukovanje događajima podrazumeva sledeće činioce: objekat događaja, generator događaja i slušaoce događaja.
    • Generator događaja je objekat koji proizvodi događaj.
    • Objekat događaja sadrži informacije o događaju - referencu na objekat unutar koga je došlo do događaja i razne druge, opcione podatke.
    • Slušaoci događaja su objekti koji bivaju obavešteni o pojavi događaja.
    • Proces kojim neki objekat postaje slušalac često se naziva pretplata na događaj, a sami slušaoci - pretplatnici.
    • Osnovna klasa kojom se predstavljaju događaji u Javi je EventObject.
    • Slušaoci događaja najčešće se predstavljaju korišćenjem interfejsa, koji moraju da implementiraju sve klase čiji objekti treba da budu obavešteni o pojavi nekog događaja.
    • Slušaoci se unutar klase generatora čuvaju unutar niza ili kolekcije, pri čemu klasa generatora poseduje i metode za dodavanje i uklanjanje slušalaca.
    • Emitovanje događaja podrazumeva prolazak kroz niz (listu) slušalaca i pozivanje metode koja je definisana interfejsom slušaoca.
  5. Refleksija
    • Mogućnost programskog jezika da u toku izvršavanja programa manipuliše arhitekturom klasa naziva se refleksija.
    • Korišćenjem refleksije moguće je obaviti instanciranje tipova i pozivanje metoda.
    • U programskom jeziku Java, funkcionalnost refleksije nalazi se u paketu java.lang.reflect.
    • Klasa Class se koristi za reprezentovanje konkretnih klasa.
    • Klasa Field predstavlja polja klase, klasa Method predstavlja metode, dok klasa Parameter predstavlja parametre metoda.
    • U svetu refleksije konstruktori se predstavljaju klasom Constructor, a referenca na sve konstruktore jedne klase dobija se pozivanjem metode getConstructors().
    • Refleksija je veoma korisna kada je podatke iz jednog oblika potrebno pretvoriti u neki drugi, prilikom manipulacije podacima baze podataka ili korišćenja JSON formata.
  6. Dizajn šabloni
    • Softverski dizajn šabloni opisuju rešenja veoma čestih problema do koji dolazi prilikom dizajniranja unutrašnje strukture softverskih proizvoda.
    • Dizajn šabloni nisu gotova rešenja, već samo generalizovana, koncizna uputstva koja se mogu koristiti za konkretnu implementaciju rešenja.
    • Svi softverski dizajn šabloni se dele na tri grupe: na šablone kreiranja, strukturne šablone i šablone ponašanja.
    • Singleton je dizajn šablon koji propisuje postojanje samo jedne instance nekog tipa.
    • Observer omogućava da se stanje jednog objekta emituje nekim drugim objektima koji su zainteresovani za promene unutrašnjeg stanja takvog objekta.
    • Factory šablon se koristi kada je potrebno kreirati posredničku klasu koja će služiti za centralizovano kreiranje objekata.
    • Decorator je strukturni šablon koji omogućava izmenu funkcionalnosti postojeće klase, pri čemu Decorator klasa nije u direktnoj hijerarhijskoj vezi sa klasom koju dekoriše.
    • JavaBeans je konvencija koja definiše klase koje implementiraju interfejs Serializable i poseduju javni konstruktor bez parametara i privatna polja sa odgovarajućim get i set.