1 / 24

Skriptni jezici i Java

Skriptni jezici i Java. -podrška za Javascript. Autor: Zvonko Ivić Mentor: mr. sc. Marko Čupić. Zagreb, svibanj 2007. Sadržaj prezentacije:. Općenito o skriptama i Javascriptu Prednosti i nedostatci upotrebe skripti u Javi

pelham
Download Presentation

Skriptni jezici i Java

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Skriptni jezici i Java -podrška za Javascript Autor: Zvonko Ivić Mentor: mr. sc. Marko Čupić Zagreb, svibanj 2007

  2. Sadržaj prezentacije: • Općenito o skriptama i Javascriptu • Prednosti i nedostatci upotrebe skripti u Javi • Pregled razreda, sučelja i metoda za rad sa skriptama u Javi, popraćeno primjerima • Opis demo aplikacije Kalkulatora • Zaključak

  3. u Javu SE 6.0 ugrađena podrška za skriptne jezike • sadrži skriptni stroj za Javascript: Rhino 1.6R2 • postoje mnogi drugi skriptni strojevi za druge skriptne jezike, te oni se mogu naći i skinuti s stranice:https://scripting.dev.java.net/ • JSR-223 specifikacija nam daje podršku za rad sa skriptnim jezicima preko standardnog sučelja, a detalji specifikacije se mogu naći na: http://www.jcp.org/en/jsr/detail?id=223

  4. Zašto uopće koristiti skriptne jezike? • skriptni jezici nam daju mogućnost da riješimo gotovo svaki problem koji je programskim jezicima moguće riješiti, te to možemo učiniti na jednostavniji i brži način nego što bi to mogli učiniti u objektno-orijentiranim jezicima poput Jave • također, skriptni jezici se u većini slučajeva interpretiraju (iako se mogu i prevoditi), te time omogućuje naizmjenično pisanje i testiranje linije po linije koda, čime se dobiva na dinamičnosti programiranja • no postoji i veliki nedostatak: brzina izvođenje skriptnih jezika je, u usporedbi s recimo Javom, izrazito mala • postoji iznimno velik broj skriptnih jezika, a neki poznatiji među njima su: Javascript, Python, Ruby, itd.

  5. Javascript • za početak, objašnjenje česte pogreške zbog neinformiranosti: Javascript ≠ Java • skriptni jezik kojemu je pravo ime ustvari ECMAScript, dok je JavaScript ime implementacije ECMAScript standarda od Netscape-a i Mozille • najčešće se koristi prilikom izrade Internet stranica, no postoji primjena i na drugim područjima

  6. Prednosti upotrebe skripti u Javi: • rad sa skriptnim jezicima je izuzetno lagan i fleksibilan • skripte se ne moraju prevoditi prije izvođenje, nego se interpretiraju, a kako postoji ciklička povezanost između pisanja koda i testiranja, na taj način se povećava produktivnost programera • skriptni jezici imaju općenito sažetiju sintaksu algoritama od sintakse tih istih algoritama u objektno-orijentiranim jezicima poput Jave • proširenje osnovne funkcionalnosti koda u Javi sa kodom napisanim u skripti, čime se dobiva na modularnosti i promijenjivosti koda • skriptni jezici su jednostavniji za korištenje od Jave, što omogućuje korisnicima s manjim tehničkim znanjem da prošire osnovnu funkcionalnost nekog kompleksnog koda u Javi koristeći jednostavne skripte koje su sami napisali, te time program prilagođavaju vlastitim potrebama

  7. Nedostatak upotrebe skripti u Javi: • skriptni jezici su mnogo puta sporiji od čistog Java koda, te zbog toga kod kombinacije skriptnih jezika i Jave dolazi do velikog smanjenja brzine izvođenja; kasnije u prezentaciji će biti prikazana usporedba testa brzine izvođenje

  8. Razredi i sučelja za rad sa skriptama u Javi

  9. ScriptEngineManager • razred je odgovoran za otkrivanje raspoloživih skriptnih strojeva kao i za pristupanje primjercima tih strojeva ScriptEngineManager manager = new ScriptEngineManager() ScriptEngineFactory • Sadrži informacije o svim podržanim skriptnim strojevima List<ScriptEngineFactory> list = manager.getEngineFactories(); Metode: getEngineName() getEngineVersion() getLanguageName() getLanguageVersion() getNames() Primjer0.java

  10. ScriptEngine • sučelje čijim metodama pristupamo samom skriptnom stroju ScriptEngine engine = manager.getEngineByName("js"); Metode: put(String key, Object value) -postavlja vrijednost varijable u skripti get(Ştring key) –vraća vrijednost varijable u skripti eval(String script) –obrađuje skriptu predanu kao String eval(Reader script) –obrađuje skriptu predanu kao Reader objekt

  11. moguća pojava dvije vrste iznimki prilikom izvođenja metode eval(): • ScriptException -ako se dogodi greška u skripti • NullPointerException -ako se kao argument metodi preda null • metoda eval() vraća rezultat zadnje izvedene naredbe u skripti Primjer1.java Primjer2.java

  12. Bindings • daje nam mogućnost da radimo s varijablama u skripti po principu ključ/vrijednost Bindings bindings = engine.createBindings(); Metode: put(String key, Object value) -postavlja vrijednost varijable u skripti get(Ştring key) –vraća vrijednost varijable u skripti • metoda eval() sad izgleda: • eval(String script, Bindings bindings) • eval(Reader reader, Bindings biddings) Primjer3.java

  13. unutar skripte možemo koristiti bilo koji razred ili paket koji postoji u Javi, samo ga na početku koda skripte moramo uvesti naredbom importPackage(ime paketa) • nakon što smo to napravili možemo unutar skripte koristiti razred i njegove metoda na isti način kako bi to činili da radimo u Javi • treba imati na umu da u skriptama, za razliku od Jave, ne postoji paket java.lang, tako da taj paket prvo moramo uvesti da bi ga unutar skripte mogli koristiti, dok u Javi za tim nema potrebe Primjer4.java Primjer5.java

  14. Compilable • sučelje čijim metodama radimo sa skriptnim strojem koji dopušta prevođenje skripti Compilable compilable = (Compilable) engine; Metode: compile(String script) –prevodi skriptu predanu kao String i stvara novi objekt tipa CompiledScript compile(Reader script) –prevodi skriptu predanu kao Reader objekt i stvara novi objekt tipa CompiledScript

  15. CompiledScript • razred koji predstavlja prevedenu skriptu CompiledScript script = compilable.compile(String script) CompiledScript script = compilable.compile(Reader script) Metode: eval() –skripta se izvodi s otprije postavljenim vrijednostima eval(Bindings bindings) –skripta se izvodi s vrijednostima postavljenim u primjerak objekta tipa Bindings

  16. Svaki od programa u tablici će biti izveden 10 000 puta, te se rezultati izvođenja nalaze u tablici dolje:

  17. Program Primjer6c.java nam pokazuje jedan praktičan i pametan način kako možemo čuvati kolekciju prevedenih skripti u mapama tako da se one ne moraju svaki puta ispočetka prevoditi. Primjer6c.java

  18. Invocable • sučelje koje nam svojim koji nam omogućuje pozivanje iz Jave funkcija koje se nalaze unutar skripte Invocable invocable = (Invocable) engine; Metode: invokeFunction(String name, Object ... args) -metoda koja poziva funkciju u skripti pod imenom koje se predaje kao prvi argument, s argumentima koji se predaju kao daljnji argumenti ovoj metodi -ova metoda će vratiti vrijednost koju vraća funkcija u skripti Primjer7.java

  19. Demo aplikacija: Kalkulator • na ovoj demo aplikaciji biti će prikazan primjer kada je korisno koristiti kombinaciju Jave i skiptnih jezika • aplikacija predstavlja kalkulator u obrnutoj poljskoj notaciji (postfix notaciji) koji osim standardnih tipka ima i dvije posebne tipke: F1 i F2 • to su tipke čije funkcije možemo programirati pomoću skripti • skripte programiramo pomoću editora koji se otvara zajedno s kalkulatorom, te u kojega upisujemo našu funkciju, te ju tada spremamo u skriptu odgovarajućeg imena koja se nalazi u tekućem direktoriju aplikacije

  20. Sučelje kalkulatora

  21. za potrebe ove prezentacije, imamo pripremljene dvije skripte: prvu koja računa sinus (kao argument prima radijane), te drugu koja računa zadani Fibonacchijev broj (ako je zadan decimalni broj, u obzir se uzima samo njegov cjelobrojni dio) • dio koda u Javi koji se tiče rada sa skriptama u ovoj aplikaciji je identičan onom iz prijašnjih primjera, te jedina stvar koju moramo znati je da iz Jave zovemo funkciju racunaj() u skriptama, te to činimo metodom invokeFunction() sučelja Invocable koju smo prethodno spomenuli, te u toj metodi kao argument predajemo ime funkcije u skripti, u ovom slučaju racunaj(), te referencu na stog na kojem se nalaze operandi • u svakoj od skripta se nalazi funkcija racunaj() koja kao argument prima referencu na stog, te obavlja željene operacije

  22. jedina nova stvar je to ovdje smo uveli obradu iznimki u skripti • Javascript sve iznimke klasificira kao Javascript Error objekt, ili kao neki podtip tog objekta • iznimke izazvane od strane Java metoda će biti također pretvorene (engl. wrapped) u Javascript Error objekt, te se međusobno neće moći razlikovati • Java pruža još jednu pogodnost u radu sa skriptama, a to je da Rhino dodaje javaException svojstvo svakom Javascript Error objektu u trenutku kada se Java iznimka pretvori u Javascript Error • ovo svojsto nam govori o kojem tipu Java iznimke je riječ, pa tako u ovdje u kodu u obradi iznimke prvo uzimamo javaException svojstvo Javascript Error objekta, te tada gledamo je li ono primjerak java.util.EmptyStackException razreda, te ako je, onda obrađujemo tu iznimku na odgovarajući željeni način

  23. Zaključak Prilikom korištenja skripti u Javi treba biti oprezan, jer kao što smo u prezentaciji spomenuli, taj pristup donosi znatno smanjenje u brzini. No kada nam brzina nije od presudne važnosti, a treba nam modularan kod čije ponašanje želimo mijenjati na jednostavan način pomoću koda jednostavne sintakse, onda treba razmisliti o ovom pristupu.

  24. PITANJA?

More Related