Navodila za izdelavo diplomske naloge

Velikost: px
Začni prikazovanje s strani:

Download "Navodila za izdelavo diplomske naloge"

Transkripcija

1 Primož Kokol Gradnja domensko specifičnih jezikov s programskim jezikom Scala Diplomsko delo Maribor, julij 2012

2

3 I Diplomsko delo univerzitetnega študijskega programa Gradnja domensko specifičnih jezikov s programskim jezikom Scala Študent: Študijski program: Smer: Mentor: Somentor: Primož Kokol UN ŠP Računalništvo in informatika Programska oprema red. prof. dr. Marjan Mernik doc. dr. Tomaž Kosar Maribor, julij 2012

4 II

5 III ZAHVALA Mentorju in somentorju se zahvaljujem za strokovno pomoč in koristne napotke pri opravljanju diplomskega dela. Posebna zahvala velja staršem, ki so mi omogočili študij. Prav tako iz srca hvala Maji, ki me je pri delu nenehno vzpodbujala.

6 IV Gradnja domensko specifičnih jezikov s programskim jezikom Scala Ključne besede: domensko specifični programski jeziki, programski jezik Scala UDK: (043.2) Povzetek Scala je razmeroma nov, splošno namenski, statično tipiziran programski jezik, ki združuje principe objektnega in funkcijskega programiranja. Predvsem principi funkcijskega programiranja namigujejo na to, da bi omenjen jezik lahko predstavljal dobro alternativo za implementacijo domensko specifičnih jezikov. V sklopu diplomskega dela smo preučili ustreznost omenjenega programskega jezika za implementacijo domensko specifičnih programskih jezikov na primeru jezika FDL (ang. Feature Description Language). Primerjave ter implementacije omenjenega jezika so že bile realizirane v programskih jezikih Java, Lisa, Haskell, C++, Smacc, C# v strokovnem članku A preliminary study on various implementation approaches of domain-specific language avtorjev, Tomaž Kosar, Pablo E. Martínez López, Pablo A. Barrientos, Marjan Mernik, kar predstavlja podlago za primerjavo z implementacijo programskega jezika FDL v programskem jeziku Scala.

7 V Building domain-specific languages in Scala Key words: domain-specific programming languages, programming language Scala UDK: (043.2) Abstract Scala is a relatively new, general purpose, statically typed programming language that smoothly integrates features of object-oriented and functional languages. Especially features of functional languages are those that might present a strong foundation for building domain-specific languages. The diploma work is about the suitability of Scala for building domain-specific programming languages. The domain-specific language we have implemented is called FDL Feature Description Language. A comparison of the implementation approaches of FDL language in Java, Lisa, Haskell, C++, Smacc and C# has already been done in article A preliminary study on various implementation approaches of domain-specific language by Tomaž Kosar, Pablo E. Martínez López, Pablo A. Barrientos, Marjan Mernik. The results of this article were compared against our implementation of FDL in Scala.

8 VI VSEBINA 1 UVOD SPLOŠNO NAMENSKI PROGRAMSKI JEZIKI DOMENSKO SPECIFIČNI PROGRAMSKI JEZIKI RABA PREDNOSTI IN SLABOSTI NAČINI IMPLEMENTACIJE UPORABLJENA DOMENSKO SPECIFIČNA JEZIKA EBNF FDL PROGRAMSKI JEZIK SCALA NASTANEK SPLOŠNO O PROGRAMSKEM JEZIKU SCALA NAMESTITEV IMPLEMENTACIJA DOMENSKO SPECIFIČNEGA JEZIKA FDL V PROGRAMSKEM JEZIKU SCALA SEMANTIČNI MODEL Uporabljeni principi Implementacija ALGEBRA DIAGRAMOV LASTNOSTI SEMANTIČNEGA MODELA Uporabljeni principi Implemetacija VGRAJENI PRISTOP Uporabljeni principi Implementacija PRISTOP PREVAJALNIK/TOLMAČ Uporabljeni principi Implementacija... 51

9 VII 6 MERITVE IN PRIMERJAVE PRIMERJAVA ŠTEVILA VRSTIC IMPLEMENTACIJ PRIMERJAVA ČASOVNE ZMOGLJIVOSTI ZAKLJUČEK... 60

10 VIII KAZALO SLIK Slika 2-1: Klasifikacija programskih jezikov... 4 Slika 3-1: Primerjava stroškov Slika 3-2: Graf značilnosti Slika 5-1: Uporaba semantičnega modela Slika 5-2: Semantični model namenjen opisu lastnosti Slika 5-3: Semantični model namenjen opisu omejitev KAZALO GRAFOV Graf 6-1: eloc iz primerjanega članka Graf 6-2: Število vrstic implementacije vgrajeni pristop Graf 6-3: Število vrstic implementacije pristop prevajalnik/tolmač KAZALO TABEL Tabela 1: Implementacijski pristopi Tabela 2: Nabor spremenljivk Tabela 3: Spremenljivke okolja Tabela 4: Notacija PEG operatorjev programskega jezika Scala Tabela 5: Rezultati časovnih zmogljivosti iz primerjalnega članka Tabela 6: Časovna zmogljivost implementacij... 59

11 IX UPORABLJENE KRATICE BNF Backus Naur Form COTS Commercial Off-The-Shelf DSL Domain-Specific Language DSVL EBNF ELOC Domain-Specific Visual Language Extended Backus Naur Form Effective Lines of Code FDL Feature Description Language GPL General Purpose Language JVM Java Virtual Machine LOC Lines of Code PEG Parsing Expression Grammars SQL Structured Query Language XML Extensible Markup Language

12

13 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 1 1 UVOD Scala je razmeroma nov, vendar hitro se razvijajoč programski jezik. Zanimiv je predvsem zaradi objektno in hkrati funkcijsko usmerjenega pristopa ter interoperabilnosti s programskim jezikom Java. Scala je sicer v začetkih svojega obstoja pridobila titulo akademskega programskega jezika, ki naj ne bi bil primeren za industrijo oziroma reševanje realnih problemov, kar po našem prepričanju nikakor ni bila korektna oznaka. Zagotovo je, da omenjena oznaka z današnjim dnem ne drži več, saj je Scala med drugim že bila uporabljena v podjetjih kot so LinkedIn, Twitter, FourSquare in podobnih. Scala namreč z naprednimi principi, velikim naborom knjižnic ter že vgrajenimi domensko specifičnimi jeziki olajša prenekatero nalogo. Prav funkcijski pristopi ter že vgrajeni domensko specifični jeziki pa namigujejo na to, da bi programski jezik Scala lahko predstavljal dobro alternativo za gradnjo le teh. Slednjo predpostavko smo v sklopu tega diplomskega dela skušali potrditi. V programskem jeziku Scala smo implementirali domensko specifični programski jezik FDL. Gre za domensko specifičen jezik, ki je bil v sklopu članka A preliminary study on various implementation approaches of domain-specific language, avtorjev Tomaž Kosar, Pablo E. Martínez López, Pablo A. Barrientos, Marjan Mernik, v nekaterih programskih jezikih že implementiran. V omenjenem članku so prav tako bile opravljene meritve v smislu števila potrebnih vrstic za implementacijo, hitrost izvajanja algoritma in podobno. Omenjena raziskava je predstavljala odlično osnovo za primerjavo naše implementacije v programskem jeziku Scala. V sklopu diplomskega dela najprej opišemo splošne in domensko specifične programske jezike. Slednje predstavimo podrobneje, saj njihov predstavnik, programski jezik za opis diagramov lastnosti FDL, ki ga prav tako podrobneje opišemo, predstavlja jedro našega diplomskega dela. V naslednjem poglavju predstavimo sam programski jezik Scala. Dotaknemo se nastanka omenjenega programskega jezika, prav tako pa opišemo splošne značilnosti ter

14 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 2 najočitnejše razlike v primerjavi z veliko bolj razširjenim ter poznanim programskim jezikom Java, s katerim je programski jezik Scala interoperabilen. V podrobnejše principe ter samo razlago programskega jezika Scala se ne spuščamo, saj bi s tem zagotovo presegli število strani, ki je za diplomsko delo še sprejemljivo, zagotovo pa predstavimo vse principe, ki so bili uporabljeni pri praktičnem delu in sicer sami implementaciji domensko specifičnega jezika. Opis implementacije je ločen na štiri podpoglavja. V prvih dveh podpoglavjih opišemo model, ter algebro diagramov lastnosti. Opisani dve rešitvi sta skupni dvema različnima pristopoma implementacije domensko specifičnih jezikov, in sicer vgrajenemu pristopu ter pristopu prevajalnik/tolmač, ki ju opišemo v tretjem ter četrtem podpoglavju. Pred vsakim opisom implementacije za lažje razumevanje predstavimo uporabljene principe. V naslednjem poglavju predstavimo rezultate meritev, prav tako pa po kriterijih, ki so za nas zanimivi, opravimo primerjavo z rezultati dobljenimi v [10].

15 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 3 2 SPLOŠNO NAMENSKI PROGRAMSKI JEZIKI Začetke programskih jezikov bi lahko označili s predlogom John von Neumann-a, da mora biti računalnik trajno ožičen sistem z možnostjo hranjenja programov in podatkov v pomnilniku, podprt z majhnim naborom splošno namenskih operacij, ki v določenem sosledju rešujejo kompleksnejše naloge [1]. Pred tem je namreč veljalo, da je bilo potrebno za»vnos«programa fizično preklapljanje stikal, kakor tudi povezovanje komponent logičnih ter aritmetičnih enot z električnimi prevodniki za vsak program posebej [18]. Takšen»vnos«programa je lahko trajal tudi po več dni. Kot primer programa v pomnilniku poglejmo strojno kodo arhitekture LC-3, ki je sicer bila uporabljena le v pedagoške namene [14]: program podatki V tem programu vsaka vrstica, zapisana s 16 biti, predstavlja po eno inštrukcijo ali eno podatkovno vrednost. Prvi štirje biti predstavljajo operacijsko kodo (ang. opeartion code), ki jo mora prepoznati prevajalnik, da se lahko izvajanje programa prične. Preostalih 12 bitov predstavlja podatke o operandih. Kot primer poglejmo naslednjo inštrukcijo: Prvi štirje biti 0010 predstavljajo ukaz za prenos vrednosti iz pomnilnika v enega izmed osmih splošno namenskih registrov. Naslednji trije biti 001 označujejo prvi splošno namenski register, preostanek bitov pa označuje celoštevilčni zamik od naslova naslednjega ukaza na podatek, ki ga želimo prenesti. Pisanje takšnih programov bi bilo prezahtevno, zato je sledil logičen naslednji korak, uvedba mnemonikov. Mnemonik je lahko zapomnljiva beseda, ki predstavlja inštrukcijo,

16 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 4 operand ali pa pomnilniško lokacijo. Tako bi lahko zgoraj napisan binarni ukaz s pomočjo mnemonikov zapisali takole: LD R1, FOURTH Takšen zapis programa imenujemo zbirna koda. Naloga zbirnika je, da mnemonike enolično pretvori v strojno kodo. Omenjena zbirna koda je v času nastanka zelo poenostavila pisanje programov v primerjavi s strojno kodo, vendar pa se tukaj razvoj splošno namenskih programskih jezikov šele začne. Strojna in zbirna koda spadata med nižje programske jezike in ju zaradi pomanjkanja abstrakcije nima smisla klasificirati med splošno namenske ali domensko specifične jezike. Zato pa je omenjeno klasifikacijo smiselno opraviti nad višjimi programskimi jeziki. Definirajmo višji programski jezik kot jezik, ki ustreza kriterijem uporabljenim v [16] z manjšimi spremembami: Poznavanje strojne kode ni pogoj za uporabo. Zagotovljena je prenosljivost programa. En stavek oziroma inštrukcija se prevede v več operacij na nivoju strojne kode. Obstaja notacija bližja problemu, ki ga rešujemo, kot sam zbirni jezik. Manjšo množico programskih jezikov bi po zgornji definiciji lahko klasificirali kot je to prikazano na sliki 2-1. Slika 2-1: Klasifikacija programskih jezikov Iz slike 2-1 je razvidno, da je nekatere jezike težko opredeliti kot samo specifične ali splošne. Razlog tiči v tem, da nekateri jeziki ustrezajo tako splošno namenski, kakor tudi domensko specifični definiciji jezikov, čeprav nobene izmed omenjenih v celoti ne izpolnjujejo. Takšen jezik je npr. COBOL, ki ga nekateri uvrščajo med splošno namenske

17 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 5 programske jezike, spet drugi med domensko specifične jezike [15]. Naslednje poglavje je namenjeno podrobnejšemu opisu domensko specifičnih jezikov, kar nekoliko olajša razumevanje vzrokov, da črno-bela delitev na domensko specifične in splošno namenske jezike vseh programskih jezikov v splošnem ni možna, še prej pa si poglejmo zakaj programski jezik Scala lahko zagotovo prištevamo med splošno namenske programske jezike. Programski jezik Scala je popolnoma interoperabilen s programskim jezikom Java, ki je eden izmed bolj znanih predstavnikov splošno namenskih jezikov. Za razliko od programskega jezika Java omogoča napredne principe objektnega ter funkcijskega programiranja, prav tako pa ustreza vsem lastnostim splošno namenskih jezikov: Poznavanje strojne kode ni potrebno. Prenosljivost programa je zagotovljena, saj teče v okolju Javinega virtualnega stroja (ang. java virtual machine). En stavek oziroma inštrukcija se prevede v več operacij na nivoju strojne kode. Notacija za reševanje problemov je zaradi izrazne moči programskega jezika Scala zelo približana reševanju problema. Programski jezik Scala lahko uporabljamo za manjše skripte, kakor tudi za večje sisteme, kar klasifikacijo še olajša. Kot primer si lahko ogledamo primer izvedljive skripte napisane v programskem jeziku Scala za štetje vrstic datoteke, ki jo podamo preko argumenta: off call scala %0.bat %* goto :eof ::!# val numoflines = io.source.fromfile(args(0)).getlines.size println("stevilo vrstic (" + args(0) + "): " + numoflines) Takšno skripto bi iz ukazne vrstice v okolju Windows zagnali tako: C:\>CLines FDL.lang Stevilo vrstic (FDL.lang): 48

18 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 6 Kot primere uporabe programskega jezika Scala za večje sisteme bi med drugim lahko izpostavili naslednja podjetja [21]: LinkedIn Scala uporabljena za asinhroni sporočilni sistem med sistemi v oblaku. Twitter Scala uporabljena za sporočilno vrsto velikega števila sporočil. Novell Uporaba programskega jezika Scala za spletne servise. The Guardian Javni spletni servis v celoti razvit s pomočjo programskega jezika Scala. Med drugim Scalo uporabljajo tudi Xerox, FourSquare, Sony, Siemens in še bi lahko naštevali. Samemu programskemu jeziku Scala bomo v nadaljevanju namenili samostojno poglavje. Prav tako pa bomo tekom opisa v praktičnem delu predstavili uporabljene principe.

19 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 7 3 DOMENSKO SPECIFIČNI PROGRAMSKI JEZIKI Domensko specifičen jezik lahko definiramo kot jezik, po navadi manjšega obsega, ki s primerno notacijo ter abstrakcijo nudi izrazno moč usmerjeno predvsem na določeno domeno [2]. Omenjena definicija je spet odvisna od načina, kako interpretiramo domeno. Za lažjo predstavo si predstavljajmo delitev programskih jezikov na splošne in specifične kot postopno lestvico z zelo domensko specifičnimi jeziki kot na primer BNF na levi in splošno namenskimi jeziki kot npr. C++ na desni [15]. Nekateri izmed bolj poznanih predstavnikov domensko specifičnih jezikov so kot že rečeno: BNF, HTML, JavaScript, formule razpredelnic, SQL in podobni. Omenjeni jeziki so predstavniki zunanjih domensko specifičnih jezikov, ki uporabljajo svojo sintakso in kot takšni potrebujejo namenskega tolmača (ang. interpreter) oziroma prevajalnik (ang. compiler). Druga skupina so vgrajeni domensko specifični jeziki. Takšni jeziki uporabljajo konstrukte gostujočega jezika in so s pomočjo abstrakcije videti kot jeziki namenjeni le določeni domeni. Takšni vgrajeni jeziki nimajo posebnega imena [5]. Kot primer v programskem jeziku Scala lahko omenjamo knjižnico Scala Actors (ang Scala Actors library), ki je del Scala distribucije. Gre za paradigmo sočasnega programiranja, pri čemer je akter (ang. Actor) proces, ki si z ostalimi procesi/akterji, ki tečejo sočasno, deli sporočila. Gre za asinhrono komunikacijo; sporočila se namreč hranijo v nabiralniku akterja, ki sporočilo prejme. Akter kot odgovor na asinhrono sporočilo lahko ustvari novega akterja, pošlje sporočilo ostalim vidnim akterjem (vključno s samim seboj) ali pa spremeni interno logiko oziroma način, kako se bo le ta odzval na naslednje sprejeto sporočilo [11]. Izsek kode omenjenega domensko specifičnega jezika izgleda takole: actor { loop { receive{ case "Dober dan" => sender! "Lepo pozdravljeni tudi vi" case "Lahko noč" => sender! "Lahko noč tudi vam"

20 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 8 Drug takšen predstavnik, ki je del distribucije programskega jezika Scala, pa je princip razpoznavalnik-kombinator (ang. parser-combinator), ki je prav tako implementiran kakor vgrajen domensko specifičen jezik in ga bomo podrobneje predstavili v nadaljevanju, saj je uporabljen v praktičnem delu diplomskega dela. Skupino domensko specifičnih jezikov, ki je ne bomo posebej obravnavali, sestavljajo tako imenovani vizualni domensko specifični jeziki ali DSVL (ang. domain-specific visual languages). Gradniki takšnih jezikov so vizualne predstavitve oziroma komponete, s katerimi dosežemo višji nivo abstrakcije, ki v večini primerov omogoča uporabo takšnih jezikov že z osnovnim znanjem rokovanja z osebnim računalnikom [17]. 3.1 Raba Razloge za uporabo domensko specifičnih jezikov lahko v splošnem razdelimo na štiri dele [5]: 1. Izboljšanje produktivnosti: Domensko specifični jezik teži k temu, da je sintaksa tega čim bolj podobna domeni problema, ki ga rešuje, prav tako pa s pomočjo abstrakcije omogoča, da se osredotočimo na reševanje problema in ne na način kako ga rešiti. Posredno takšen jezik vpliva na lažjo berljivost programske kode. Posledica je lažje odkrivanje ter manj napak v fazi razvoja prav tako pa je olajšano spreminjanje že obstoječe programske kode. Kakor je splošna praksa, da se poslužujemo smiselnega poimenovanja spremenljivk, pisanja komentarjev, dokumentacije, tako je dobra praksa tudi uporaba domensko specifičnega jezika, kjer je to smiselno. 2. Komunikacija s strokovnjaki domensko specifičnega področja: Pogost vzrok takšnih in drugačnih napak povzroča izguba oziroma deformacija informacij pri komunikaciji s strokovnjaki določenega domensko specifičnega področja, ki na tak ali drugačen način podajajo specifikacije. V takšnem primeru lahko domensko specifični jezik služi kot komunikacijski kanal. Obseg problema, ki ga domensko specifični jezik rešuje, pogosto odloča tudi o tem ali ga bodo strokovnjaki z domensko specifičnega področja privzeli kot jezik za zapis dotične domene. Torej,

21 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 9 ožji je spekter, ki ga pokriva domensko specifični jezik, večja je verjetnost, da bodo jezik uporabljali strokovnjaki z določenega domensko specifičnega področja. 3. Sprememba konteksta izvajanja: Velikokrat potreba konfiguracije sistema v času prevajanja (ang. compile time) ne zadostuje. V takšnem primeru je nekako potrebno zagotoviti, da lahko konfiguracijo sistema spreminjamo v času izvajanja (ang. run time). Takšno funkcionalnost bi lahko dosegli z uporabniškim vmesnikom, ki pa žal za primere, ki vsebujejo zapleteno logiko, ni najboljša izbira, saj se za te bolje obnese domensko specifičen jezik. Eden izmed predstavnikov domensko specifičnih jezikov, ki je pogosto uporabljen v te namene, je XML. 4. Alternativni model: Večina trenutno najpogosteje uporabljenih programskih jezikov povzemajo imperativni način programiranja. Imperativni pristop pomeni, da za rešitve določenega problema podamo natančen postopek, kako določen problem rešiti. Z deklarativnim načinom pa, v nasprotju z imperativnim načinom, podamo samo obnašanje sistema. Alternativni model bi torej lahko namesto imperativnega omogočal deklarativni način opisa določenega modela. Gre torej za alternativno obliko polnjenja semantičnega modela. Primer alternativnega modela je viden v nadaljevanju na praktičnem primeru, ki je del diplomskega dela, kjer se lahko semantični model vnese preko metod ali pa alternativno s pomočjo ene izmed implementacij domensko specifičnega jezika. 3.2 Prednosti in slabosti Raba domensko specifičnih jezikov ima določene prednosti, kakor tudi slabosti. Dobro zasnovan domensko specifičen jezik in premišljena uporaba poizkušata najti razmerje v korist prednostim. Za lažjo predstavo še enkrat na kratko opišimo prednosti domensko specifičnih jezikov [2]: Omogočajo opis problema na višjem abstraktnem nivoju, ki sovpada z domeno problema. Posledično lahko strokovnjaki na določenem področju opis takšne rešitve lažje razumejo, ovrednotijo, urejajo ali pa so celo soudeleženi pri nastajanju le-te. So jedrnati, do neke mere samo opisni, v smislu, da dokumentacija zaradi sintakse ter semantične razdalje, ki je zelo približana domeni problema, ni potrebna.

22 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 10 Izboljšajo produktivnost, zanesljivost, olajšajo vzdrževanje in na nek način pripomorejo k lažji prenosljivosti. Ker je tak jezik močno povezan z domeno, ki jo rešuje, je torej za uporabo takšnega jezika potrebno dobro poznavanje področja, ki ga rešuje, kar olajša komunikacijo med vsemi akterji pri nastajanju določenega programskega produkta. Omogočajo ovrednotenje in optimizacijo na domenskem nivoju. Izboljšajo način testiranja, saj teste lahko pišejo ljudje, ki so v določeni domeni podkovani. Druga, sicer posredna prednost so pa zagotovo, dolgoročno gledano, nižji stroški. Kot je razvidno iz slike 3-1 so začetni stroški sicer višji, vendar se ta vložek po daljšem obdobju zaradi zgoraj naštetih prednosti obrestuje [12]. Slika 3-1: Primerjava stroškov [12] Kot slabosti domensko specifičnih jezikov bi lahko izpostavili [12]: Predvsem začetni stroški razvoja domensko specifičnega jezika. Stroški izobraževanja. Majhno število že implementiranih domensko specifičnih jezikov. Težavna določitev obsega domene, ki jo naj pokriva domensko specifičen jezik. Določitev razmerja med konstrukti domensko specifičnega in splošno namenskega jezika (predvsem pri vgrajenem pristopu). Odpor razvijalcev do učenja novih jezikov.

23 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 11 Možna manjša zmogljivost programa napisanega z domensko specifičnim jezikom v primerjavi s splošno namenskim. 3.3 Načini implementacije V fazi analize je potrebno zbrati vse potrebne podatke za izdelavo domensko specifičnega jezika [15]. Jasno moramo definirati problem domene, ki ga rešujemo. Potrebno je pridobiti znanje o problemu domene. V pomoč so lahko strokovnjaki, ki so v določeni domeni podkovani, tehnični dokumenti, članki ter obstoječe že napisane rešitve v splošno namenskih programskih jezikih. Rezultat takšne analize je v splošnem težko določiti. Velikokrat pa končni izdelek analize zajema potrebno terminologijo ter semantiko za reševanje problema v bolj ali manj abstraktni obliki. Velikokrat je dobro preveriti, ali morda domensko specifičen jezik za naš problem že obstaja, kar se lahko zgodi predvsem pri domensko specifičnih problemih, ki so kljub specifičnosti dokaj splošni v smislu problema, ki ga rešujejo. Kot primer lahko vzamemo domensko specifičen jezik za izračun matematičnih izrazov, pri čemer izraz v obliki niza znakov poda uporabnik. Problem, ki ga v tem primeru rešujemo, je dokaj splošen. Sintaksa je poznana vsem. Rešitev pa glede na to, da moramo upoštevati prioriteto operatorjev, ni ravno trivialna. Ena izmed možnih že obstoječih rešitev v programskem jeziku Java, od verzije 6 naprej, bi bila uporaba paketa javax.script s pripadajočimi knjižnicami, ki omogoča ovrednotenje skriptnih jezikov, na primer skriptnega programskega jezika JavaScript. Poglejmo primer: ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript"); // Uporabniški vnos, // ki ga lahko preberemo iz datoteke, uporabniškega vmesnika String expression="sqrt((3+4)*2 + 2)"; // Olajšamo vnos izrazov // Uporabniku npr. ni potrebno pisati Math.sqrt expression="with(math) " + expression; // Rezultat na standardnem izhodu: 4 System.out.println(engine.eval(expression));

24 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 12 Rešitev bi lahko izboljšali, če seveda obstaja potreba po tem, na primer z razpoznavalnikom, ki dopušča vnos le dovoljenih oziroma želenih matematičnih konstruktov. S tem dosežemo boljšo kontrolo nad uporabniškim vnosom ter sporočanjem sintaktičnih napak, še vedno pa bi velik del (ovrednotenje izrazov z velikim naborom operatorjev, gradnja semantičnega modela) prepustili že obstoječemu domensko specifičnemu jeziku. Ko opravimo analizo domensko specifičnega jezika in nobena od že obstoječih rešitev ni ustrezna, je potrebno določiti način implementacije. V praksi se uporablja več pristopov (Tabela 1).

25 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 13 Tabela 1: Implementacijski pristopi [10] Pristop Predprocesiranje (ang. preprocessing) Vgrajeni pristop 1 (ang. embedded approach) Prevajalnik/tolmač 1 (ang. compiler/interpreter) Opis Konstrukti domensko specifičnega jezika so preslikani v izbran jezik s pomočjo predprocesiranja. Domensko specifičen jezik je vgrajen v izbran gostujoč jezik. Vgrajen jezik uporablja konstrukte gostujočega jezika, s katerimi se tvori abstraktni nivo, ki se skuša čim bolj približati domeni. Prednost takšnega pristopa je uporaba že obstoječega prevajalnika/tolmača gostujočega jezika ter sorazmerno lahka realizacija. Pomanjkljivost takšnega pristopa je, da se sintaksi domensko specifičnega jezika po navadi lahko le približamo. V primeru tolmača, so konstrukti domensko specifičnega jezika ovrednoteni s standardnim ciklom pridobi-dekodiraj-izvedi (ang. fetch-decode-execute cycle). Tak pristop je primeren za jezik, kjer hitrost izvajanja ni pomembna. V primeru prevajalnika so konstrukti domensko specifičnega jezika preslikani v konstrukte gostujočega jezika. Prednost omenjenih pristopov je ta, da se lahko zelo približamo želeni notaciji, slabost pa zahtevna implementacija. Generator prevajalnika (ang. compiler generator) Razširjeni prevajalnik/tolmač (ang. extensible compiler/interpreter) Komercialni produkti - COTS (ang. commercial offthe-shelf) Ta pristop je podoben prejšnjemu, s to razliko, da za gradnjo prevajalnika uporabimo za to namenjeno orodje. S tem je implementacija nekoliko olajšana. Prevajalnik/tolmač gostujočega splošno namenskega jezika se razširi s pravili domensko specifičnega jezika. Omenjen način je precej zahteven, saj je za pravilno delovanje potrebno dobro poznavanje prevajalnika splošno namenskega jezika. Domensko specifičen jezik je zgrajen z naborom že obstoječih orodij oziroma notacij. Tak primer bi lahko bil XML jezik, čeprav je le ta za končnega uporabnika nepraktičen. 1 Omenjen pristop podrobneje predstavimo v praktičnem delu.

26 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 14 Zgoraj omenjeni pristopi so bili v sklopu članka [10] implementirani v naslednjih programskih jezikih: Java (predprocesiranje, prevajalnik/tolmač) Lisa (predprocesiranje, generator prevajalnika) Haskell (predprocesiranje, vgrajen pristop) C++ (predprocesiranje) Smacc (generator prevajalnika) C# (razširjen prevajalnik) Domensko specifični jezik, ki je bil implementiran v naštetih pristopih, se imenuje FDL. Omenjen domensko specifičen jezik implementiramo v okviru diplomske naloge še v programskem jeziku Scala (vgrajeni pristop ter pristop prevajalnik/tolmač) in ga primerjamo z zgoraj omenjenimi implementacijami. Preden nadaljujemo, si oglejmo še jezika, ki sta tesno povezana z implementacijo končnega izdelka diplomske naloge, in sicer omenjeni jezik FDL, ter jezik EBNF, ki je povezan z implementacijo pristopa prevajalnik/tolmač v programskem jeziku Scala. 3.4 Uporabljena domensko specifična jezika EBNF Bakcus-Naurova oblika ali BNF je metoda, ki na formalni način omogoča definicijo splošnejših in bolj zapletenih konstruktov jezika. Gre za standardno obliko zapisovanja sintakse ali gramatike programskih jezikov. Medtem ko z regularnimi izrazi določamo besede jezika, z BNF povezujemo besede v stavke. BNF določa sintakso z množico pravil oziroma produkcij, s katerimi definiramo stavke jezika. Sestavni deli, s katerimi zapisujemo produkcije so terminali, neterminali in prazni simboli. Terminali ali končni simbol so besede jezika, neterminali pa so vmesni simboli, ki označujejo posamezne dele stavka. Vsaka produkcija je sestavljena iz dveh delov, ki sta medsebojno ločena z metasimbolom ::=, ki ga beremo»definirano je«. Na levi strani je samo en terminal, na desni pa je

27 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 15 zaporedje terminalov in neterminalov. Na splošno ima produkcija obliko A ::= B, kar pomeni, da je neterminal A definiran z desno stranjo B. Več produkcij za isti neterminal oziroma terminal, lahko zapišemo z eno produkcijo in s pomočjo metasimbola. Metasimbol pomeni, da imamo na desni strani produkcije alternativo, ki jo beremo»ali«. Iz tega sledi, da je A ::= B A ::= C enako kot A ::= B C Prevajalnik razpoznava stavke tako, da iz BNF ugotovi, ali je stavek sestavljen pravilno ali ne. Poznamo pa tudi tako imenovano razširjeno Bakcus-Naurovo obliko, ki zraven omenjenega operatorja vpeljuje še dva metasimbola tako, da desno stran produkcije zapišemo v zavite ali oglate oklepaje. Z oglatimi oklepaji določimo opcijo, z zavitimi pa iteracijo [19]. Prav tako je potrebno naznaniti, da je vsak izraz zapisan v EBNF možno enakovredno zapisati v BNF obliki, kar pomeni, da je EBNF le prikladnejši zapis FDL Kot smo že omenjali je domensko specifičen programski jezik, s pomočjo ustrezne sintakse ter abstrakcije, vezan na domeno oziroma določen problem. Za nadaljnjo razlago jezika FDL je potrebno odgovoriti ter hkrati izpostaviti, kaj je produkt oziroma rezultat domensko specifičnega jezika. Rezultat je torej lahko program, ki rešuje problem določene domene. Tako domensko specifičen jezik FDL služi kot orodje za definicijo variabilnih ter skupnih lastnosti družine programskih produktov ali družine domensko specifičnih jezikov. Preden se lotimo nadaljnje razlage, najprej razjasnimo kaj je domenska analiza (ang. domain analysis). Domensko analizo bi lahko primerjali s sistemsko analizo (ang. system analysis), pri čemer je razlika ta, da je sistemska analiza namenjena zajemanju zahtev enega sistema, dočim je domenska analiza namenjena zajemanju zahtev ter potreb družine programskih produktov oziroma domensko specifičnih jezikov.

28 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 16 Najpomembnejši rezultat domenske analize je tako imenovani model lastnosti (ang. feature model). Omenjen model opisuje skupne ter variabilne značilnosti članov družine programskih produktov, prav tako pa opredeljuje relacije med variabilnimi značilnostmi. Sestavni del modela lastnosti je diagram lastnosti (ang. feature diagram). Gre za grafično predstavitev odvisnosti variabilnih značilnosti sistemov. Takšen graf torej opiše vse možne konfiguracije končnih programskih produktov. Prav ti diagrami pa predstavljajo domeno, ki se je loteva jezik FDL. Omenjen graf si lahko za lažjo predstavo ogledamo na sliki 3-2. Slika 3-2: Graf značilnosti Diagram prikazuje naslednje lastnosti avtomobila: šasija, Menjalnik, Motor, Moč ter priklop. Naštete lastnosti, razen lastnosti priklop, so obvezne, kar nakazuje obarvan krožec v grafu nad vsako izmed lastnosti. Prazen krožec označuje opcijsko lastnost. Iz grafa je razvidno, da so določene lastnosti zapisane z veliko začetnico. Gre za tako imenovane sestavljene lastnosti, kar pomeni, da lastnost napisano z veliko začetnico sestavlja več lastnosti, ki so lahko spet sestavljene ali pa atomarne lastnosti zapisane z malo začetnico. Notacija, ki je še nismo opisali, so prazni in obarvani trikotniki pri sestavljenih lastnostih. Prazen trikotnik pomeni ekskluzivni ali. Menjalnik je tako lahko avtomatski ali ročni, nikakor pa ne oboje. Obarvan trikotnik ponazarja možnost izbire ene ali več lastnosti. Tako je npr. Motor lahko električni, bencinski ali oboje hkrati. Instanco diagrama lastnosti določa dejanski izbor atomarnih lastnosti, ki ustrezajo zahtevam diagrama. Takšna instanca definira enega izmed družine produktov. Če pogledamo diagram na sliki 3-2 še enkrat, opazimo, da je možno število različnih instanc avtomobilov, ki jih lahko tvorimo, enako 36:

29 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 17 1 (šasija) 2 (Menjalnik) 3 (Motor) 3 (Moč) 2 (priklop) = 36 Grafična notacija v obliki diagrama sicer lepo opisuje lastnosti sistema, vendar je neučinkovita za komunikacijo. Za spreminjanje diagrama je namreč potrebno grafično orodje, prav tako pa takšna oblika ni primerna za nadaljnje procesiranje. V izogib omenjenemu se je pojavila potreba po tekstovnem zapisu. Prav ta problem pa rešuje jezik FDL, ki ga lahko opišemo takole: FDL definicija sestoji iz več definicij lastnosti, ki jih sestavljajo imena lastnosti, katerim sledi dvopičje ter izraz za opis lastnosti. Izraz za opis lastnosti lahko sestoji iz: Atomarne lastnosti Sestavljene lastnosti: lastnost, katere definicija je podana nekje drugje Opcijske lastnosti: lastnost znotraj opt( ) Obveznih lastnosti: seznam izrazov za opis lastnosti znotraj all( ) Eksluzivnih lastnosti: seznam izrazov za opis lastnosti znotraj one-of( ) Ne-ekskluzivnih lastnosti: seznam izrazov za opis lastnosti znotraj more-of() Privzete lastnosti 1 : default =, čemur sledi atomarna lastnost Nedefiniranih lastnosti 1 : Prav tako pa definicijo FDL sestavljajo tudi omejitve, ki jih delimo na uporabniške omejitve ter omejitve diagrama. Zapišemo jih takole: A1 requires A2: če je prisotna A1, potem mora biti prisotna tudi lastnost A2 A1 excludes A2: če je prisotna A1, potem lastnost A2 ne sme biti prisotna include A: lastnost A mora biti prisotna exclude A: lastnost A ne sme biti prisotna Pri čemer sta prvi dve omejitvi diagrama in drugi dve uporabniški omejitvi. 1 Omenjen izraz ni vsebovan v implementaciji članka [10], zato ga tudi pri praktičnem delu ne upoštevamo.

30 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 18 Zapišimo torej diagram lastnosti na sliki 3-2 v tekstovni obliki, ki ustreza zgoraj napisanim pravilom: Avto: all(šasija, Menjalnik, Motor, Moč, priklop) Menjalnik: one-of(avtomatski, ročni) Motor: more-of(električni, bencinski) Moč: one-of(nizkamoč, srednjamoč, velikamoč) Za lažjo predstavo poglejmo še formalno definicijo zapisano s pomočjo malce prirejene EBNF notacije. Za opcijo in iteracijo namreč ne uporabljamo zavitih ter oglatih oklepajev, ampak naslednje tri metasimbole: ( )? ponazarja, da je simbol oziroma množica simbolov znotraj oklepaja opcijska ( )* ponazarja nič ali več ponovitev ( )+ ponazarja eno ali več ponovitev. Z uporabo zgoraj omenjenih metasimbolov lahko sintakso jezika FDL zapišemo kot: featurediagram : (featuredefinition)+ (constraint)*; featuredefinition : FeatureName ':' featureexpression; featureexpression : all oneof moreof defaultatomicfeature feature optfeatureexpression; defaultatomicfeature : 'default' '=' AtomicFeature; optfeatureexpression : 'opt''('featureexpression')'; all : 'all''(' featureexpressionlist ')'; oneof : 'one-of''(' featureexpressionlist ')'; moreof : 'more-of''(' featureexpressionlist ')'; featureexpressionlist : featureexpression (',' featureexpression )*; feature : FeatureName AtomicFeature; constraint : userconstraint diagramconstraint; diagramconstraint : (AtomicFeature 'requires' AtomicFeature) (AtomicFeature 'excludes' AtomicFeature);

31 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 19 userconstraint : 'include' AtomicFeature 'execlude' AtomicFeature; Opt : '?'; FeatureName : ('A'..'Z') ('a'..'z' 'A'..'Z' '1'..'9')*; AtomicFeature: ('a'..'z') ('a'..'z' 'A'..'Z' '1'..'9')*; Ws : (' ' '\t' '\n' '\r' '\f')+; Zgoraj zapisana formalna definicija je osnova implementacije pristopa prevajalnik/tolmač, saj jo z le majhnimi spremembami pretvorimo v domensko specifičen jezik namenjen razpoznavanju, ki je del programskega jezika Scala. V nadaljevanju prikažemo, kako malo je potrebno, da se omenjena notacija pretvori v notacijo omenjenega domensko specifičnega jezika. Operacije, oziroma tako imenovano algebro diagramov lastnosti (ang. feature diagram algebra), ki se izvede nad domensko specifičnim jezikom FDL, oziroma tekstualno predstavitvijo, sestavljajo: Pravila normalizacije namen je poenostavitev izrazov za opis lastnosti. Pravila razširitve namen je razširitev normalizirane oblike izrazov lastnosti v disjunktivno normalno obliko. Pravila ustreznosti namen je iz disjunktivno normalne oblike na podlagi omejitev diagrama in uporabniških omejitev izločiti neustrezne izraze. Pravila ustreznosti torej omogočajo poizvedovanje po instancah, ki ustrezajo zahtevam sistema, kakor tudi uporabniškim zahtevam. Pravila variabilnosti namen je ugotavljanje števila izhodnih možnosti diagrama lastnosti [3].

32 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 20 Pravila normalizacije Najprej si oglejmo pravila, ob upoštevanju katerih pridemo do normaliziranega izraza. Za lažjo razlago definirajmo nabor spremenljivk prikazanih v tabeli 2, ki nam je v pomoč pri formalnih definicijah algebre diagramov lastnosti: Tabela 2: Nabor spremenljivk SPREMENLJIVKA TIP F FeatureExpression Fs { FeatureExpression "," * Ft { FeatureExpression "," + A AtomicFeature Z definiranim naborom spremenljivk, lahko pravila za normalizacijo (N1 N12) predstavimo na naslednji način: [N1] Fs, F, Fs', F?, Fs'' = Fs, F, Fs', Fs'' [N2] Fs, F, Fs', F, Fs'' = Fs, F, Fs', Fs'' [N3] F?? = F? [N4] all(f) = F [N5] all(fs, all(ft), Fs') = all(fs, Ft, Fs') [N6] one-of(f) = F [N7] one-of(fs, one-of(ft), Fs') = one-of(fs, Ft, Fs') [N8] one-of(fs, F?, Fs') = one-of(fs, F, Fs') [N9] more-of(f) = F [N10] more-of(fs, more-of(ft), Fs') = more-of(fs, Ft, Fs') [N11] more-of(fs, F?, Fs') = more-of(fs, F, Fs') [N12] default = A = A Zgoraj našteta pravila torej služijo normalizaciji izrazov. Kot primer poglejmo prvo pravilo normalizacije. Spodnji izraz all(električni, bencinski, opt(električni)) se tako po prvem pravilu normalizacije preoblikuje v spodnjo obliko all(električni, bencinski) Pravila normalizacije prikazana zgoraj so precej samo-opisna, zato jih posebej ne opisujemo.

33 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 21 Pravila razširitve Ko smo celoten FDL izraz normalizirali, je naslednji smiselni korak razširitev izraza v tako imenovano disjunktivno normalno obliko, ki izgleda takole: one-of( all(a 11,,A 1n1 ),, all(a m1,,a mn1 )) Takšna oblika je v bistvu prikaz vseh možnih kombinacij, ki jih je možno sestaviti. Pravila, ki normaliziran izraz preoblikujejo v disjunktivno normalno obliko, opišemo tekom razlage same implementacije. Pravila ustreznosti Zadnji korak je upoštevanje pravil omejitev diagrama in upoštevanje uporabniških omejitev. Gre za to, da izmed vseh možnih kombinacij lastnosti izločimo tiste, ki ne ustrezajo vsaj eni izmed podanih omejitev. Prav tako tudi ta pravila opišemo hkrati z opisom izvorne kode programa. Pravila variabilnosti Pravila za določitev variabilnosti: [V1] var(a) = 1 [V2] var(f?) = var(f) + 1 [V3] var(all(f, Ft)) = var(f) * var(all(ft)) [V4] var(all(f)) = var(f) [V5] var(one-of(f, Ft)) = var(f) + var(one-of(ft)) [V6] var(one-of(f)) = var(f) [V7] var(more-of(f, Ft)) = var(f) + (var(f) + 1) * var(more-of(ft)) [V8] var(more-of(f)) = var(f) Variabilnost določa število možnih izidov, ki jih lahko sestavimo iz FDL izraza. Tako bi po zgornjih pravilih ugotovili, da lahko za naslednjo normalizirano obliko: Avto: all( šasija, one-of( avtomatski, ročni), more-of( električni, bencinski), one-of( majhnamoč, srednjamoč, velikamoč), opt( priklop)) sestavimo 36 različnih kombinacij. Kot vidimo zgornji izraz ne uporablja nobene sestavljene lastnosti, kar je posledica substitucije le-teh z izrazi, ki vsebujejo le atomarne lastnosti.

34 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 22 Več podrobnosti domensko specifičnega jezika FDL je mogoče najti v članku avtorjev Arie van Dersena in Paul Klinta v članku Domain-Specific Language Design Requires Feature Descriptions [3].

35 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 23 4 PROGRAMSKI JEZIK SCALA Scala označuje programski jezik, ki je skalabilen (ang. scalable language). Ime je dobil zaradi zasnove, ki je primerna za izdelavo manjših skript, kakor tudi za izdelavo večjih sistemov; v obeh primerih pa omogoča dostop oziroma je interoperabilen z gostujočim programskim jezikom Java. Tehnično gledano je Scala skupek zasnov funkcijskih ter objektno usmerjenih pristopov. Podatek, da so programi pisani v programskem jeziku Java 2-3 krat daljši, v nekaterih primerih tudi več, od ekvivalentov pisanih v programskem jeziku Scala, priča o izrazni moči slednjega. Vzrok je v tem, da Scala daje velik pomen na čim manjši rabi ponavljajoče oziroma odvečne kode [8]. Za lažjo predstavo si lahko pogledamo enega izmed primerov napisanega v programskem jeziku Java: class Oseba { private String ime; private String priimek; private int starost; public Oseba(String ime, String priimek, int starost) { this.ime = ime; this.priimek = priimek; this.starost = starost; public void setime(string ime) { this. ime = ime; public void String getime() { return this.ime; public void setpriimek(string lastname) { this.priimek = priimek; public void String getpriimek() { return this.priimek; public void setstarost(int starost) { this.starost = starost; public void int getstarost() { return this.starost; ter v programskem jeziku Scala: class Oseba(var ime: String, var priimek: String, var starost: Int) Zgornja primera sta enaka, razredi v programskem jeziku Scala so namreč parametrizirani z argumenti konstruktorja, iz katerih se samodejno tvorijo metode za nastavljanje ter dostop do spremenljivk. Omenjen primer je le eden izmed vrste tako imenovanih sintaktičnih bombončkov (ang. syntactic sugar).

36 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran Nastanek Avtor programskega jezika Scala Martin Odersky in Philip Wadler sta leta 1995 ustvarila programski jezik imenovan Pizza, ki se je prevedel v binarno predstavitev programskega jezika Java (eng. bytecode). Šlo je za nekakšen podaljšek programskega jezika Java, ki je omogočal nekatere prvine funkcijskih jezikov, in sicer: Generični tipi (ang. generics). Funkcije višjega reda (ang. higher-order functions). Ujemanje vzorcev (ang. pattern matching). Zgoraj omenjen jezik je izšel leto po uradnem izidu prve različice programskega jezika Java in je bil dober pokazatelj tega, da je na platformi JVM možno implementirati tudi jezike s funkcijsko usmerjenimi prvinami. Delo Martina Oderskya je bilo opaženo s strani podjetja Sun. Zanimivi so bili predvsem generični tipi, kar je bil povod za nastanek novega projekta z imenom Generic Java ali krajše GJ, katerega rezultat je bil po šestih letih od nastanka vključen v različico programskega jezika Java od verzije 1.5 naprej. Prav tako pa je podjetje Sun zaradi večje stabilnosti in lažjega vzdrževanja uporabilo prevajalnik projekta GJ že od verzije programskega jezika Java 1.3 naprej. Naslednji jezik, ki je nastal izpod rok Martina Oderskya in njegove ekipe, je bil Funnel. Gre za mešanico funkcijskih ter objektno usmerjenih prvin, ki pa je bila distancirana od vseh do tedaj znanih splošno namenskih programskih jezikov in je bila z vidika uporabe samega jezika precej zahtevna zaradi minimalističnega nabora programskih konstruktov ter akademske naravnanosti. Hitro je postalo jasno, da programski jezik lahko uspe le z velikim naborom že obstoječih standardnih knjižnic. Leta 2002 je sledil razvoj programskega jezika Scala, s pragmatičnim pristopom ter s ciljem interoperabilnosti s programskim jezikom Java. Leta 2003 je sledil prvi javni izid programskega jezika Scala, ki se prevaja v binarno predstavitev programskega jezika Java. Leta 2006 je sledil izid verzije 2.0. Od omenjene verzije naprej popularnost programskega jezika Scala samo še narašča [20].

37 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran Splošno o programskem jeziku Scala Na krajšem primeru implementiranem v obeh programskih jezikih Java in Scala, si poglejmo osnovne razlike ter podobnosti med omenjenima jezikoma. Na primeru programskega jezika Scala je vidna interoperabilnost omenjenih jezikov. Program, ki služi za primerjavo, izpiše vse argumente, ki jih podamo ob zagonu omenjenega primera. Implementacija zapisana v programskem jeziku Java: // Java class PrintOptions { public static void main(string[] args) { System.out.println("Options selected:"); for (int i = 0; i < args.length; i++) if (args[i].startswith("-")) System.out.println(" "+args[i].substring(1)); ter v programskem jeziku Scala: // Scala object PrintOptions { def main(args: Array[String]): Unit = { System.out.println("Options selected:") for (val arg <- args) if (arg.startswith("-")) System.out.println(" "+arg.substring(1)) Iz zgornjih primerov je razvidno naslednje: Scala enako kot Java uporablja za definicijo razreda rezervirano besedo class, kar sicer ni razvidno iz zgornjega primera. Zraven omenjene definicije pa se v programskem jeziku Scala uporablja tudi rezervirana beseda object, ki definira objekt razreda z natanko eno instanco (ang. singleton object). V programskem jeziku Java se za definicijo spremenljivk ter parametrov uporablja prefiksna notacija tip spremenljivka, medtem ko je v programskem jeziku Scala vrstni red drugačen in sicer spremenljivka: tip.

38 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 26 Vse definicije se v programskem jeziku Scala začnejo z rezervirano besedo def. Scala ne zahteva podpičij v programskih stavkih, vendar jih kljub temu dovoljuje. Scala za polja ter dostop do elementov ne uporablja posebne notacije. Polje tipa T zapišemo kot Array[T], pri čemer je Array klasičen razred, [T] pa parameter. Polja v programskem jeziku Scala dedujejo od funkcij, zato do elementov dostopamo s klicem funkcije array(i), namesto array[i], kot smo tega vajeni v programskem jeziku Java. Tip, ki ga vrača metoda v primeru programskega jezika Scala, je Unit, za razliko od programskega jezika Java void. Razlog tiči v tem, da programski jezik Scala ne razlikuje med izrazom ter ukazom. Vsaka funkcija oziroma metoda vrne vrednost nazadnje ovrednotenega izraza. Tako je v programskem jeziku Scala tudi if-thenelse kontrolna struktura izraz in kot taka vrača vrednost. Scala povzema veliko kontrolnih struktur programskega jezika Java. Poudariti pa je treba razliko v for stavkih, ki so v programskem jeziku Scala veliko manj restriktivni. Čeprav je sintaksa programov pisanih v programskem jeziku Java precej različna od programov pisanih v programskem jeziku Scala, je iz zgornjega primera razvidno, da je Scala navkljub temu interoperabilna z programskim jezikom Java. Tako se v zgornjem primeru kličeta metodi startswith in substring razreda programskega jezika Java String. Prav tako kličemo metodo println statičnega polja out razreda System. Referenca na statično polje out je mogoča kljub temu, da Scala ne podpira koncepta statičnih elementov razredov. Vsak razred programskega jezika Java je namreč s strani programskega jezika Scala viden kot skupek dveh entitet: razreda s pripadajočimi dinamičnimi elementi ter eno instanco objekta, ki vsebuje vse statične elemente. Tako je torej System.out dosegljiv v programskem jeziku Scala kot element objekta System. S primerjavo zgoraj zapisanih in opisanih programov smo na nek način prikazali le osnovne razlike med programskima jezikoma Scala in Java. Sam programski jezik Scala v resnici uporablja veliko naprednih objektnih ter funkcijsko usmerjenih principov, ki pa jih

39 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 27 ne bomo posebej opisovali, saj smo omejeni s številom strani, ki pa nikakor ne zadostuje niti za splošen opis vseh funkcionalnosti. V praktičnem delu kljub temu podrobneje predstavimo uporabljene principe, ki so pripeljali do rešitve praktičnega dela diplomskega dela. 4.3 Namestitev Programski jezik Scala lahko uporabljamo na vseh Unix ali Windows sistemih. Pogoj je prednaložena Java od verzije 1.5 naprej. Za delo potrebujemo distribucijo programskega jezika Scala, ki jo lahko dobimo na naslovu: Prav tako pa je potrebno nastaviti še dve spremenljivki okolja, kot je to prikazano na primeru v tabeli 3. Tabela 3: Spremenljivke okolja Unix $SCALA_HOME $PATH% /usr/local/share/scala $PATH:$SCALA_HOME/bin Windows %SCALA_HOME% %PATH% c:\progra~1\scala %PATH%;%SCALA_HOME%\bin Ko smo omenjeni dve spremenljivki nastavili, lahko iz ukazne vrstice zaženemo interaktivni tolmač programskega jezika Scala: C:\>scala Welcome to Scala version final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_23-ea). Type in expressions to have them evaluated. Type :help for more information. scala> val hello = "Hello world!" hello: java.lang.string = Hello world!

40 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 28 Prevajalnik programskega jezika Scala se po vzoru programskega jezika Java imenuje scalac. Za resnejšo delo se je najbolje poslužiti enega izmed obstoječih razvojnih okolij, ki so podprta z vtičniki za delo s programskim jezikom Scala. V tem primeru je potrebno samo namestiti vtičnik za ustrezno razvojno okolje. Trenutno podprta razvojna okolja so: Eclipse (Scala IDE). IntelliJ IDEA (Scala Plugin). NetBeans (Scala Plugin).

41 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 29 5 IMPLEMENTACIJA DOMENSKO SPECIFIČNEGA JEZIKA FDL V PROGRAMSKEM JEZIKU SCALA Izdelava domensko specifičnega jezika se, ne glede na programski jezik uporabljen za implementacijo, prične z načrtovanjem. Čeprav v sklopu praktičnega dela implementiramo jezik, katerega specifikacije so že podane in načrtovanje ni potrebno, kljub temu na hitro predstavimo poglavitne korake pri načrtovanju domensko specifičnega jezika: 1. Namen domensko specifičnega jezika V tej fazi je potrebno definirati namen domensko specifičnega jezika. Dva izmed najpogosteje uporabljenih scenarijev sta dokumentiranje znanja in generiranje programske kode. Pogosto pa so domensko specifični jeziki uporabljeni tudi za generiranje testov, formalno verifikacijo, konfiguriranje sistemov in simulacije. Prav tako moramo biti pozorni, da se načrtovanje domensko specifičnega jezika prične z namenom, da je le ta čim bolj konsistenten, kar pomeni, da je usmerjen v reševanje določene in le ene domene. 2. Realizacija domensko specifičnega jezika Obstaja več načinov realizacije domensko specifičnega jezika. Lahko ga realiziramo v celoti od začetka, lahko pa uporabimo že obstoječ domensko specifičen jezik, ki ga po potrebi razširimo ali omejimo. Prav tako se odločimo ali bomo uporabili tekstualno ali grafično notacijo. 3. Vsebina domensko specifičnega jezika V tej fazi definiramo vsebino domensko specifičnega jezika, ki naj zajema le nujne koncepte domene. Težimo k temu, da je jezik čim bolj enostaven, s tem, da omejimo število konstruktov, ki jih jezik uporablja. Izogibamo se konceptualni redundanci, kar pomeni, da določeno stvar lahko zapišemo le na en način. 4. Sintaksa Omenjena faza je namenjena specifikaciji sintakse, ki jo naj domensko specifičen jezik uporablja. Težimo k temu, da je sintaksa čim bolj podobna že obstoječi sintaksi, ki jo uporabljajo domenski strokovnjaki. Sintaksa mora biti čim bolj samo opisna. Priporočljiva je tudi uvedba komentarjev v sam jezik. Stvar na katero moramo paziti je razmerje med kompaktnostjo ter berljivostjo jezika. [4]

42 Gradnja domensko specifičnih jezikov s programskim jezikom Scala Stran 30 V naslednjih podpoglavjih bomo opisali potek ter samo implementacijo. Pred vsakim večjim sklopom funkcionalnosti bomo opisali tudi uporabljene principe, in sicer tiste, ki jih ne najdemo v programskem jeziku Java oziroma se v programskem jeziku Scala razlikujejo. 5.1 Semantični model Glede na to, da fazo načrtovanja v našem primeru lahko izpustimo, je prvi korak izdelava semantičnega modela. Semantični model je eden izmed pomembnejših konstruktov domensko specifičnih jezikov. Gre za interno predstavitev domensko specifičnega jezika. Semantični model je lahko sestavljen le iz podatkovnega modela, lahko pa ga dopolnjuje tudi logika. Domensko specifični jezik je le nekakšne vrste ovoj (ang. wrapper) okrog semantičnega modela, kar je lepo razvidno pri dveh različnih implementacijah domensko specifičnega jezika FDL, in sicer po principih prevajalnik/tolmač in vgrajeni pristop, ki sta si sicer povsem različna, kljub temu pa se poslužujeta istega semantičnega modela kot to prikazuje slika 5-1. Slika 5-1: Uporaba semantičnega modela Uporabljeni principi Preden se lotimo opisa implementacije semantičnega modela, predstavimo principe, ki so pri omenjeni implementaciji uporabljeni. Spremljajoči objekti (ang. companion objects) Kot smo že omenili, v programskem jeziku Scala za razliko od programskega jezika Java ne poznamo statičnih spremenljivk in metod razredov, vendar lahko dosežemo enako funkcionalnost s pomočjo spremljajočih objektov. Spremljajoč objekt v osnovi ni nič

Slide 1

Slide 1 Tehnike programiranja PREDAVANJE 10 Uvod v binarni svet in računalništvo (nadaljevanje) Logične operacije Ponovitev in ilustracija Logične operacije Negacija (eniški komplement) Negiramo vse bite v besedi

Prikaži več

Microsoft Word - M docx

Microsoft Word - M docx Š i f r a k a n d i d a t a : Državni izpitni center *M17178111* SPOMLADANSKI IZPITNI ROK Izpitna pola 1 Četrtek, 1. junij 2017 / 90 minut Dovoljeno gradivo in pripomočki: Kandidat prinese nalivno pero

Prikaži več

PRIPOROČILA ZA OBLIKOVANJE KATALOGOV ZNANJA ZA MODULE V PROGRAMIH VIŠJEGA STROKOVNEGA IZOBRAŽEVANJA

PRIPOROČILA ZA OBLIKOVANJE KATALOGOV ZNANJA ZA MODULE V PROGRAMIH VIŠJEGA STROKOVNEGA IZOBRAŽEVANJA KATALOG ZNANJA 1. IME PREDMETA ZBIRKE PODATKOV I ZBIRKE PODATKOV II 2. SPLOŠNI CILJI Splošni cilji predmeta so: razvijanje sposobnosti za uporabo znanstvenih metod in sredstev, razvijanje odgovornosti

Prikaži več

Diapozitiv 1

Diapozitiv 1 9. Funkcije 1 9. 1. F U N K C I J A m a i n () 9.2. D E F I N I C I J A F U N K C I J E 9.3. S T A V E K r e t u r n 9.4. K L I C F U N K C I J E I N P R E N O S P A R A M E T R O V 9.5. P R E K R I V

Prikaži več

RAM stroj Nataša Naglič 4. junij RAM RAM - random access machine Bralno pisalni, eno akumulatorski računalnik. Sestavljajo ga bralni in pisalni

RAM stroj Nataša Naglič 4. junij RAM RAM - random access machine Bralno pisalni, eno akumulatorski računalnik. Sestavljajo ga bralni in pisalni RAM stroj Nataša Naglič 4. junij 2009 1 RAM RAM - random access machine Bralno pisalni, eno akumulatorski računalnik. Sestavljajo ga bralni in pisalni trak, pomnilnik ter program. Bralni trak- zaporedje

Prikaži več

Microsoft PowerPoint - Objekti_gradnja.ppt

Microsoft PowerPoint - Objekti_gradnja.ppt Naredimo razred Katera so stanja/lastnosti Kaj hočemo o objektih te vrste vedeti Kakšne lastnosti imajo Katere so metode Kakšno je znanje objektov Na katere ukaze se odzovejo Način predstavitve lastnosti

Prikaži več

Microsoft Word - M docx

Microsoft Word - M docx Š i f r a k a n d i d a t a : ržavni izpitni center *M15178112* SPOMLNSKI IZPITNI ROK Izpitna pola 2 Četrtek, 4. junij 2015 / 90 minut ovoljeno gradivo in pripomočki: Kandidat prinese nalivno pero ali

Prikaži več

Slide 1

Slide 1 Projektno vodenje PREDAVANJE 7 doc. dr. M. Zajc matej.zajc@fe.uni-lj.si Projektno vodenje z orodjem Excel Predstavitev Najbolj razširjeno orodje za delo s preglednicami Dva sklopa funkcij: Obdelava številk

Prikaži več

Strojna oprema

Strojna oprema Asistenta: Mira Trebar, Miha Moškon UIKTNT 2 Uvod v programiranje Začeti moramo razmišljati algoritmično sestaviti recept = napisati algoritem Algoritem za uporabo poljubnega okenskega programa. UIKTNT

Prikaži več

Podatkovni model ER

Podatkovni model ER Podatkovni model Entiteta- Razmerje Iztok Savnik, FAMNIT 2018/19 Pregled: Načrtovanje podatkovnih baz Konceptualno načtrovanje: (ER Model) Kaj so entite in razmerja v aplikacijskem okolju? Katere podatke

Prikaži več

Microsoft Word - CNC obdelava kazalo vsebine.doc

Microsoft Word - CNC obdelava kazalo vsebine.doc ŠOLSKI CENTER NOVO MESTO VIŠJA STROKOVNA ŠOLA STROJNIŠTVO DIPLOMSKA NALOGA Novo mesto, april 2008 Ime in priimek študenta ŠOLSKI CENTER NOVO MESTO VIŠJA STROKOVNA ŠOLA STROJNIŠTVO DIPLOMSKA NALOGA Novo

Prikaži več

MATLAB programiranje MATLAB... programski jezik in programersko okolje Zakaj Matlab? tipičen proceduralni jezik enostaven za uporabo hitro učenje prir

MATLAB programiranje MATLAB... programski jezik in programersko okolje Zakaj Matlab? tipičen proceduralni jezik enostaven za uporabo hitro učenje prir MATLAB programiranje MATLAB... programski jezik in programersko okolje Zakaj Matlab? tipičen proceduralni jezik enostaven za uporabo hitro učenje priročno programsko okolje tolmač interpreter (ne prevajalnik)

Prikaži več

Chapter 1

Chapter 1 - 1 - Poglavje 1 Uvod v podatkovne baze - 2 - Poglavje 1 Cilji (Teme).. Nekatere domene, kjer se uporabljajo podatkovne baze Značilnosti datotečnih sistemov Problemi vezani na datotečne sisteme Pomen izraza

Prikaži več

Datum in kraj

Datum in kraj Ljubljana, 5. 4. 2017 Katalog znanj in vzorci nalog za izbirni izpit za vpis na magistrski študij Pedagoško računalništvo in informatika 2017/2018 0 KATALOG ZNANJ ZA IZBIRNI IZPIT ZA VPIS NA MAGISTRSKI

Prikaži več

Delavnica Načrtovanje digitalnih vezij

Delavnica Načrtovanje digitalnih vezij Laboratorij za načrtovanje integriranih vezij Univerza v Ljubljani Fakulteta za elektrotehniko Digitalni Elektronski Sistemi Osnove jezika VHDL Strukturno načrtovanje in testiranje Struktura vezja s komponentami

Prikaži več

Microsoft Word - M _mod..docx

Microsoft Word - M _mod..docx Državni izpitni center *M17278113* JESENSKI IZPITNI ROK NAVODILA ZA OCENJEVANJE Ponedeljek, 28. avgust 2017 SPLOŠNA MATURA Državni izpitni center Vse pravice pridržane. M172-781-1-3 2 IZPITNA POLA 1 1

Prikaži več

Microsoft PowerPoint - IPPU-V2.ppt

Microsoft PowerPoint - IPPU-V2.ppt Informatizacija poslovnih procesov v upravi VAJA 2 Procesni pogled Diagram aktivnosti IPPU vaja 2; stran: 1 Fakulteta za upravo, 2006/07 Procesni pogled Je osnova za razvoj programov Prikazuje algoritme

Prikaži več

Microsoft Word - UP_Lekcija04_2014.docx

Microsoft Word - UP_Lekcija04_2014.docx 4. Zanka while Zanke pri programiranju uporabljamo, kadar moramo stavek ali skupino stavkov izvršiti večkrat zaporedoma. Namesto, da iste (ali podobne) stavke pišemo n-krat, jih napišemo samo enkrat in

Prikaži več

Turingov stroj in programiranje Barbara Strniša Opis in definicija Definirajmo nekaj oznak: Σ abeceda... končna neprazna množica simbolo

Turingov stroj in programiranje Barbara Strniša Opis in definicija Definirajmo nekaj oznak: Σ abeceda... končna neprazna množica simbolo Turingov stroj in programiranje Barbara Strniša 12. 4. 2010 1 Opis in definicija Definirajmo nekaj oznak: Σ abeceda... končna neprazna množica simbolov (običajno Σ 2) Σ n = {s 1 s 2... s n ; s i Σ, i =

Prikaži več

Vaja 2 Virtualizacija fizičnih strežnikov in virtualni PC A. Strežnik Vmware ESX Namestitev strežnika VMware ESX 3.5 na fizični strežnik 2. Nas

Vaja 2 Virtualizacija fizičnih strežnikov in virtualni PC A. Strežnik Vmware ESX Namestitev strežnika VMware ESX 3.5 na fizični strežnik 2. Nas Vaja 2 Virtualizacija fizičnih strežnikov in virtualni PC A. Strežnik Vmware ESX 3.5 1. Namestitev strežnika VMware ESX 3.5 na fizični strežnik 2. Nastavitve strežnika ESX 3. Namestitev in nastavitve VM

Prikaži več

NEVTRIN d.o.o. Podjetje za razvoj elektronike, Podgorje 42a, 1241 Kamnik, Slovenia Telefon: Faks.: in

NEVTRIN d.o.o. Podjetje za razvoj elektronike, Podgorje 42a, 1241 Kamnik, Slovenia Telefon: Faks.: in NEVTRIN d.o.o. Podjetje za razvoj elektronike, Podgorje 42a, 1241 Kamnik, Slovenia Telefon: +386 1 729 6 460 Faks.: +386 1 729 6 466 www.nevtrin.si info@elektrina.si USB RFID READER Navodila za uporabo?

Prikaži več

Vprašanja za 2. izpitno enoto poklicne mature Strokovni predmet NPA Vprašanja Visual C# (4. letnik) 1. Uporabniški vmesnik razvojnega okolja Visual C#

Vprašanja za 2. izpitno enoto poklicne mature Strokovni predmet NPA Vprašanja Visual C# (4. letnik) 1. Uporabniški vmesnik razvojnega okolja Visual C# Vprašanja za 2. izpitno enoto poklicne mature Strokovni predmet NPA Vprašanja Visual C# (4. letnik) 1. Uporabniški vmesnik razvojnega okolja Visual C# Pomen posameznih oken uporabniškega vmesnika, urejevalnik

Prikaži več

CMSC 838T Lecture

CMSC 838T Lecture Uvod v UML Iztok Savnik Uvod Standarden jezik za pisanje specifikacij programske opreme. Poslovni informacijski sistemi Porazdeljene spletne aplikacije Vgnezdeni sistemi v realnem času Kreiranje konceptualnega

Prikaži več

COBISS3/Medknjižnična izposoja

COBISS3/Medknjižnična izposoja 3/Medknjižnična izposoja 2.2 KATALOG Katalog nam omogoča: iskanje gradiva prikaz izbranih bibliografskih zapisov ali pripadajočih podatkov o zalogi iz lokalne baze podatkov v formatu COMARC vpogled v stanje

Prikaži več

Univerza v Ljubljani FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Tržaška c. 25, 1000 Ljubljana Realizacija n-bitnega polnega seštevalnika z uporabo kvan

Univerza v Ljubljani FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Tržaška c. 25, 1000 Ljubljana Realizacija n-bitnega polnega seštevalnika z uporabo kvan Univerza v Ljubljani FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Tržaška c. 25, 1000 Ljubljana Realizacija n-bitnega polnega seštevalnika z uporabo kvantnih celičnih avtomatov SEMINARSKA NALOGA Univerzitetna

Prikaži več

Avtomatizirano modeliranje pri celostnem upravljanju z vodnimi viri

Avtomatizirano modeliranje pri celostnem upravljanju z vodnimi viri Univerza v Ljubljani Fakulteta za gradbeništvo in geodezijo 36. Goljevščkov spominski dan Modeliranje kroženja vode in spiranja hranil v porečju reke Pesnice Mateja Škerjanec 1 Tjaša Kanduč 2 David Kocman

Prikaži več

Poročilo za 1. del seminarske naloge- igrica Kača Opis igrice Kača (Snake) je klasična igrica, pogosto prednaložena na malce starejših mobilnih telefo

Poročilo za 1. del seminarske naloge- igrica Kača Opis igrice Kača (Snake) je klasična igrica, pogosto prednaložena na malce starejših mobilnih telefo Poročilo za 1. del seminarske naloge- igrica Kača Opis igrice Kača (Snake) je klasična igrica, pogosto prednaložena na malce starejših mobilnih telefonih. Obstaja precej različic, sam pa sem sestavil meni

Prikaži več

Kazalo 1 DVOMESTNE RELACIJE Operacije z dvomestnimi relacijami Predstavitev relacij

Kazalo 1 DVOMESTNE RELACIJE Operacije z dvomestnimi relacijami Predstavitev relacij Kazalo 1 DVOMESTNE RELACIJE 1 1.1 Operacije z dvomestnimi relacijami...................... 2 1.2 Predstavitev relacij............................... 3 1.3 Lastnosti relacij na dani množici (R X X)................

Prikaži več

Microsoft PowerPoint - Java_spremenljivke

Microsoft PowerPoint - Java_spremenljivke Java Spremenljivke, prireditveni stavek Spremenljivke Prostor, kjer hranimo vrednosti Ime Znak, števka, _ Presledkov v imenu ne sme biti! Tip spremenljivke int (cela števila) Vse spremenljivke napovemo

Prikaži več

DES

DES Laboratorij za načrtovanje integriranih vezij Univerza v Ljubljani Fakulteta za elektrotehniko Digitalni Elektronski Sistemi Model vezja Računalniški model in realno vezje Model logičnega negatorja Načini

Prikaži več

DES

DES Laboratorij za načrtovanje integriranih vezij Univerza v Ljubljani Fakulteta za elektrotehniko Digitalni Elektronski Sistemi Digitalni sistemi Vgrajeni digitalni sistemi Digitalni sistem: osebni računalnik

Prikaži več

UPRAVLJANJE RAZPRŠENIH PODATKOV Shranjevanje, zaščita in vzdrževanje informacij, ki jih najbolj potrebujete

UPRAVLJANJE RAZPRŠENIH PODATKOV Shranjevanje, zaščita in vzdrževanje informacij, ki jih najbolj potrebujete UPRAVLJANJE RAZPRŠENIH PODATKOV Shranjevanje, zaščita in vzdrževanje informacij, ki jih najbolj potrebujete ELEKTRONSKI PODATKI, KI JIH ORGANIZACIJA USTVARJA IN POTREBUJE ZA DOSTOP, SE KAŽEJO V RAZLIČNIH

Prikaži več

1 MMK - Spletne tehnologije Vaja 5: Spletni obrazci Vaja 5 : Spletni obrazci 1. Element form Spletni obrazci so namenjeni zbiranju uporabniških podatk

1 MMK - Spletne tehnologije Vaja 5: Spletni obrazci Vaja 5 : Spletni obrazci 1. Element form Spletni obrazci so namenjeni zbiranju uporabniških podatk 1 MMK - Spletne tehnologije Vaja 5: Spletni obrazci Vaja 5 : Spletni obrazci 1. Element form Spletni obrazci so namenjeni zbiranju uporabniških podatkov in njihov prenos med spletnimi mesti. Obrazec v

Prikaži več

Microsoft PowerPoint - Java-rekurzija.ppt

Microsoft PowerPoint - Java-rekurzija.ppt Pesmica Živel je mož, imel je psa, lepo ga je učil. Nekoč ukradel mu je kos mesa, zato ga je ubil. Postavil mu je spomenik in nanj napisal: Živel je mož, imel je psa, lepo ga je učil. Nekoč ukradel mu

Prikaži več

Navodila za programsko opremo FeriX Namestitev na trdi disk Avtor navodil: Martin Terbuc Datum: December 2007 Center odprte kode Slovenije Spletna str

Navodila za programsko opremo FeriX Namestitev na trdi disk Avtor navodil: Martin Terbuc Datum: December 2007 Center odprte kode Slovenije Spletna str Navodila za programsko opremo FeriX Namestitev na trdi disk Avtor navodil: Martin Terbuc Datum: December 2007 Center odprte kode Slovenije Spletna stran: http://www.coks.si/ Elektronski naslov: podpora@coks.si

Prikaži več

PowerPoint Presentation

PowerPoint Presentation Poslovni analitik v agilnem svetu Prenova spletne strani Uvedba podpore za mobilne naprave Ineor d.o.o. O meni poslovni analitik izkušnje s tehnologijo (programiranje, razhroščevanje, inštalacije, administracija,...)

Prikaži več

Microsoft Word - NAVODILA ZA UPORABO.docx

Microsoft Word - NAVODILA ZA UPORABO.docx NAVODILA ZA UPORABO VODILO CCM-18A/N-E (K02-MODBUS) Hvala ker ste se odločili za nakup našega izdelka. Pred uporabo enote skrbno preberite ta Navodila za uporabo in jih shranite za prihodnjo rabo. Vsebina

Prikaži več

%

% OSNOVNA ŠOLA NARODNEGA HEROJA RAJKA HRASTNIK PODRUŽNIČNA ŠOLA DOL PRI HRASTNIKU PODRUŽNICA LOG AKTIV TJA IN NI KRITERIJ OCENJEVANJA 2018/2019 0-44 % nzd (1) 45-64 % zd (2) 65-79 % db (3) 80-89 % pdb (4)

Prikaži več

APS1

APS1 Algoritmi in podatkovne strukture 1 Visokošolski strokovni študij Računalništvo in informatika Abstraktni podatkovni tipi Jurij Mihelič, UniLj, FRI Podatkovni tipi Razvil Pascal, Oberon itd. Software is

Prikaži več

Microsoft Word - 10-Selekcijski intervju _4.del_.docx

Microsoft Word - 10-Selekcijski intervju _4.del_.docx številka 10,27.avg. 2004, ISSN 1581-6451, urednik:radovan Kragelj Pozdravljeni! V prejšnji številki mesečnika smo si ogledali, katera področja moramo vsebinsko obdelati v sklopu delovne zgodovine. V današnji

Prikaži več

Microsoft Word - ELEKTROTEHNIKA2_ junij 2013_pola1 in 2

Microsoft Word - ELEKTROTEHNIKA2_ junij 2013_pola1 in 2 Šifra kandidata: Srednja elektro šola in tehniška gimnazija ELEKTROTEHNIKA PISNA IZPITNA POLA 1 12. junij 2013 Čas pisanja 40 minut Dovoljeno dodatno gradivo in pripomočki: Kandidat prinese nalivno pero

Prikaži več

Document ID / Revision : 0519/1.3 ID Issuer System (sistem izdajatelja identifikacijskih oznak) Navodila za registracijo gospodarskih subjektov

Document ID / Revision : 0519/1.3 ID Issuer System (sistem izdajatelja identifikacijskih oznak) Navodila za registracijo gospodarskih subjektov ID Issuer System (sistem izdajatelja identifikacijskih oznak) Navodila za registracijo gospodarskih subjektov Gospodarski subjekti Definicija: V skladu z 2. členom Izvedbene uredbe Komisije (EU) 2018/574

Prikaži več

Microsoft Word - avd_vaje_ars1_1.doc

Microsoft Word - avd_vaje_ars1_1.doc ARS I Avditorne vaje Pri nekem programu je potrebno izvršiti N=1620 ukazov. Pogostost in trajanje posameznih vrst ukazov računalnika sta naslednja: Vrsta ukaza Štev. urinih period Pogostost Prenosi podatkov

Prikaži več

DODATEK_F8

DODATEK_F8 COMARC/B F.8 F.8 Tabela polj/podpolj s stopnjo obveznosti za posamezen bibliografski nivo V tabeli je podana obveznost polj/podpolj (o - obvezen podatek, p - obvezen podatek, če obstaja, in n - neobvezen

Prikaži več

Urejevalna razdalja Avtorji: Nino Cajnkar, Gregor Kikelj Mentorica: Anja Petković 1 Motivacija Tajnica v posadki MARS - a je pridna delavka, ampak se

Urejevalna razdalja Avtorji: Nino Cajnkar, Gregor Kikelj Mentorica: Anja Petković 1 Motivacija Tajnica v posadki MARS - a je pridna delavka, ampak se Urejevalna razdalja Avtorji: Nino Cajnkar, Gregor Kikelj Mentorica: Anja Petković 1 Motivacija Tajnica v posadki MARS - a je pridna delavka, ampak se velikokrat zmoti. Na srečo piše v programu Microsoft

Prikaži več

Nove različice programske opreme GE Podjetje GE Digital, vodilni svetovni proizvajalec programske opreme za področje avtomatike, je izdalo kar nekaj n

Nove različice programske opreme GE Podjetje GE Digital, vodilni svetovni proizvajalec programske opreme za področje avtomatike, je izdalo kar nekaj n Nove različice programske opreme GE Podjetje GE Digital, vodilni svetovni proizvajalec programske opreme za področje avtomatike, je izdalo kar nekaj novosti na področju SCADA sistemov (ifix Productivity

Prikaži več

Microsoft Word - N _moderacija.docx

Microsoft Word - N _moderacija.docx 2 N151-401-2-2 SPLOŠNA NAVODILA Prosimo, da moderirano različico navodil za vrednotenje dosledno upoštevate. Če učenec pravilno reši nalogo na svoj način (ki je matematično korekten) in je to razvidno

Prikaži več

Ime in priimek: Vpisna št: FAKULTETA ZA MATEMATIKO IN FIZIKO Oddelek za matematiko Statistika Pisni izpit 6. julij 2018 Navodila Pazljivo preberite be

Ime in priimek: Vpisna št: FAKULTETA ZA MATEMATIKO IN FIZIKO Oddelek za matematiko Statistika Pisni izpit 6. julij 2018 Navodila Pazljivo preberite be Ime in priimek: Vpisna št: FAKULEA ZA MAEMAIKO IN FIZIKO Oddelek za matematiko Statistika Pisni izpit 6 julij 2018 Navodila Pazljivo preberite besedilo naloge, preden se lotite reševanja Za pozitiven rezultat

Prikaži več

Analiza vpliva materiala, maziva in aktuatorja na dinamiko pnevmatičnega ventila

Analiza vpliva materiala, maziva in aktuatorja na dinamiko pnevmatičnega ventila Programsko orodje LabVIEW za kreiranje, zajem in obdelavo signalov (statične in dinamične karakteristike hidravličnih proporcionalnih ventilov) Marko Šimic Telefon: +386 1 4771 727 e-mail: marko.simic@fs.uni-lj.si

Prikaži več

Navodila za uporabo programske opreme OTRS verzija Administracijska navodila Avtor navodil: Sebastijan Šilec Datum: December 2007 Center odprte

Navodila za uporabo programske opreme OTRS verzija Administracijska navodila Avtor navodil: Sebastijan Šilec Datum: December 2007 Center odprte Navodila za uporabo programske opreme OTRS verzija 2.2.3 Administracijska navodila Avtor navodil: Sebastijan Šilec Datum: December 2007 Center odprte kode Slovenije Spletna stran: http://www.coks.si/ Elektronski

Prikaži več

Macoma katalog copy

Macoma katalog copy POSLOVNE APLIKACIJE PO ŽELJAH NAROČNIKA Poročilni sistem Finance in kontroling Poprodaja Podatkovna skladišča Prodaja Proizvodnja Obstoječi ERP Partnerji Implementacija rešitev prilagojena po željah naročnika

Prikaži več

Ime in priimek: Vpisna št: FAKULTETA ZA MATEMATIKO IN FIZIKO Oddelek za matematiko Verjetnost Pisni izpit 5. februar 2018 Navodila Pazljivo preberite

Ime in priimek: Vpisna št: FAKULTETA ZA MATEMATIKO IN FIZIKO Oddelek za matematiko Verjetnost Pisni izpit 5. februar 2018 Navodila Pazljivo preberite Ime in priimek: Vpisna št: FAKULTETA ZA MATEMATIKO IN FIZIKO Oddelek za matematiko Verjetnost Pisni izpit 5 februar 018 Navodila Pazljivo preberite besedilo naloge, preden se lotite reševanja Nalog je

Prikaži več

INDUSTRIJA 4.0: PRILOŽNOSTI DIGITALNE PREOBRAZBE PROCESA RAZVOJA BARV IN PREMAZOV TOMAŽ KERN, BENJAMIN URH, MARJAN SENEGAČNIK, EVA KRHAČ

INDUSTRIJA 4.0:  PRILOŽNOSTI DIGITALNE PREOBRAZBE PROCESA RAZVOJA BARV IN PREMAZOV TOMAŽ KERN, BENJAMIN URH, MARJAN SENEGAČNIK, EVA KRHAČ INDUSTRIJA 4.0: PRILOŽNOSTI DIGITALNE PREOBRAZBE PROCESA RAZVOJA BARV IN PREMAZOV TOMAŽ KERN, BENJAMIN URH, MARJAN SENEGAČNIK, EVA KRHAČ AGENDA IZZIV OZADJE RAZISKAVE POSNETEK STANJA ANALIZA STANJA in

Prikaži več

Event name or presentation title

Event name or  presentation title Marko Škufca Vodja programa BI, ADD d.o.o. Gorazd Cah Specialist področja Služba za informatiko, DARS d.d. Izziv Rešitev Rezultati... PROCESI + TEHNOLOGIJA + LJUDJE Poslanstvo: s sodobnimi pristopi in

Prikaži več

Slide 1

Slide 1 INTERAKTIVNA MULTIMEDIJA P4 in P5 doc. dr. Matej Zajc Pregled P4 Pregled P3: 4 pristopi k načrtovanju interaktivnosti PACT P4: PACT Nadaljevanje Prototipiranje Izbrani zakoni interaktivnosti People Ljudje

Prikaži več

PowerPointova predstavitev

PowerPointova predstavitev U K 20 P K U P M 2 0 1 2 12 M OBLIKOVANJE POJMA ŠTEVILO PRI OTROKU V 1. RAZREDU Sonja Flere, Mladen Kopasid Konferenca o učenju in poučevanju matematike, M a r i b o r, 2 3. i n 2 4. avgusta 2 0 1 2 Oblikovanje

Prikaži več

Orodje za izvoz podatkov

Orodje za izvoz podatkov Pomoč uporabnikom -NA-SI-200, V6.13-00 IZUM, 2018 COBISS, COMARC, COBIB, COLIB, IZUM so zaščitene znamke v lasti javnega zavoda IZUM. KAZALO VSEBINE 1 Uvod... 1 2 Predstavitev orodja za izvoz podatkov...

Prikaži več

Diapozitiv 1

Diapozitiv 1 Pogojni stavek Pogojni (if) stavek Tip bool Primerjanje Uranič Srečo If stavek Vsi dosedanji programi so se izvajali zaporedoma, ni bilo nobenih vejitev Program razvejimo na osnovi odločitev pogojnega

Prikaži več

ARS1

ARS1 Nepredznačena in predznačena cela števila Dvojiški zapis Nepredznačeno Predznačeno 0000 0 0 0001 1 1 0010 2 2 0011 3 3 Pri odštevanju je stanje C obratno (posebnost ARM)! - če ne prekoračimo 0 => C=1 -

Prikaži več

Prekinitveni način delovanja PLK Glavni program (OB1; MAIN) se izvaja ciklično Prekinitev začasno ustavi izvajanje glavnega programa in zažene izvajan

Prekinitveni način delovanja PLK Glavni program (OB1; MAIN) se izvaja ciklično Prekinitev začasno ustavi izvajanje glavnega programa in zažene izvajan Prekinitveni način delovanja PLK Glavni program (OB1; MAIN) se izvaja ciklično Prekinitev začasno ustavi izvajanje glavnega programa in zažene izvajanje prekinitvene rutine Dogodek GLAVNI PROGRAM (MAIN-OB1)

Prikaži več

Osnove matematicne analize 2018/19

Osnove matematicne analize  2018/19 Osnove matematične analize 2018/19 Neža Mramor Kosta Fakulteta za računalništvo in informatiko Univerza v Ljubljani Funkcija je predpis, ki vsakemu elementu x iz definicijskega območja D f R priredi natanko

Prikaži več

Linksys PLEK500 User Guide

Linksys PLEK500 User Guide Uporabniški priročnik Linksys PLEK500 Omrežni vmesnik Powerline Vsebina Pregled............... 2 Funkcije..................... 2 Kako deluje omrežje Powerline 3 Primer namestitve 3 Namestitev omrežja Powerline.....

Prikaži več

Nameščanje Adopt Open Java Development Kit 8

Nameščanje Adopt Open Java Development Kit 8 Nameščanje Adopt Open Java Development Kit 8 za Windows x64 IZUM, 2019 IZUM, COBISS, COMARC, COBIB, COLIB, CONOR, SICRIS, E-CRIS so zaščitene znamke v lasti javnega zavoda IZUM. KAZALO VSEBINE 1 Uvod...

Prikaži več

Microsoft Word - vaje2_ora.doc

Microsoft Word - vaje2_ora.doc II UKAZI 1. Napišite zaporedje ukazov, ki vrednost enobajtne spremenljivke STEV1 prepiše v enobajtno spremenljivko STEV2. Nalogo rešite z neposrednim naslavljanjem (zaporedje lahko vsebuje le 2 ukaza v

Prikaži več

Priloga 1: Pravila za oblikovanje in uporabo standardiziranih referenc pri opravljanju plačilnih storitev Stran 4012 / Št. 34 / Uradni lis

Priloga 1: Pravila za oblikovanje in uporabo standardiziranih referenc pri opravljanju plačilnih storitev Stran 4012 / Št. 34 / Uradni lis Priloga 1: Pravila za oblikovanje in uporabo standardiziranih referenc pri opravljanju plačilnih storitev Stran 4012 / Št. 34 / 24. 5. 2019 Uradni list Republike Slovenije PRILOGA 1 PRAVILA ZA OBLIKOVANJE

Prikaži več

RAČUNALNIŠKI PRAKTIKUM d o c. d r. A N D R E J T A R A N E N K O Kdo bo z vami? Predavatelj: dr. Andrej Taranenko

RAČUNALNIŠKI PRAKTIKUM d o c. d r. A N D R E J T A R A N E N K O Kdo bo z vami? Predavatelj: dr. Andrej Taranenko RAČUNALNIŠKI PRAKTIKUM d o c. d r. A N D R E J T A R A N E N K O Kdo bo z vami? Predavatelj: dr. Andrej Taranenko andrej.taranenko@uni-mb.si kabinet: 0/95 govorilne ure: http://matematika-racunalnistvo.fnm.uni-mb.si/

Prikaži več

6.1 Uvod 6 Igra Chomp Marko Repše, Chomp je nepristranska igra dveh igralcev s popolno informacijo na dvo (ali vec) dimenzionalnem prostoru

6.1 Uvod 6 Igra Chomp Marko Repše, Chomp je nepristranska igra dveh igralcev s popolno informacijo na dvo (ali vec) dimenzionalnem prostoru 6.1 Uvod 6 Igra Chomp Marko Repše, 30.03.2009 Chomp je nepristranska igra dveh igralcev s popolno informacijo na dvo (ali vec) dimenzionalnem prostoru in na končni ali neskončni čokoladi. Igralca si izmenjujeta

Prikaži več

Microsoft Word - M doc

Microsoft Word - M doc Državni izpitni center *M11145113* INFORMATIKA SPOMLADANSKI IZPITNI ROK NAVODILA ZA OCENJEVANJE Petek, 10. junij 2011 SPLOŠNA MATURA RIC 2011 2 M111-451-1-3 IZPITNA POLA 1 1. b 2. a 3. Pojem se povezuje

Prikaži več

Microsoft PowerPoint _12_15-11_predavanje(1_00)-IR-pdf

Microsoft PowerPoint _12_15-11_predavanje(1_00)-IR-pdf uporaba for zanke i iz korak > 0 oblika zanke: for i iz : korak : ik NE i ik DA stavek1 stavek2 stavekn stavek1 stavek2 stavekn end i i + korak I&: P-XI/1/17 uporaba for zanke i iz korak < 0 oblika zanke:

Prikaži več

Nameščanje Adopt Open Java Development Kit 8

Nameščanje Adopt Open Java Development Kit 8 Nameščanje Adopt Open Java Development Kit 8 za Windows x64 IZUM, 2019 IZUM, COBISS, COMARC, COBIB, COLIB, CONOR, SICRIS, E-CRIS so zaščitene znamke v lasti javnega zavoda IZUM. KAZALO VSEBINE 1 Uvod...

Prikaži več

Zbornica zdravstvene in babiške nege Slovenije Zveza strokovnih društev medicinskih sester, babic in zdravstvenih tehnikov Slovenije Stanje:

Zbornica zdravstvene in babiške nege Slovenije Zveza strokovnih društev medicinskih sester, babic in zdravstvenih tehnikov Slovenije Stanje: Zbornica zdravstvene in babiške nege Slovenije Zveza strokovnih društev medicinskih sester, babic in zdravstvenih tehnikov Slovenije Stanje: 17.07.2013 Ver. 2.9.1.2 Spletni portal članov uporabniška navodila

Prikaži več

2. Model multiple regresije

2. Model multiple regresije 2. Model multiple regresije doc. dr. Miroslav Verbič miroslav.verbic@ef.uni-lj.si www.miroslav-verbic.si Ljubljana, februar 2014 2.1 Populacijski regresijski model in regresijski model vzorčnih podatkov

Prikaži več

Microsoft Word - M docx

Microsoft Word - M docx Š i f r a k a n d i d a t a : Državni izpitni center *M15245112* JESENSKI IZPITNI ROK Izpitna pola 2 / 90 minut Dovoljeno gradivo in pripomočki: Kandidat prinese nalivno pero ali kemični svinčnik in računalo.

Prikaži več

Računalniški praktikum Projektna naloga - Izdelava spletne strani Avtor: Matej Tekavčič Skupina: Matej Tekavčič - koordinator Simon Vrhovnik Tine Kavč

Računalniški praktikum Projektna naloga - Izdelava spletne strani Avtor: Matej Tekavčič Skupina: Matej Tekavčič - koordinator Simon Vrhovnik Tine Kavč Računalniški praktikum Projektna naloga - Izdelava spletne strani Avtor: Matej Tekavčič Skupina: Matej Tekavčič - koordinator Simon Vrhovnik Tine Kavčič Matjaž Jerman 8. februar 2006 Kazalo 1 Uvod 2 2

Prikaži več

Microsoft PowerPoint - MSPO_4_DiagramiVpliva.pptx

Microsoft PowerPoint - MSPO_4_DiagramiVpliva.pptx 8. Diagrami vpliva Odločitveno drevo alternative status quo razširitev gradnja povezovanje izidi 28 30 24 42 16 44 30 34, Univerza v Novi Gorici, Poslovno-tehniška fakulteta 1 Slabosti odločitvenih dreves

Prikaži več

Gradbeništvo kot Industrija 4.0

Gradbeništvo kot Industrija 4.0 Povzetek: Kot vse druge panoge se mora gradbeništvo modernizirati Industrija 4.0 koncept, ki daje modernizaciji okvir, motivacijo, zagon Industrija 4.0 je stapljanje fizičnega in digitalnega sveta Gradbeništvo

Prikaži več

Delavnica Načrtovanje digitalnih vezij

Delavnica Načrtovanje digitalnih vezij Laboratorij za načrtovanje integriranih vezij Univerza v Ljubljani Fakulteta za elektrotehniko Programirljivi Digitalni Sistemi Digitalni sistem Digitalni sistemi na integriranem vezju Digitalni sistem

Prikaži več

Protege, I.Savnik

Protege, I.Savnik Protégé Iztok Savnik Uporabljeni viri: A Practical Guide To Building OWL Ontologies Using Protege 4 and CO ODE Tools, Edition 1.1 http://protege.stanford.edu/ Protégé OWL ontologije za Semantični splet

Prikaži več

PowerPointova predstavitev

PowerPointova predstavitev INFORMATIKA Tečaj za višjega gasilca OGZ PTUJ 2017 PRIPRAVIL: ANTON KUHAR BOMBEK, GČ VSEBINA TEORETIČNA PREDAVANJA INFORMACIJSKI SISTEMI SISTEM OSEBNIH GESEL IN HIERARHIJA PRISTOJNOSTI PRAKTIČNE VAJE ISKANJE

Prikaži več

Vaja04_Ver02

Vaja04_Ver02 Vaja 04 Varnost: Zaščita aplikacije, omejitev dostopa 1. Uredite prijavo in odjavo uporabnika brez uporabe menuja Special/Security. Nadgradite aplikacijo iz vaje 2. Kreirajte okno tipa Replace Začetno

Prikaži več

predstavitev fakultete za matematiko 2017 A

predstavitev fakultete za matematiko 2017 A ZAKAJ ŠTUDIJ MATEMATIKE? Ker vam je všeč in vam gre dobro od rok! lepa, eksaktna veda, ki ne zastara matematičnoanalitično sklepanje je uporabno povsod matematiki so zaposljivi ZAKAJ V LJUBLJANI? najdaljša

Prikaži več

(Microsoft Word - U\350enje telegrafije po Kochovi metodi.doc)

(Microsoft Word - U\350enje telegrafije po Kochovi metodi.doc) MORSE UČENJE PO KOCHOVI METODI Računalniški program za učenje skupaj z nekaterimi dodatnimi datotekami dobite na spletni strani avtorja: http://www.g4fon.net/. Zanimive strani so tudi: - http://www.qsl.net/n1irz/finley.morse.html

Prikaži več

Navodila za uporabo Mini snemalnik

Navodila za uporabo Mini snemalnik Navodila za uporabo Mini snemalnik www.spyshop.eu Pred vami so navodila za pravilno uporabo mini snemalnika in opis funkcionalnosti. Lastnosti snemalnika: Naziv Mere Teža Kapaciteta spomina Snemanje Format

Prikaži več

Učinkovita izvedba algoritma Goldberg-Tarjan Teja Peklaj 26. februar Definicije Definicija 1 Naj bo (G, u, s, t) omrežje, f : E(G) R, za katero v

Učinkovita izvedba algoritma Goldberg-Tarjan Teja Peklaj 26. februar Definicije Definicija 1 Naj bo (G, u, s, t) omrežje, f : E(G) R, za katero v Učinkovita izvedba algoritma Goldberg-Tarjan Teja Peklaj 26. februar 2009 1 Definicije Definicija 1 Naj bo (G, u, s, t) omrežje, f : E(G) R, za katero velja 0 f(e) u(e) za e E(G). Za v V (G) definiramo presežek

Prikaži več

EU-TPD 1 PODROBNOSTI KODIRANJA Informacije za trgovino JB za DCTA, (Final 1.2) Obveznost kodiranja izdelka, urejena s predpisom EU-TPD se n

EU-TPD 1 PODROBNOSTI KODIRANJA Informacije za trgovino JB za DCTA, (Final 1.2) Obveznost kodiranja izdelka, urejena s predpisom EU-TPD se n EU-TPD 1 PODROBNOSTI KODIRANJA Informacije za trgovino Obveznost kodiranja izdelka, urejena s predpisom EU-TPD se nanaša na tobačne izdelke na trgu EU in na tobačne izdelke, izdelane v EU, vključno s tistimi

Prikaži več

Aleš Štempihar Agile in IIBA poslovni analitiki dodana vrednost za organizacijo in njene kupce Povzetek: Kaj je pravzaprav Agile? Je to metodologija z

Aleš Štempihar Agile in IIBA poslovni analitiki dodana vrednost za organizacijo in njene kupce Povzetek: Kaj je pravzaprav Agile? Je to metodologija z Aleš Štempihar Agile in IIBA poslovni analitiki dodana vrednost za organizacijo in njene kupce Povzetek: Kaj je pravzaprav Agile? Je to metodologija za izvajanje projektov, je to tehnika in orodje za razvoj

Prikaži več

Vrste

Vrste Matematika 1 17. - 24. november 2009 Funkcija, ki ni algebraična, se imenuje transcendentna funkcija. Podrobneje si bomo ogledali naslednje transcendentne funkcije: eksponentno, logaritemsko, kotne, ciklometrične,

Prikaži več

Microsoft Word - CNR-BTU3_Bluetooth_vmesnik

Microsoft Word - CNR-BTU3_Bluetooth_vmesnik CNR-BTU3 Bluetooth vmesnik A. Vsebina pakiranja Bluetooth USB Adapter Bluetooth programska oprema in CD z gonilniki Navodila za uporabo in CD 1. Namestitev Bluetooth programske opreme za Windowse 1. Vstavite

Prikaži več

Microsoft Word - 13-Selekcijski intervju.docx

Microsoft Word - 13-Selekcijski intervju.docx številka 13, 15. dec.2004, ISSN 1581-6451, urednik:radovan Kragelj Pozdravljeni! Danes nadaljujemo z vprašanji, s katerimi vrednotite konkretne lastnosti in sposobnosti posameznega kandidata. V prejšnjih

Prikaži več

Vedno pod nadzorom, kjerkoli že ste

Vedno pod nadzorom, kjerkoli že ste Vedno pod nadzorom, kjerkoli že ste 02 Vedno pod nadzorom, kjerkoli že ste Daikin zagotavlja novo rešitev za nadzorovanje in krmiljenje glavnih funkcij stanovanjskih notranjih enot. Sistem deluje na uporabniku

Prikaži več

Microsoft PowerPoint - petek A-sambolicbeganovic [Read-Only] [Compatibility Mode]

Microsoft PowerPoint - petek A-sambolicbeganovic [Read-Only] [Compatibility Mode] KAKO PRI POUČEVANJU MATEMATIKE UPORABLJAM INTERAKTIVNO TABLO? Amela Sambolić Beganović SGGEŠ Ljubljana ŠOLSKI CENTER LJUBLJANA, Srednja lesarska šola amela.beganovic@guest.arnes.si Sirikt 2009, 17.4.2009

Prikaži več

Microsoft Word - eDenar - navodila za uporabo osebnega portala clana doc

Microsoft Word - eDenar - navodila za uporabo osebnega portala clana doc Navodila za uporabo osebnega portala člana 13.11.08 Pozor: Ta navodila so le v pomoč uporabnikom. V kolikor so navodila v nasprotju s splošnimi pogoji poslovanja kluba, veljajo splošni pogoji poslovanja

Prikaži več

Teorija kodiranja in kriptografija 2013/ AES

Teorija kodiranja in kriptografija 2013/ AES Teorija kodiranja in kriptografija 23/24 AES Arjana Žitnik Univerza v Ljubljani, Fakulteta za matematiko in fiziko Ljubljana, 8. 3. 24 AES - zgodovina Septembra 997 je NIST objavil natečaj za izbor nove

Prikaži več

II-RIS-Primer Seminarske Naloge Redni-LJ

II-RIS-Primer Seminarske Naloge Redni-LJ UNIVERZA V LJUBLJANI FAKULTETA ZA UPRAVO Študijski program: Visokošolski strokovni program Uprava Prva stopnja (bolonjski) Način študija: redni ČIŠČENJE VOZIL V AVTOPRALNICI Seminarska naloga Predmet:

Prikaži več

DIGITALNE STRUKTURE Zapiski predavanj Branko Šter, Ljubo Pipan 2 Razdeljevalniki Razdeljevalnik (demultipleksor) opravlja funkcijo, ki je obratna funk

DIGITALNE STRUKTURE Zapiski predavanj Branko Šter, Ljubo Pipan 2 Razdeljevalniki Razdeljevalnik (demultipleksor) opravlja funkcijo, ki je obratna funk DIGITALNE STRUKTURE Zapiski predavanj Branko Šter, Ljubo Pipan 2 Razdeljevalniki Razdeljevalnik (demultipleksor) opravlja funkcijo, ki je obratna funkciji izbiralnika. Tisti od 2 n izhodov y 0,.., y 2

Prikaži več

PowerPointova predstavitev

PowerPointova predstavitev IZKUŠNJE PRI PRILAGODITVI E-STORITEV AJPES ZAHTEVAM EIDAS ZA ČEZMEJNO PRIZNAVANJE MARJAN BABIČ, AJPES Vsebina Razlogi za vključitev v projekt CEF Telecom Izvajalno okolje AJPES in način integracije s SI-PASS

Prikaži več

PowerPointova predstavitev

PowerPointova predstavitev SKLOP 1: EKONOMIKA KMETIJSKEGA GOSPODARSTVA Upravljanje kmetijskih gospodarstev Tomaž Cör, KGZS Zavod KR Vsem značilnostim kmetijstva mora biti prilagojeno tudi upravljanje kmetij. Ker gre pri tem za gospodarsko

Prikaži več

Excel 2016

Excel 2016 PRIDOBIVANJE TEMELJN IH IN POKLICNIH KOMPETENC OD 2019 DO 2022 HIPERPOVEZAVA Gradivo za interno uporabo AVTOR: Belinda Lovrenčič Gradivo ni lektorirano V Maj 2019 Operacijo sofinancira Evropska unija,

Prikaži več

NAVODILA ZA UPORABO K01-WIFI Hvala, ker ste se odločili za nakup našega izdelka. Pred uporabo enote skrbno preberite ta Navodila za uporabo in jih shr

NAVODILA ZA UPORABO K01-WIFI Hvala, ker ste se odločili za nakup našega izdelka. Pred uporabo enote skrbno preberite ta Navodila za uporabo in jih shr NAVODILA ZA UPORABO Hvala, ker ste se odločili za nakup našega izdelka. Pred uporabo enote skrbno preberite ta in jih shranite za prihodnjo rabo Vsebina 1. Pregled 2. Sistem 3. Prednosti 4. Upravljanje

Prikaži več