UNIVERZA V MARIBORU FAKULTETA ZA ELEKTROTEHNIKO, RAČUNALNIŠTVO IN INFORMATIKO Nikolaj Čolić PRIMERJAVA PROGRAMSKIH JEZIKOV JAVA IN KOTLIN NA PRIMERU I

Velikost: px
Začni prikazovanje s strani:

Download "UNIVERZA V MARIBORU FAKULTETA ZA ELEKTROTEHNIKO, RAČUNALNIŠTVO IN INFORMATIKO Nikolaj Čolić PRIMERJAVA PROGRAMSKIH JEZIKOV JAVA IN KOTLIN NA PRIMERU I"

Transkripcija

1 UNIVERZA V MARIBORU FAKULTETA ZA ELEKTROTEHNIKO, RAČUNALNIŠTVO IN INFORMATIKO Nikolaj Čolić PRIMERJAVA PROGRAMSKIH JEZIKOV JAVA IN KOTLIN NA PRIMERU IMPLEMENTACIJE APLIKACIJE JAZGOBAR Diplomsko delo Maribor, junij 2018

2

3 PRIMERJAVA PROGRAMSKIH JEZIKOV JAVA IN KOTLIN NA PRIMERU IMPLEMENTACIJE APLIKACIJE JAZGOBAR Diplomsko delo Študent: Študijski program: Nikolaj Čolić Visokošolski strokovni Smer: Mentor: Lektorica: Računalništvo in informacijske tehnologije doc. dr. Matej Črepinšek Valentina Toman Čremožnik

4

5 ZAHVALA Prijazno se zahvaljujem mentorju, doc. dr. Mateju Črepinšku, za izkazano zaupanje ter vso pomoč pri nastajanju diplomskega dela. Prav tako se zahvaljujem družini, ki mi je med študijem stala ob strani ter me celostno podpirala. I

6 Primerjava programskih jezikov Java in Kotlin na primeru implementacije aplikacije JazGobar Ključne besede: Java, Kotlin, Android UDK: : (043.2) Povzetek V zaključnem delu bomo primerjali programska jezika Java in Kotlin na primeru mobilne aplikacije JazGobar. Najprej se bomo seznanili z obema programskima jezikoma, ki ju bomo primerjali na podlagi podanih primerov, ter preučili njune prednosti. Aplikacijo bomo razvili za Android operacijski sistem v obeh zgoraj omenjenih programskih jezikih s pomočjo Android Studia. II

7 The Comparison of Programming Languages Java and Kotlin in the Case of JazGobar application Implementation Key words: Java, Kotlin, Android UDK: : (043.2) Abstract In our final thesis, we will compare the programming languages Java and Kotlin using the example of the mobile application JazGobar. First, we will get acquainted with both programming languages which we will compare based on the given examples, and study their advantages. By using Android Studio, we will develop the application for the Android operating system in both programming languages mentioned above. III

8 KAZALO 1 UVOD PREDSTAVITEV UPORABLJENEGA ORODJA IN TEHNOLOGIJE Android Studio Android operacijski sistem PROGRAMSKI JEZIKI Zgodovina programskih jezikov Programski jezik Java Programski jezik Kotlin PRIMERJAVA JAVE IN KOTLINA Osnovni tipi Spremenljivke Inicializacija razreda Funkcije Lastnosti Zanke Delo s seznami Povezovanje komponent Vmesniki PREDNOSTI PROGRAMSKEGA JEZIKA KOTLIN Izrazitost IV

9 5.2 Null varnost Enostavno učenje Razširitvene funkcije Interoperabilnost Pametno pretvarjanje Funkcije višjega reda in lambda izrazi PREDNOSTI PROGRAMSKEGA JEZIKA JAVA MOBILNA APLIKACIJA JAZGOBAR Opis ideje Implementacija Uporabniški vmesnik Povezava elementov s programsko kodo Meni Eventbus Shranjevanje podatkov o uporabniku Dodajanje lokacij gob Shranjevanje in pridobivanje podatkov Prikaz lokacij gob Prikaz podrobosti o lokaciji gobe v novem oknu Končni izdelek SKLEP LITERATURA IN VIRI V

10 KAZALO SLIK SLIKA 2.1: ANDROID STUDIO IKONA... 3 SLIKA 2.2: ANDROID LOGOTIP... 4 SLIKA 3.1: ALGOLSKI JEZIKI... 7 SLIKA 3.2: DUKE, MASKOTA JAVE... 8 SLIKA 3.3: KOTLIN IKONA... 8 SLIKA 6.1: PRIMERJAVA ČASA PREVAJANJA Z GRADLOM V OBEH PROGRAMSKIH JEZIKIH SLIKA 6.2: PRETVROBA JAVANSKE KODE V KOTLIN SLIKA 7.1: IKONA APLIKACIJE JAZGOBAR SLIKA 7.2: IZGRADNJA UPORABNIŠKEGA VMESNIKA SLIKA 7.3: DELOVANJE EVENTBUS-A SLIKA 7.4: PODATKOVNI MODEL SLIKA 7.5: IZGLED VRSTICE SEZNAMA SLIKA 7.6: SEZNAM LOKACIJ GOB V MOBILNI APLIKACIJI JAZGOBAR SLIKA 7.7: PRIKAZ PODROBNOSTI O LOKACIJI GOB V MOBILNI APLIKACIJI JAZGOBAR SLIKA 8.1: PRIMERJAVA PROGRAMSKIH JEZIKOV JAVA IN KOTLIN KAZALO TABEL TABELA 1: PRIMERJAVA VELIKOSTI IN PORABE POMNILNIKA MED OBEMA APLIKACIJAMA VI

11 SEZNAM KRATIC API - Application programming interface APK - Application Package Kit GPS - Global Positioning System IDE - Integrated development environment JSON - JavaScript Object Notation JVM - Java virtual machine MB - Megabyte OS - Operacijski sistem PHP - PHP: Hypertext Preprocessor RAM - Random-access memory XML - Extensible Markup Language VII

12

13 1 UVOD Android operacijski sistem je poleg ios-a eden izmed vodilnih mobilni operacijskih sistemov na trgu. Od leta 2008 najdemo Android operacijski sistem na mobilnih napravah in tabličnih računalnikih različnih proizvajalcev. Android ima v svoji trgovini (Google Play) več milijonov aplikacij, ki so večinoma razvite s pomočjo Android Studia in posledično s programskim jezikom Java. Google je želel, da bi razvijalci lahko z manj napisane programske kode naredili enako stvar, zato je oktobra 2017 v Android Studio dodal programski jezik Kotlin. Kotlin je poleg Jave postal uradni programski jezik Android Studia. Dodali so ga, ker so želeli imeti boljši programski jezik kot Java, ki pa ohranja kompatibilnost z njo. Seznanili se bomo s Kotlin programskim jezikom, ga preučili in primerjali z Javo. V teoretičnem delu zaključnega dela bomo analizirali enostavnost in prednosti programskega jezika Kotlin. Prav tako bomo analizirali zahtevnost preskoka iz programskega jezika Java v programski jezik Kotlin. Za praktični del naloge bomo izdelali mobilno aplikacijo JazGobar za operacijski sistem Android. Sprva bomo aplikacijo izdelali v Javi, nato jo bomo s pomočjo Android Studia pretvorili v Kotlin programski jezik. Predstavili bomo uporabljeno orodje in tehnologijo pri razvoju zaključnega dela. Opisali bomo zgodovino razvoja programskih jezikov in predstavili programska jezika Javo in Kotlin. Sledi natančna primerjava med programskima jezikoma. Primerjali bomo naslednje: inicializacijo razreda, uporabo zank, spremenljivke, funkcije, lastnoti, vmesnike. 1

14 Poleg tega bomo navedli in natančno opisali še vse prednosti, ki jih ponuja programski jezik Kotlin, in prednosti programskega jezika Java. Na koncu bomo predstavili implementacijo aplikacije JazGobar ter pokazali zaminive odseke kode v obeh programskih jezikih. 2

15 2 PREDSTAVITEV UPORABLJENEGA ORODJA IN TEHNOLOGIJE V tem poglavju bomo predstavili orodje in tehnologijo, ki smo ju uporabili pri izdelavi zaključnega dela. 2.1 Android Studio Android Studio (Slika 2.1) je uradno razvijalsko okolje za Googlov Android operacijski sistem, ki ga lahko prenesemo na Windows, macos in Linux operacijski sistem. Konec leta 2014 je izšla uradna verzija programa. To so predstavili kot zamenjavo za orodje Eclipse. Razvijalci lahko razvijajo z Javo, C++ in XML-jem. XML se uporablja za vizualni del aplikacije, Java in C++ nam pa omogočata delovanje aplikacije. Programski jezik razvijalcem ni delal težav, saj so ga poznali že prej, morali so se navaditi samo na nov uporabniški vmesnik programa [1]. Slika 2.1: Android Studio ikona (Vir: Wikipedia, Poleg programa za razvijanje dobimo tudi Android Virtual Device, ki nam omogoča poganjanje emulatorja in posledično tudi Android aplikacije. To je uporabno predvsem takrat, ko nimamo telefona z Android operacijskim sistemom oz. primernega telefona za 3

16 testiranje aplikacije, ki jo razvijamo. Na emulatorju lahko izvajamo vse operacije, kot da bi imeli pravi telefon [2]. 2.2 Android operacijski sistem Android (Slika 2.2) je mobilni operacijsi sistem, ki ga je razvilo podjetje Google. Zasnovan je predvsem za mobilne naprave z zaslonom na dotik, kot so pametni telefoni in tablični računalniki. Google je dodatno razvil Android TV za televizorje, Android Auto za avtomobile in Wear OS za pametne ure. Različice Androida se uporabljajo tudi na igralnih konzolah, digitalnih fotoaparatih, osebnih računalnikih in drugi elektroniki [3]. Slika 2.2: Android logotip (Vir: Wikipedia, Prvotno je Android razvilo podjetje Android Inc., ki ga je leta 2005 kupil Google. Google je Android operacijski sistem predstavil leta 2007, leto za tem pa je predstavil prvo komercialno Android napravo. Operacijski sistem je od takrat dobil kar nekaj različic. Trenutna različica je 8.1, imenovana je»oreo«, ki je bila objavljena decembra 2017 [3]. Android je od leta 2011 po celem svetu najbolj prodajan operacijski sistem za pametne telefone. Od maja 2017 ima več kot dve milijardi mesečno aktivnih uporabnikov in več kot 3,5 milijonov aplikacij v svoji trgovini (Google Play) [3]. 4

17 3 PROGRAMSKI JEZIKI»Trenutno obstaja več kot programskih jezikov in v prihodnosti lahko pričakujemo še večji razmah. Zato je nemogoče pričakovati, da bomo vedno uporabljali samo en programski jezik. Vsekakor pa nikoli ne bo obstajal en sam univerzalni jezik! Zato mora programer dobro poznati osnovne principe (koncepte) programskih jezikov. Tako se bo veliko hitreje naučil novega, njemu še neznanega programskega jezika. Če dobro poznamo principe programskih jezikov, jih tudi lažje ocenjujemo. Izbira programskega jezika je ena izmed pomembnih odločitev«[4].»nekateri programski jeziki so primerni za hitre rešitve in prototipiranje, spet drugi za večje projekte. Tako je sposobnost ocenjevanja jezika zelo pomembna pri določanju uporabnosti programskega jezika. Poznavanje principov programskih jezikov je tudi pogoj za uspešno načrtovanje novih. Mnogi ne bodo nikoli načrtovali splošnonamenskega programskega jezika, prav gotovo pa se bodo srečali z načrtovanjem in implementacijo kakšnega domensko specifičnega jezika, npr. vprašalnega jezika (»query language«). V tem primeru bo pridobljeno znanje zelo koristno. S študijem programskih jezikov spoznamo tudi njihovo implementacijo, kar nam pomaga pri razumevanju programskega jezika in tudi pri samem programiranju«[4].»posamezni programski jeziki imajo različne značilnosti in poglede na načrtovanje in opis algoritmov, podatkovnih in krmilnih struktur. Z učenjem novih programskih jezikov najdemo nove poti za izražanje svojih idej. Programski jeziki so temelj računalništva in brez njihovega podrobnega poznavanja ne moremo biti uspešni«[4].»da je programski jezik uporaben, mora zadoščati določenim zahtevam. Programski jezik naj bo univerzalen, tako da omogoča zapis vsake rešljive naloge v izbrani domeni. Na prvi pogled je to zelo stroga zahteva, vendar je univerzalen že vsak jezik, v katerem lahko definiramo rekurzivne funkcije. Nadalje zahtevamo, naj programski jezik omogoča reševanje naloge na naraven način vsaj s področja njegove uporabe, kot so npr: 5

18 znanstvene aplikacije, poslovne aplikacije, umetna inteligenca, sistemsko programiranje itd. S programskim jezikom, katerega edini podatkovni tip so števila in polja, lahko na naraven način rešujemo naloge iz numeričnega procesiranja. Manj primeren je za reševanje nalog umetne inteligence. Programski jezik je uporaben, če ga je mogoče implementirati na računalniku na učinkovit način«[4]. 3.1 Zgodovina programskih jezikov»čeprav je od prvega digitalnega računalništva preteklo samo dobrih 50 let, je bilo v tem obdobju na področju programskih jezikov kar nekaj pomembnih mejnikov. Programski jeziki imajo tudi svojo predzgodovinsko obdobje, in sicer, ko računalniki še sploh niso obstajali. Obstajali pa so formalni modeli računanja in ideje, kako bi zapisovali programe«[4].»začetna, 50. in 60. leta prejšnjega stoletja, lahko označimo kot izumiteljska, saj je bilo mnogo novosti: zbirniki, prevajalniki, interpreterji, prvi visoki programski jeziki, strukturno programiranje, abstrakcija, formalna sintaksa, objektno usmerjeno programiranje, funkcijsko programiranje, vertifikacija programov itd. V letih, ki so sledila (70., 80., 90.), takšnega napredka in novih revolucionarnih idej ni bilo več. Osnovne ideje so bile izboljšane, sledila je učinkovitejša implementacija, teorija je postala bolj praktična itd.«[4].»današnje programske jezike načrtujemo iz izkušenj, ki smo jih dobili pri načrtovanju predhodnih programskih jezikov. Programski jeziki se neprestano razvijajo in izboljšujejo, zato je skoraj nemogoče napovedati, kakšno bo stanje na tem področju čez nekaj let. Prva visoka programska jezika sta bila fortan in cobol. Osnovni cilj, ki so ga imeli načrtovalci fortana, je bilo učinkovito izvajanje generirane objektne kode. Tako je prevajalnik za fortan tudi prvi prevajalnik s fazo optimizacije. Sam programski jezik je imel veliko pomanjkljivosti in neregularnosti. Samemu načrtovanju jezika niso posvečali veliko pozornosti, saj so menili, da je to enostavno opravilo. Fortan je vpeljal simbolične izraze in podprograme s parametri«[4]. 6

19 Slika 3.1: Algolski jeziki (Vir: M. Mernik, V. Žumer, Programski jeziki, Inštitut za računalništvo)»programski jezik algol-60 je zelo vplival na razvoj mnogih programskih jezikov, ki jih zato imenujemo tudi algolski jeziki (Slika 3.1). Programska jezika fortran in algol-60 sta bila namenjena predvsem numeričnemu računanju, medtem ko je bil jezik cobol bolj primeren za obdelovanje poslovnih podatkov. Programski jezik PL/I je bil načrtovan z namenom, da postane splošnonamenski jezik. Tako so v njem združene značilnosti prejšnih treh jezikov. Vpeljal je tudi nove koncepte, kot so izjeme in sočasnost. Tako je PL/I postal obsežen jezik, ki se ga je bilo težko naučiti, uporabljati in implementirati. Izkušnje z jezikom PL/I so pokazale, da je za razvoj splošnonamenskega jezika neprimerno združevati samo značilnosti drugih jezikov. Boljši način je bil, da so izbrali primerno množico konceptov in jih sistematično združili«[4].»takšen pristop so ubrali načrtovalci programskega jezika algol-60, kjer lahko npr. definiramo polje števil, polje polj, polje procedur, in procedure lahko vračajo tako števila kot polja ter procedure. Značilnosti programskega jezika algol-60 so: uporabniško definirani tipi, strukturna ekvivalenca tipov, disjunktna unija, referenčni tip, fleksibilna polja. Čeprav so načrtovalci programskega jezika algol-60 težili k majhni množici neodvisnih konceptov, so le-ti povezani med seboj na zelo kompleksen način. Berljivost in razumljivost tako zapisanih programov je slabša«[4]. 7

20 3.2 Programski jezik Java Java (Slika 3.2) je splošnonamenski programski jezik, ki je konkurenčen, objektno orientiran in zasnovan tako, da je čim manj implementacijsko odvisen. Narejen je tako, da omogoča razvijalcem, da razvijejo kodo enkrat in jo poganjajo kjerkoli. To pomeni, da se lahko prevedena javanska koda izvaja na vseh platformah, ki podpirajo Javo. Od leta 2016 je Java najbolj uporabljen programski jezik predvsem za aplikacije tipa odjemalec-strežnik. Java ima veliko sintaks iz programskih jezikov C in C++. Zadnja različica je Java 10, ki je bila izdana marca 2018, samo pol leta za tem, ko je izšla Java 9 [5]. Slika 3.2: Duke, maskota Jave (Vir: Programski jezik Kotlin Kotlin (Slika 3.3) je statični programski jezik, ki se je pojavil leta Izvaja se na JVM. Lahko ga prevedemo tudi v JavaScript izvorno kodo. Sintaksa Kotlina ni združljiva s programskim jezikom Java, temveč omogoča povezljivost z njo. To pomeni, da lahko imamo v enem projektu tako javansko kodo kot Kotlin (seveda v ločenih datotekah), pa bo program popolnoma delujoč [6]. Slika 3.3: Kotlin ikona (Vir: 8

21 Od Android Studia 3.0, ki je izšel oktobra 2017, je Kotlin postal v celoti podprt programski jezik za razvoj mobilnih aplikacij Android. Vključen je v Android Studio kot alternativa programskemu jeziku Java. Zadnja različica Kotlina je , ki je izšla marca 2018 [6]. 9

22 4 PRIMERJAVA JAVE IN KOTLINA Za Java razvijalce je Kotlin zelo intiutiven in enostaven programski jezik za učenje. Večji del programskega jezika Kotlin je zelo podoben temu, kar že poznamo, razlike so le v principu (konceptu), ki ga hitro usvojimo. Android Studio razume, prevaja in poganja kodo, napisano v Kotlinu. Podjetje, ki razvija IDE, zagotavlja podporo programskemu jeziku Kotlin, kar pomeni, da smo Android razvijalci v dobrem položaju [7]. Naslednji primeri so povzeti in prilagojeni iz knjige Kotlin for Android Developers [7] ter spletnih strani Yalantis [8], Kotlinlang [9] in Tutorialspoint [10]. 4.1 Osnovni tipi V programskem jeziku Kotlin ne najdemo takšnih primitivnih tipov, kot jih uporabljamo v programskem jeziku Java. To je zelo dobro, saj imamo homogen način za delo z obstoječimi tipi. Seveda še zmeraj najdemo osnovne tipe, kot so»integer«,»float«,»char«in»boolean«, ampak se vsi obnašajo kot objekt. Imena osnovnih tipov in njihovo obnašanje je zelo podobno kot v programskem jeziku Java, ampak še zmeraj obstaja nekaj razlik [7]: 10 Ne obstaja direktna pretvorba med numeričnimi tipi (npr. ne moremo Int vrednosti dodeliti spremenljivki tipa Double). Lahko pa to storimo z eksplicitno pretvorbo z uporabo ene izmed obstoječih funkcij. Za spodnji primer smo uporabili funkcijo todouble(), za pretvorbo Int vrednosti v Double [7]: val i: Int = 7 // Eksplicitna pretvorba Int v Double val d: Double = i.todouble() Znakov (Char) ne moremo direkto uporabiti kot števila. Lahko jih pa pretvorimo v število z uporabo funkcije toint(), kot prikazuje spodnji primer [7]: val c: Char = 'c' val i: Int = c.toint() Logični operatorji v programskem jeziku Java in Kotlin se malce razlikujejo. Podrobno si bomo pogledali razliko med logičnima operatorjema»in«in»ali«. V programskem jeziku Java uporabljamo oznake za operatorje, v programskem jeziku Kotlin pa napišemo kar z besedo [7].

23 // Java int operatorali = FLAG1 FLAG2; int operatorin = FLAG1 & FLAG2; // Kotlin val operatorali = FLAG1 or FLAG2 val operatorin = FLAG1 and FLAG2 Do niza znakov (String) lahko dostopamo kot do tabele in posledično se lahko sprehodimo po njej z uporabo for zanke. V programskem jeziku Kotlin bi zgornji primer izgledal takole [7]: val s = "Primer" val c = s[2] // dobimo črko 'i' // sprehod čez String val s = "Primer" for (c in s) { print(c) 4.2 Spremenljivke V programskem jeziku Kotlin lahko določimo, ali so spremenljivke spremenljive (z uporabo besede var) ali pa so nespremenljive oz. konstantne spremenljivke (z uporabo besede val). Podobno v programskem jeziku Java uporabljamo besedo final pred nespremenljivo spremenljivko. Nespemenljivost je pomemben princip (koncept) v programskem jeziku Kotlin in v ostalih modernih programskih jezikih [7]. Nespremenljiv objekt je objekt, ki mu ne moremo spremeniti stanja po njegovi inicializaciji. Če potrebujemo spremenjeno stanje, moramo narediti nov objekt. To naredi programsko opremo bolj robustno in predvidljivo. V programskem jeziku Java je večina objektov spremenljivih, kar pomeni, da jih lahko spreminjamo kjerkoli, imamo pa dostop in s tem vplivamo na celotno aplikacijo [7]. Ker se nespremenljivi objekti ne morejo spremeniti, so zato tudi varni pred nitmi in zanje ne potrebujemo posebnega nadzora, saj dobijo vse niti enak objekt [7]. Način našega razmišljanja se malce spremeni, če želimo v programskem jeziku Kotlin izkoristiti nespremenljivost. Ključni prncip je, da uporabimo besedo val, kjerkoli je 11

24 mogoče. Seveda bodo primeri (še posebej v Androidu), kjer tega ne bo mogoče narediti. Še ena dobra stvar je, da ni potrebno določiti tipa spremenljivke, saj ga spremenljivka sama ugotovi iz vrednosti. To je zelo dobro, saj naredi kodo bolj berljivo in omogoča hitrejše spreminjanje. Spodaj si lahko pogledamo nekaj primerov v programskem jeziku Kotlin [7]: val s = "Example" // String val i = 23 // Int val actionbar = supportactionbar // ActionBar 4.3 Inicializacija razreda Razredi v programskem jeziku Kotlin imajo enostavno sintakso, ampak je vseeno malce drugačna od tiste, ki smo jo navajeni v Javi. Poglejmo enostaven primer razreda v programskem jeziku Kotlin [7]: class MainActivity { Kot vidimo zgoraj, se osnovni del sintakse ne razlikuje od tiste, ki smo jo navajeni iz programskega jezika Java. V programskem jeziku Kotlin imajo razredi edinstven privzeti konstruktor. Za posebne primere lahko imamo tudi dva konstruktorja, ampak v večini primerov nam zadošča le eden. Takoj za imenom razreda sledita oklepaja, znotraj katerega se nahajajo parametri. Pozorni moramo biti, da najprej napišemo ime spremenljivke, šele nato njen tip. Zavitih oklepajev ne uporabljamo, če razred ne vsebuje nobene vsebine, kot prikazuje spodnji primer [7]: class Oseba(ime: String, priimek: String) Verjetno se sprašujete, kje se nahaja telo konstruktorja. Lahko ga za zapišemo znotraj init bloka: public class Oseba(ime: String, priimek: String) { init {... Poglejmo zgornji primer še v programskem jeziku Java: class Oseba { public Oseba(String ime, String priimek) { 12

25 Vidimo, da je razlika predvsem v izgledu konstruktorja, kot tudi vrstnem redu zapisovanja parametrov znotraj oklepajev. V programskem jeziku Java najprej napišemo tip spremenljivke, šele nato ime. 4.4 Funkcije Sintaksa za funkcije se razlikuje med programskima jezikoma Java in Kotlin. Razliko si bomo pogledali na preprostem primeru. Napišimo funkcijo, ki sprejme dva parametra tipa Integer in vrne njihovo vsoto. Poglejmo, kako izgleda zgornji primer v programskem jeziku Java: public int vsota(int st1, int st2) { return st1 + st2; V programskem jeziku Kotlin pa je drugače: fun vsota(st1: Int, st2: Int): Int { return st1 + st2 V programskem jeziku Kotlin nam ni treba pred začetkom funkcije pisati public, saj je funkcija samodejno vidna povsod, razen če seveda ne napišemo private. Nato vedno napišemo rezervirano besedo fun, da vemo, da gre za funkcijo oz. da jo deklariramo. Naslednja stvar, ki jo napišemo, ni tip, ki ga funkcija vrača, ampak ime funkcije (v našem primeru vsota). Znotraj oklepaja napišemo parametre, ki jih funkcija sprejema (ime in šele nato tip spremenljivke). V programskem jeziku Kotlin funkcije vedno vračajo vrednost, ki jo določimo, v nasportnem primeru vračajo Unit. Unit je kot void v programskem jeziku Java, le s to razliko, da je objekt. Seveda lahko določimo, da funkcija vrača katerikoli tip (v našem primeru Int). Znotraj zavitih oklepajev pa sledi klasična koda, ki jo mora funkcija izvesti. 13

26 4.5 Lastnosti Lastnosti v programskem jeziku Kotlin so ekvivalentne poljem v programskem jeziku Java in omogočajo dodatne operacije. Lastnosti opravijo enako delo kot polja, poleg pa imamo še get in set metode. Poglejmo razlike na naslednjem primeru [7]: public class Oseba { private String ime; public String getime() { return ime; public void setime(string ime) { this.ime = ime;... Oseba oseba = new Oseba(); oseba.setime("janez"); String ime = oseba.getime(); Zgornja koda je napisana v programskem jeziku Java ter omogoča varno dostopanje in spreminjanje polja. V programskem jeziku Kotlin potrebujemo samo lastnosti [7]: class Oseba {... var ime: String = "" val oseba = Oseba() oseba.ime = "Janez" val ime = oseba.ime Če ni drugače, določeno lastnost uporablja privzete set in get metode. Seveda pa lahko te metode prilagodimo svojim potrebam, ne da spreminjamo obstoječe kode [7]: class Oseba { var ime: String = "" get() = field.touppercase() set(value) { field = "Ime: $value" 14

27 4.6 Zanke Sintaksa za osnovne for zanke je v programskem jeziku Kotlin drugačna od tistih, ki smo jih vajeni pisati v Javi in ostalih programskih jezikih kot npr. C++ in C#. Pod osnovne for zanke mislimo tiste, ki jih uporabljamo npr. za izpis števil od 0 do 10 itd. Poglejmo si enostaven primer izpisa prvih 10 števil v programskem jeziku Java: // Izpiše for(int x = 0; x < 11; x++){ System.out.print( x ); Enako for zanko bi v programskem jeziku Kotlinu napisali takole: // Izpiše for (x in 0..10) { print(x) V programskem jeziku Kotlin ni treba določiti tipa spremenljivke, ampak samo določimo ime spremenljivke (v našem primeru x) ter določimo interval izvajanja (od 0 do 10 oz ). Zapis se malce spremeni, če želimo v programskem jeziku Kotlin izpisati vsako drugo število na intervalu od 0 do 10. // Izpiše for (x in step 2) { print(x) Vse, kar smo dodali, je funkcija step() in število 2. Število, ki ga dodamo poleg besede step, nam pove, za koliko bomo povečali spremenljivko po vsaki iteraciji, v našem primeru spremenljivko x. Oba zgornja primera v programskem jeziku Kotlin sta povečevala vrednost spremenljivke, če jo želimo zmanjševati oz. izpisati števila v obratnem vrstnem redu, moramo uporabiti funkcijo downto(). Poglejmo si spodnji primer v programskem jeziku Kotlin: // Izpiše for (x in 10 downto 0) { print(x) Vse, kar moramo narediti je, da napišemo začetno vrednost (v našem primeru 10) in poleg besede downto napišemo število, do katerega želimo izvajati funkcijo (v našem primeru 0). Tudi v zgornji for zanki lahko uporabimo funkcijo step() in povečamo korak zmanjševanja, kot prikazuje spodnji primer v programskem jeziku Kotlin: 15

28 // Izpiše for (x in 10 downto 0 step 2) { print(x) For zanki, s katerima se premikamo po seznamih, sta si v programskih jezikih Java in Kotlin precej podobni. Imamo seznam imen, ki vsebuje štiri imena, in jih želimo izpisati tako v programskem jeziku Java kot v programskem jeziku Kotlin. Poglejmo kodo v programskem jeziku Java: String [] imena = {"Ana", "Žan", "Metka", "Janez"; // Izpiše Ana Žan Metka Janez for( String ime : imena ) { System.out.print( ime ); Ustvarili smo seznam z imeni in v for zanki ustvarili spremenljivko, ime tipa String, ki jo uporabimo za izpis vseh imen v seznamu. V programskem jeziku Kotlin bi zgornji primer izgledal takole: val imena = listof("ana", "Žan", "Metka", "Janez") // Izpiše Ana Žan Metka Janez for (ime in imena) { print(ime) Poleg tega, da se drugače inicializira seznam, lahko opazimo tudi, da je drugačna sintaksa for zanke. V tem primeru ni treba spremenljivki določiti tipa, ampak samo ime spremenljivke (v našem primeru»ime«) in dvopičje (»:«), ki ga imamo v programskem jeziku Java, tukaj zamenjamo z»in«. While zanke so popolnoma enake tako v programskem jeziku Java kot v programskem jeziku Kotlin. 16

29 4.7 Delo s seznami Zelo pogosto se zgodi, da moramo narediti zahtevne operacije nad podatkovnimi seznami. Recimo, da imamo seznam študentov, iz katerega moramo pridobiti tri študente z oceno A (0) in dva študenta z oceno B (1). Poglejmo si rešitev v programskem jeziku Kotlin [8]: var students = listof(student("žan", 0), Student("Ana", 2), Student("Metka", 1), Student("Janez", 0), Student("Alenka", 0)) var firstlist = students.filter { it.mark == 0.take(3) var secondlist = students.filter { it.mark == 1.take(2) Tako bi nalogo rešili v programskem jeziku Java [8]: ArrayList<Student> students = new ArrayList<Student>() {{ add(new Student("Žan", 0)); add(new Student("Ana", 2)); add(new Student("Metka", 1)); add(new Student("Janez", 0)); add(new Student("Alenka", 0)); ; ArrayList<Student> firstlist = new ArrayList<>(); ArrayList<Student> secondlist = new ArrayList<>(); for (Student student: students) { boolean isfirstfilled = firstlist.size() >= 3; boolean issecondfilled = secondlist.size() >= 2; if (isfirstfilled && issecondfilled) break; int mark = student.getmark(); if (mark == 0 &&!isfirstfilled) { firstlist.add(student); else if (mark == 1 &&!issecondfilled) { secondlist.add(student); To je samo primerjava, kako delamo s seznami v programskem jeziku Java in programskem jeziku Kotlin. Si lahko predstavljate, kakšna bi bila razlika, če bi delali s seznami na velikem projektu [8]? 17

30 4.8 Povezovanje komponent Večino programerjev, ki razvijajo Android aplikacije s programskim jezikom Java, moti, da morajo neprestano deklarirati spremenljivke za dostop do vsake komponente, ki jo potrebujejo (view binding). Če uporabljamo programski jezik Kotlin, lahko pozabimo na povezovanje komponent. Ni potrebno več pisati tolikšnih dodatnih spremenljivk, saj lahko direktno dostopamo do komponent preko unikatnega identifikatorja, ki smo ga določili v datoteki XML. Poglejmo si, kako bi v programskem jeziku Java implementirali, da ko uporabnik klikne na gumb, se izpiše besedilo»kliknili ste na gumb«[8]: public class MainActivity extends AppCompatActivity protected void oncreate(@nullable Bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); Button gumb = (Button) findviewbyid(r.id.gumb); final TextView besedilo = (TextView) findviewbyid(r.id.besedilo); gumb.setonclicklistener(new View.OnClickListener() public void onclick(view v) { besedilo.settext("kliknili ste na gumb"); ); Sedaj pa rešimo problem v programskem jeziku Kotlin [8]: class MainActivity : AppCompatActivity() { override fun oncreate(savedinstancestate: Bundle?, persistentstate: PersistableBundle?) { super.oncreate(savedinstancestate, persistentstate) setcontentview(r.layout.activity_main) gumb.setonclicklistener { besedilo.text = "Kliknili ste na gumb" V programskem jeziku Kotlin je stvar enostavnejša. V bistvu se metoda findviewbyid() še zmeraj uporablja, ampak je ni treba napisati razvijalcem, saj jo Kotlin napiše namesto njih [8]. 18

31 4.9 Vmesniki Vmesniki (interface) v programskem jeziku Kotlin so močnejši od tistih, ki jih najdemo v Javi 7. Lahko jih uporabljamo tudi na tak način, kot smo jih navajeni uporabljati v programskem jeziku Java. Predstavljajte si, da imamo nekaj živali in nekatere od njih lahko letijo. Vmesnik za živali, ki lahko letijo, bi izgledal tako [7]: interface FlyingAnimal { fun fly() Tako ptice kot netopriji lahko letijo s premikanjem kril. Torej, naredimo dva razreda Ptica oz. Bird in Netopir oz. Bat [7]: class Ptica : FlyingAnimal { val wings: Wings = Wings() override fun fly() = wings.move() class Bat : FlyingAnimal { val wings: Wings = Wings() override fun fly() = wings.move() Ko dva razreda dedujeta iz enega vmesnika, si zelo pogosto delita isto implementacijo. Vmesniki v Javi 7 lahko samo definirajo obnašanje, ampak ga ne morejo implementirati [7]. Na drugi strani pa so vmesniki v programskem jeziku Kotlin zmožni implementirati funkcije. Edina razlika je v tem, da bo razred odgovoren za shranjevanje lastnostni vmesnika. V programskem jeziku Kotlin lahko naredimo, da vmesnik implementira funkcijo fly [7]: interface FlyingAnimal { val wings: Wings fun fly() = wings.move() Sedaj morata razreda prepisati lastnost: class Bird : FlyingAnimal { override val wings: Wings = Wings() class Bat : FlyingAnimal { override val wings: Wings = Wings() 19

32 Sedaj lahko tako ptice kot netopirji letijo: val bird = Bird() val bat = Bat() bird.fly() bat.fly() 20

33 5 PREDNOSTI PROGRAMSKEGA JEZIKA KOTLIN Poglejmo si, kakšne in katere so prednosti Kotlina v primerjavi z Javo 6 [7]? Večja izrazitost: to je ena izmed pomebnejših kvalitet. Veliko več lahko napišemo z manj kode [7]. Varnost: Kotlin je null varen, kar pomeni, da morebitne ničelne vrednosti obravnavamo v času prevajanja, da bi preprečili napake v času izvajanja. Objekt lahko ima ničelno vrednost, vendar moramo to eksplicitno navesti in pred njegovo uporabo tudi preveriti. S tem bomo prihranili veliko časa, saj ne bo potrebno razhroščevati in popravljati neveljavnih napak [7]. Funkcionalnost: Kotlin je v bistvu objetkno orientiran in ni čisti funkcijski programski jezik. Kot večina programskih jezikov tudi tukaj najdemo veliko konceptov funkcijskega programiranja kot npr. lambda izrazi, ki jih uporabljamo za lažje reševanje problemov. Še ena dobra lastnost je način reševanja problemov z zbirkami [7]. Možnost razširitvenih funkcij: to pomeni, da lahko katerikoli razred razširimo z novimi lastostmi, tudi če nimamo dostopa do izvorne kode [7]. Interoperabilnost: še naprej lahko uporabljamo večino knjižnic in programske kode, napisane v Javi, in sicer zaradi odlične interoperabilnosti med obema jezikoma. Možno je narediti mešani projekt, ki bo vseboval tako Kotlin kot Java datoteke [7]. 5.1 Izrazitost Ena izmed večjih prednosti programskega jezika Kotlin je ta, da lahko z manj kode naredimo več. Če napišemo manj kode, potem tudi posledično naredimo manj napak med samim pisanjem [8]. public final class Oseba { private String ime; private int starost; private float visina; public Oseba(String ime, int starost, float visina) { this.ime = ime; this.starost = starost; this.visina = visina; public Oseba(String ime, int starost) { this.ime = ime; this.starost = starost; this.visina = 1.8f; 21

34 public String getime() { return ime; public void setime(string ime) { this.ime = ime; public int getstarost() { return starost; public void setstarost(int starost) { this.starost = starost; public float getvisina() { return visina; public void setvisina(float visina) { this.visina = public String tostring() { return "Oseba{" + "ime='" + ime + '\'' + ", starost=" + starost + ", visina=" + visina + public boolean equals(object o) { if (this == o) return true; if (o == null getclass()!= o.getclass()) return false; Oseba Oseba = (Oseba) o; if (starost!= Oseba.starost) return false; if (Float.compare(Oseba.visina, visina)!= 0) return false; return ime!= null? ime.equals(oseba.ime) : Oseba.ime == public int hashcode() { int result = ime!= null? ime.hashcode() : 0; result = 31 * result + starost; result = 31 * result + (visina!= +0.0f? Float.floatToIntBits(visina) : 0); return result; 22

35 Zgornji primer razreda je napisan v programskem jeziku Java. Naredili smo razred Oseba z lastostmi, ime, starost in velikost. Težko je gledati toliko programske kode, ko ugotoviš, kako malo naredi. Spodaj vidimo še enak primer razreda, napisanega v programskem jeziku Kotlin [8]: data class Oseba(var ime: String, var starost: Int, var visina: Float = 1.8f) Kot je opazno, je razlika v številu vrstic, v primerjavi s programskim jezikom Java, ogromna. Samodejno dobimo funkcije za nastavljanje in pridobivanje lastnosti (set in get metode), za Hash vrednosti, za izpis in kopiranje. Če bi radi kakšno izmed funkcij spremenili, jo lahko prepišemo oz. dopolnimo po naših željah, ampak v večini primerov nam zadostujejo privzete funkcije [8]. 5.2 Null varnost Null varnost je ena izmed najbolj zanimivih lastnosti programskega jezika Kotlin, seveda ob predpostavki, da smo prej uporabljali Javo 7. V programskem jeziku Java lahko naredimo naslednje [7]: Forecast forecast = null; forecast.tostring(); Zgornja koda se bo brez težav prevedla in mogoče bomo dobili opozorilo od IDE. Ko bomo kodo pognali, bomo seveda dobili napako»nullpointerexception«. To lahko postane zelo nevarno. Tudi če mislimo, da imamo vse pod kontrolo, bomo začeli izgubljati nadzor, ko bo koda začela sunkovito rasti. Končamo z veliko»nullpointerexception«napakami ali pa imamo preverjane vrednosti spremenljivk (verjetno imamo mešanico obojega) [7]. Večina modernih programskih jezikov rešuje to težavo na edinstven način. Programski jezik Kotlin uporablja vprašaje za indentifikacijo ničelnih tipov, podobno kot programski jezik Swift (programski jezik za razvoj ios aplikacij). Ker je v programskem jeziku Kotlin vse objekt (tudi javanski primitivni tipi), pomeni, da lahko imajo vrednost null. Potem lahko imamo tudi ničelne spremenljivke tipa integer [7]: val a: Int? = null 23

36 Dokler ne preverimo vrednosti, ne moremo uporabljati ničenih tipov, npr. spodnja koda se ne bo prevedla [7]: val a: Int? = null a.tolong() Koda se ne prevede, saj bi lahko spremenljivka»a«imela vrednost null (v našem primeru jo tudi ima), in prevajalnik se tega zaveda. Dokler ne preverimo, ali ima spremenljivka vrednost null, je ne bomo mogli uporabljati [7]. V nadaljevanju pride do izraza še ena funkcija, imenovana smart cast, ki jo najdemo v programskem jeziku Kotlin. Pomeni, da od trenutka, ko smo preverili vrednost objekta, se objekt pretvori v neničelen tip. Poglejmo primer [7]: val a: Int? = null... if (a!= null) { a.tolong() Znotraj pogojnega stavka if, se Int? pretvori v Int, zati ni potrebno več preverjati njegove vrednosti. Ko pa enkrat zapustimo if stavek, bomo morali zopet preveriti vrednost objekta. To seveda deluje samo, če gre za spremenljivko, ki ji ne more druga nit spremeniti vrednosti, saj bi se lahko zgodilo, da objekt postane null. Koda deluje, če imamo val spremenljivko oz. lokalno (val ali var) spremenljivko [7]. Zgornji primer nakazuje, da bomo imeli veliko dela s preverjanjem vrednosti objektov, ampak temu ni tako, ker večino časa ne bomo potrebovali ničelnih objektov. Programski jezik Kotlin pa ima tudi svoj mehanizem, ki olajša zadevo. Npr. zgornji primer lahko poenostavimo tako [7]: val a: Int? = null... a?.tolong() Uporabljamo tako imenovani varni operator (safe call operator, napisan?). Zgornja vrstica kode se bo izvedla samo, če spremenljivka nima vrednosti null, v nasprotnem primeru se ne bo zgodilo nič. Lahko zagotovimo alternativo za ničelne vrednosti s pomočjo Elvis operatorja (?:) [7]: val a: Int? = null... val mylong = a?.tolong()?: 0L 24

37 Zgodili se bodo tudi primeri, kjer bomo zagotovo vedeli, da delamo z neničelnim objektom. Takrat lahko prevajalnik prisilimo, da dela z neničelnim objektom, z uporabo!! operatorja [7]: val a: Int? = null a!!.tolong() Zgornja koda se bo brez težav prevedla, ampak se bo v času izvajanja ustavila. Moramo zagotoviti, da bomo operator uporabljali samo v posebnih primerih. Večinoma lahko uporabimo tudi alternativne rešitve. Koda polna!! pomeni, da nekaj ni prav narejeno [7]. 5.3 Enostavno učenje Tudi brez predznanja je učenje programskega jezika Kotlin enostavnejše od učenja programskega jezika Java. Če želimo izdelati preprosto aplikacijo, ki seveda ni»hello world!«, potrebujemo samo nekaj ur. Poleg tega, če ste že kdaj razvijali v C# ali Javi, ne boste imeli težav pri prehodu na programski jezik Kotlin. JetBrain se je zelo posvetil dokumentaciji in jo napisal tako, da bi osnove programskega jezika Kotlin brez težav razumel tudi»osnovnošolec«[11]. 5.4 Razširitvene funkcije Programski jezik Java še vedno ne razmišlja o vpeljavi razširitvene funkcije (extension functions). Po drugi strani boste razširitvene funkcije v programskem jeziku Kotlin zelo veseli, če ste jo že prej uporabljali v C# ali Gosu. Razširitvena funkcija je tista, ki doda novo obnašanje obstoječemu razredu, če nimamo izvorne kode tega razreda. V programskem jeziku Java je to večinoma implementirano v utility razredih, ki vsebujejo niz statičnih metod. Prednost uporabe razširitvenih funkcij v programskem jeziku Kotlin je v tem, da ni treba pošiljati objekta kot parameter. Razširitvena funkcija se obnaša, kot da je del razreda [7]. Kot primer lahko naredimo toast funkcijo, ki ji kot parameter ne bo treba dati konteksta (»context«) [7]: fun Context.toast(message: CharSequence, duration: Int = Toast.LENGTH_SHORT) { Toast.makeText(this, message, duration).show() 25

38 Zgornjo funkcijo lahko uporabimo znotraj kateregakoli okna [7]: toast("hello world!") toast("hello world!", Toast.LENGTH_LONG) Razširitvene funkcije lahko deklariramo v katerikoli datoteki, priporočjivo je, da ustvarimo datoteke, ki vsebujejo niz sorodnih funkcij [7]. 5.5 Interoperabilnost Povezljivost med programskima jezikoma Java in Kotlin je zelo dobra lastnost za začetnike v programskem jeziku Kotlin. V istem projektu lahko imamo tako Kotlin kot Java datoteke brez tveganja, da bi dobili kakšno napako. Kotlin knjižnice lahko brez težav uporabljamo v javanskih projektih in obratno. To, da lahko imamo obe vrsti datotek v enem projektu, je zelo dobra lastnost, saj nam ni potrebno obstoječega projekta v celoti prevesti oz. začeti čisto od začetka. Uporabniki, ki prvič uporabljajo programski jezik Kotlin, lahko enostavno začnejo programirati v novem programskem jeziku na določenem delu projekta in kasneje seveda združijo javanske datoteke s Kotlinom. Ko bomo združevali datoteke, je priporočljivo, da združujemo po eno datoteko naenkrat, in preverjamo, če vse deluje tako, kot mora. Zmožnost kombiniranja z Javo je ključnega pomena, saj lahko preizkusimo programski jezik brez dodatnega tveganja [12]. 5.6 Pametno pretvarjanje Nekaj podatkov smo že napisali v prejšnjem poglavju (5.2). V programskem jeziku Java moramo pogosto preverjati tip objekta in ga šele nato pretvoriti, tudi tam, kjer je že jasno, da ga lahko pretvorimo [13]. Kotlinovo pametno pretvarjanje (smart cast) lahko upravlja ponavljajoče pretvarjanje za nas in nam ni treba pretvarjati objekta znotraj pogojnega stavka, če smo predhodno preverili tip s pomočjo is operatorja. Npr.: pri spodnjem primeru prevajalnik ve, da je pretvarjanje varno [13]: 26

39 if (hello is String) { printstring(hello) 5.7 Funkcije višjega reda in lambda izrazi Še ena izmed Kotlinovih glavnih lastnosti so funkcije višjega reda. Če ste seznanjeni z Javascriptom ali C#, potem verjetno veste vse o teh funkcijah. Funkcije višjega reda sprejmejo funkcijo kot parameter ali pa jo vračajo. To se zelo uporablja pri tako imenovanih callback funkcijah. Lahko naredimo funkcijo, ki vrača dve vrednosti, eno za uspešno izvedbo, in eno za napako. V programskem jeziku Kotlin bi to bile funkcije z dvema parametroma, v Javi pa bi morali slediti vzorcu, kjer imamo vmesnik, ki mu pošljemo instanco, ki implementira ta vmesnik (veliko več kode). Funkcije lahko shranjujemo v spremenljivkah za kasnejšo uporabo, pošiljanje naokoli Če funkcija ni deklarirana in je takoj poslana kot izraz (expression), imenujemo to labmda izraz ali anonimna funkcija. V Javi 8 so dodali podporo za lambda izraze, ampak če razvijate Android aplikacije, ste obtičali na Javi 7. To je zelo pomemben razlog, zakaj je programski jezik Kotlin tako dobra alternativa programskemu jeziku Java, če ravijamo za Android [14]. 27

40 6 PREDNOSTI PROGRAMSKEGA JEZIKA JAVA Čeprav ima programski jezik Kotlin zelo veliko uporabnih karakteristik, obstajajo še vedno primeri, kjer je programski jezik Java bolj priporočljiv. Poglejmo jih bolj podrobno [11]: Kompaktnejše aplikacije: praksa je pokazala, da aplikacije, ki so izdelane s programskim jezikom Kotlin, zavzamejo več prostora v primerjavi z aplikacijami, razvitimi v programskem jeziku Java. To pomeni, da se lahko aplikacije z zahtevno procesorsko nalogo nalagajo zelo počasi na mobilnih napravah, ki imajo slabše specifikacije. Prepričani smo, da ta slabost ne bo dolgo trajala in bo odpravljena v novih verzijah programskega jezika Kotlin [11]. Hitrejše prvo prevajanje: druga ne tako velika prednost programskega jezika Java v primerjavi s programskim jezikom Kotlin je čas prvega prevajanja z Gradlom (vsi vemo, kako boleče je, če traja prevajanje predolgo časa). Po raziskavah naj bi programski jezik Java imel 13 % hitrejši prevajalnik od programskega jezika Kotlin (v povprečju 14.1 sekund proti 16.5 sekund, Slika 6.1). Če smo povsem iskreni, je Gradl znan po tem, da je zelo počasen [11]. Slika 6.1: Primerjava časa prevajanja z Gradlom v obeh programskih jezikih (Vir: Večja skupnost in več dostopne pomoči: ker je programski jezik Kotlin dokaj nov, ima zelo majhno skupnost uporabnikov v primerjavi s programskim jezikom Java. Za programski jezik Java imamo veliko število primerov uporabe, objav na blogu, dokumentacije različnih uporabnikov, večjo podporo skupnosti npr. na 28

41 StackOverflow itd. Trenutno imamo na StackOverflow objav v zvezi s Kotlinom, in preko objav, ki vsebujejo besedo Java [15]. Možnost pretvorbe javanske kode v Kotlin: pretvorba iz Java datoteke v Kotlin je povsem enostavna. Naprej moramo odpreti Java datoteko, ki jo želimo pretvoriti. Nato v zgornji vrstici izberemo Code in kliknemo na Convert Java File to Kotlin File (Slika 6.2). Slika 6.2: Pretvroba javanske kode v Kotlin Pri pretvorbi moramo biti pozorni na to, da se bo rezultat pretvorbe shranil v enako datoteko. Zaradi tega je bolje, če si prekopiramo javansko kodo v novo datoteko in tam izvedemo spremembo v programski jezik Kotlin. To nam omogoča lažjo postopno pretvorbo velikih datotek v programski jezik Kotlin, ne da bi vplivali na delovanje aplikacije. Pretvroba v programski jezik Kotlin ni popolna. Osnovne razrede in funkcije bo pretvoril brez napak, ampak pri bolj kompleksnih razredih pa nastanejo napake, ki jih moramo ročno popraviti, kot prikazuje spodnji primer kode: 29

42 //del kode iz Java datoteke katero bomo pretvorili public static DataAll load(file file) {... FileInputStream fstream = new FileInputStream(file); DataInputStream in = new DataInputStream(fstream); BufferedReader br = new BufferedReader( new InputStreamReader(in)); StringBuffer sb = new StringBuffer(); String strline; while ((strline = br.readline())!= null) { sb.append(strline).append('\n'); Gson gson = new GsonBuilder().setPrettyPrinting().create(); DataAll dataall = gson.fromjson(sb.tostring(), DataAll.class); return dataall;... //pretvorjeni del kode v Kotlin datoteki fun load(file: File): DataAll? {... val fstream = FileInputStream(file) val `in` = DataInputStream(fstream) val br = BufferedReader(InputStreamReader(`in`)) val sb = StringBuffer() var strline: String while ((strline = br.readline())!= null) { //napaka sb.append(strline).append('\n') val gson = GsonBuilder().setPrettyPrinting().create() val dataall = gson.fromjson<dataall>(sb.tostring(), DataAll::class.java!!) return dataall... //popravljeni del kode v Kotlin datoteki fun load(file: File): KotlinDataAll? {.. val fstream = FileInputStream(file) val string = fstream.bufferedreader().use(bufferedreader::readtext) val gson = GsonBuilder().setPrettyPrinting().create() val data = gson.fromjson(string, DataAll::class.java) return data.. 30

43 7 MOBILNA APLIKACIJA JAZGOBAR V sklopu zaključnega dela smo izdelali mobilno aplikacijo za Android operacijski sistem. Aplikacijo smo izdelali tako v programskem jeziku Java kot v programskem jeziku Kotlin, saj smo želeli prikazati razlike programskih jezikov na praktičnem primeru. 7.1 Opis ideje Mobilna aplikacija JazGobar (Slika 7.1) je namenjena vsem gobarjem. Aplikacija omogoča, da na enostaven način dodamo lokacijo gob, tako da slikamo gobo, poimenujemo dodano lokacijo in označimo, katere vrste gob se nahajajo na dani lokaciji. Ob dodajanju gobe aplikacija samodejno pridobi tudi podatke o lokaciji in o trenutnih vremenskih razmerah. Uporabniške podatke, ki jih pridobimo o vremenu v času nabiranja gob, kasneje obdelamo z evolucijskim algoritmom, ki nas glede na vreme obvesti, kdaj bi se lahko pojavile nove gobe. Slika 7.1: Ikona aplikacije JazGobar V aplikacijo se lahko prijavimo s pomočjo Facebook računa ali pa si ustvarimo svoj račun in se kasneje z njim prijavimo. Aplikacija ima zemljevid, kjer je označena naša trenutna lokacija in lokacija vseh dodanih gob. V seznamu imamo prikazane vse naše dosedanje lokacije gob, ki jih lahko urejamo glede na oddaljenost od naše trenutne lokacije in vrsto gobe. Uporabniki lahko ocenujejo slike ostalih uporabnikov glede na to, ali se na dani sliki res nahajajo gobe, ki so označene. Uporabnik, ki je pridobil dovolj točk z ocenjevanjem, 31

44 postane moderator, kar pomeni, da on dokončno odloči, ali se na slikah s slabo oceno res nahajajo označene gobe. 7.2 Implementacija Najprej bomo opisali izgradnjo osnovnega uporabniškega vmesnika mobilne aplikacije. Nato sledi opis izdelave logike aplikacije. Primerjava je opravljena tako, da opišemo rešitev v programskem jeziku Java, sledi implementacija v programski jezik Kotlin s pomočjo vgrajenega prevajanika v Android Studiu, in seveda popravilo napak, ki so nastale ob prevajanju. 7.3 Uporabniški vmesnik Uporabniški vmesnik je enak tako v mobilni aplikaciji, ki smo jo izdelali v programskem jeziku Java, kot v tisti, ki smo jo izdelali v Kotlinu, saj imata identične datoteke XML. Uporabniški vmesnik se izdeluje s pomočjo kode XML. Poglejmo si spodnji primer kode XML za glavno okno aplikacije: <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.constraintlayout xmlns:android=" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app=" xmlns:tools=" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <android.support.constraint.guideline android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/guideline3" android:orientation="horizontal" app:layout_constraintguide_percent="0.9" /> <android.support.v7.widget.recyclerview android:id="@+id/myrecycleview" android:layout_width="0dp" android:layout_height="0dp" android:layout_marginleft="8dp" android:layout_marginright="8dp" android:layout_margintop="8dp" app:layout_constrainthorizontal_bias="0.0" app:layout_constraintleft_toleftof="parent" app:layout_constraintright_torightof="parent" app:layout_constrainttop_totopof="parent" android:layout_marginbottom="8dp" app:layout_constraintbottom_totopof="@+id/btnodjava" /> 32

45 <Button android:layout_width="0dp" android:layout_height="0dp" android:layout_marginbottom="10dp" android:layout_marginleft="20dp" android:layout_margintop="0dp" android:onclick="openmap" app:layout_constraintbottom_tobottomof="parent" app:layout_constraintleft_toleftof="parent" app:layout_constraintvertical_bias="0.0" android:layout_marginright="10dp" app:layout_constrainthorizontal_bias="0.0" /> <android.support.constraint.guideline android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintguide_percent="0.2" /> </android.support.constraint.constraintlayout> Pozitivna stran je, da ni teba pisati kode XML, saj lahko vse naredimo z miško. Preprosto na delovno površino povlečemo komponente oz. elemente, ki jih v določenem oknu potrebujemo, in koda XML se sama ustvarja v ozadju. Lastnostni komponent (velikost, vsebina, odmik ) določimo v meniju na desni strani (Slika 7.2). Slika 7.2: Izgradnja uporabniškega vmesnika 33

46 Levo okno nam prikazuje trenutni izgled uporabniškega vmesnika, desno (modro okno) pa uporabljamo za določanje lokacije komponente na oknu in njene odvistnosti od drugih komponent. S tem dosežemo, da bo naš uporabniški vmesnik enak na vseh napravah in prilagodljiv ne glede na velikost mobilnega zaslona, na katerem se bo aplikacija izvajala. 7.4 Povezava elementov s programsko kodo Elemente, ki jih ustvarimo v datoteki XML, je potrebno povezati s programsko kodo, da lahko opravijo svojo nalogo. Vsem elementom moramo podati ID oz. unikatno ime, preko katerega se povežemo v programski kodi. V programskem jeziku Java moramo za povezavo uporabiti posebno metodo findviewbyid, v programskem jeziku Kotlin pa lahko kar direktno uporabimo ID objekta brez uporabe findviewbyid. Primer v programskem jeziku Java public class ActivityLogin extends AppCompatActivity protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_login); LoginButton loginbutton=(loginbutton)findviewbyid(r.id.fb_login_bn); EditText etusername = (EditText) findviewbyid(r.id.etusernamer); EditText etpassword = (EditText) findviewbyid(r.id.etpasswordr); Button btnlogin = (Button) findviewbyid(r.id.btnlogin); TextView tvregister = (TextView) findviewbyid(r.id.tvregister); tvregister.settext("register"); Primer v programskem jeziku Kotlin class KotlinActivityLogin : AppCompatActivity() { override fun oncreate(savedinstancestate: Bundle?) { super.oncreate(savedinstancestate) setcontentview(r.layout.kotlin_activity_login) tvregister.text = "Register" 34

47 7.5 Meni Za izvedbo različnih funkcionalnosti (nastavitve, urejanje seznama lokacij gob ) smo implementirali meni. Najprej smo naredili datoteko XML, kjer smo definirali, katere funkcije bo meni vseboval. Nato smo znotraj okna dodali metodo oncreateoptionsmenu, ki ustvari meni iz podane datoteke XML. Da pa se nekaj izvede ob pritisku na gumb, smo implementirali metodo onoptionsitemselected. Metoda onoptionsitemselected v programskem jeziku public boolean onoptionsitemselected(menuitem item) { switch (item.getitemid()) { case R.id.action_settings: startactivity(new Intent(this,ActivityMySettings.class)); return true; case R.id.action_slike_gob: startactivity(new Intent(this,ActivitySlikeGob.class)); return true; case R.id.action_galerija: startactivity(new Intent(this,ActivityGalerija.class)); return true; case R.id.action_sort: app.sortchangeandupdate(); madapter.notifydatasetchanged(); return true; default: return super.onoptionsitemselected(item); Metoda onoptionsitemselected v programskem jeziku Kotlin override fun onoptionsitemselected(item: MenuItem): Boolean { when (item.itemid) { R.id.action_settings -> { startactivity(intent(this, KotlinActivityMySettings::class.java)) return true R.id.action_slike_gob -> { startactivity(intent(this, KotlinActivitySlikeGob::class.java)) return true R.id.action_galerija -> { startactivity(intent(this, KotlinActivityGalerija::class.java)) return true R.id.action_sort -> { app?.sortchangeandupdate() madapter!!.notifydatasetchanged() return true 35

48 else -> return super.onoptionsitemselected(item) 7.6 Eventbus Eventbus je odprtokodna knjižnica za Android, ki se uporablja za lažjo komunikacijo med razredi. Deluje tako (Slika 7.3), da se razredi, ki potrebujejo določeni podatek, preko metode Subscribe naročijo na Eventbus in tako pridobijo podatek takoj, ko se ta spremeni oz. odvisno od načina uporabe. Naročnikom podatke pošilja Publisher preko post() metode. Slika 7.3: Delovanje EventBus-a ( Vir: Svojo mobilno aplikacijo Eventbus smo uporabili za deljenje GPS lokacije med razredi. To pomeni, da smo samo preko enega razreda pridobili GPS lokacijo in jo posredovali vsem razredom, ki so se preko Evetbus-a naročili na ta dogodek. Najprej se moramo v funkciji onresume registrirati na Eventbus. Registriranje na Eventbus v programskem jeziku Java public void onresume(){ super.onresume(); if (!EventBus.getDefault().isRegistered(this)) EventBus.getDefault().register(this);... Registriranje na Eventbus v programskem jeziku Kotlin public override fun onresume() { super.onresume() if (!EventBus.getDefault().isRegistered(this)) EventBus.getDefault().register(this) 36

49 ... To posledično pomeni, da se v funkciji onstop moramo od Eventbus-a odjaviti. Odjava od Eventbus-a v programskem jeziku protected void onstop() { EventBus.getDefault().unregister(this); super.onstop(); Odjava od Eventbus-a v programskem jeziku Kotlin override fun onstop() { EventBus.getDefault().unregister(this) super.onstop() Na koncu smo morali samo še naročiti oz. implementirati metodo onmessageevent, ki se bo odzivala na novo prejeto GPS lokacijo. Samo tisti razredi, ki so registrirani in naročeni na Eventbus, bodo v našem primeru obveščeni o spremembi lokacije. Naročanje na Eventbus v programskem jeziku = ThreadMode.MAIN) public void onmessageevent(messageeventupdatelocation event) { Log.i("ActivityZacetna","MessageEventUpdateLocation "); mlocation = event.getm(); Naročanje na Eventbus v programskem jeziku = ThreadMode.MAIN) fun onmessageevent(event: KotlinMessageEventUpdateLocation) { Log.i("KotlinActivityZacetna", "KotlinMessageEventUpdateLocation ") mlocation = event.m 7.7 Shranjevanje podatkov o uporabniku Kot smo že omenili, se lahko v apliakcijo prijavimo s pomočjo Facebook računa oz. e- poštnega naslova in gesla, ki smo ga določili ob registraciji. Ob prijavi si moramo zapomniti nekaj podatkov, kot so: uporabniško ime, ime uporabnika, e-poštni naslov uporabnika, pridobljeno število točk, način prijave ter, ali obstaja datoteka JSON na mobilni napravi. Podatke si zapomnimo s pomočjo SharedPreferences API-ja, ki jih zapišemo v datoteko. Shranimo lahko podatke osnovnega tipa, torej Boolean, String, Int, Float, String Set in Long. Podatke shranjujemo s pomočjo SharedPreferences. Editor-ja, ki mu podamo unikatno ime, preko katerega bomo dostopali do podatkov, in sam podatek, ki ga želimo shraniti. 37

50 Shranjevanje podatkov v SharedPreferences v programskem jeziku Java SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); SharedPreferences.Editor editor = sharedpreferences.edit(); editor.putstring("user_id",user); editor.putstring("et_full_name",user); editor.putstring("et_ _address",mail); editor.putstring("et_score",score); editor.putboolean("basiclogin",true); editor.putboolean("fileexist",fileexist); editor.commit(); Shranjevanje podatkov v SharedPreferences v programskem jeziku Kotlin val sharedpreferences = PreferenceManager.getDefaultSharedPreferences(applicationContext) with (sharedpreferences.edit()) { putstring("user_id", user) putstring("et_full_name", user) putstring("et_ _address", mail) putstring("et_score", score) putboolean("basiclogin", true) putboolean("fileexist", fileexist) commit() Nikoli, ko pišemo oz. shranjujemo podatke, ne smemo na koncu pozabiti klicati metode commit(), ki shrani podatke v datoteko. Ko želimo pridobiti podatke, je podobno. Najprej ustvarimo spremenljivko SharedPreferences, preko katere dostopamo do podatkov s pomočjo prej določenega unikatnega imena. Poleg imena pa moramo podati tudi privzeto vrednost, ki se nastavi spremenljivki v primeru, da še ne obstaja. Pridobivanje podatkov iz SharedPreferences v programskem jeziku Java SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); String user_id = sp.getstring("user_id",null); Pridobivanje podatkov iz SharedPreferences v programskem jeziku Kotlin val sp = PreferenceManager.getDefaultSharedPreferences(applicationContext) val user_id = sp.getstring("user_id", null) 38

51 7.8 Dodajanje lokacij gob Dodajanje lokacij gob je sestavljeno iz več postopkov. Prvi je, da se ob kliku na gumb za dodajanje gob odpre novo okno s fotoaparatom. Da se to zgodi, moramo za gumb implementirati metodo OnClickListener. Spodaj se ob kliku na gumb odpre okno za dodajanje lokacije, če ima aplikacija pridobljeno lokacijo od mobilne naprave. Uporabili smo objekt Intent, kjer podamo kot parameter kontekst trenutnega razreda, in kateri razred oz. okno želimo prikazati. Poleg lahko pošljemo tudi podatke z metodo putextra, ampak to ni obvezno. Za prikaz novega okna kličemo metodo startactivity. Implementacija metode OnClickLIstener v programskem jeziku Java FloatingActionButton fab = findviewbyid(r.id.fab); fab.setonclicklistener(new View.OnClickListener() public void onclick(view view) { if (mlocation==null) { Snackbar.make(view, getresources().gettext(r.string.add_new_location_no_location), Snackbar.LENGTH_LONG).show(); else { Intent i = new Intent(getBaseContext(), ActivityLocation.class); i.putextra(dataall.lokacija_id, ActivityLocation.NEW_LOCATION_ID); startactivity(i); ); Implementacija metode OnClickLIstener v programskem jeziku Kotlin fab.setonclicklistener { view -> if (mlocation == null) { Snackbar.make(view, resources.gettext(r.string.add_new_location_no_location), Snackbar.LENGTH_LONG).show() else { val i = Intent(baseContext, KotlinActivityLocation::class.java) i.putextra(kotlindataall.lokacija_id, "NEW_LOCATION") startactivity(i) Če naredimo fotografijo in označimo, da smo z njo zadovoljni, se nam prikaže okno, kjer poimenujemo novo lokacijo in označimo, katera vrsta oz. vrste gob se nahajajo, in shranimo podatke. Aplikacija ob shranjevanju samodejno pridobi podatke o trenutni lokaciji in o trenutnih vremenskih razmerah. Podatke o vremenu pridobimo s pomočjo OpenWeatherMap API-ja. 39

52 Spodnji funkciji prikazujeta programsko kodo, ki se izvede ob dodajanju nove lokacije gob oz. ob spreminjaju obstoječe lokacije. Preverimo, ali smo poimenovali lokacijo in izbrali vrsto gobe. Nato pregledamo, katere vrste gob smo označili, naložimo sliko na strežnik in shranimo podatke o lokaciji tako na telefon kot na strežnik. Shranjevanje lokacije gob v programskem jeziku Java: public void onsave(view v){ if(!edname.gettext().tostring().equals("poimenuj ") && stizbranihgob(gobe)!=0){ if(statenew) { app.all = app.getall(); for (TagTextView tv:gobe) { tv.updateobjectstate(); //sets LocationTag if (statenew) { app.getall2().addnewlocationgoba(tv.gettag()); if (statenew) { app.getall2().addlocation(l); uploadimage(); save(); finish(); else{ Toast.makeText(ActivityLocation.this, "Nisi vpisal imena oz. izbral gob!", Toast.LENGTH_SHORT).show(); Shranjevanje lokacije gob v programskem jetziku Kotlin: fun onsave(v: View) { if (edname?.text.tostring()!= "Poimenuj " && stizbranihgob(gobe!!)!= 0) { if (statenew) { app?.all = app?.getall() for (tv in gobe!!) { tv.updateobjectstate() //sets LogationTag if (statenew) { app?.getall2()?.addnewlocationgoba(tv.tag) if (statenew) { app?.getall2()?.addlocation(l!!) uploadimage() save() finish() else { Toast.makeText(this@KotlinActivityLocation, "Nisi vpisal imena oz. izbral gob!", Toast.LENGTH_SHORT).show() 40

53 7.9 Shranjevanje in pridobivanje podatkov Na samem začetku smo podatke o lokacijah gob shranjevali samo na uporabnikovih mobilnih naprav v obliki datoteke JSON. V datoteki JSON so bili shranjeni podatki o uporabniku in vse njegove dodane lokacije gob. Lokacije gob vsebujejo podatke, kdaj je uporabnik dodal lokacijo, podatke o vrstah gob, ki se nahajajo na lokaciji, pot do fotografije gobe, podatke o lokaciji in vremenu. Za serializacijo objektov smo uporabili knjižnico Gson [16]. Shranjevanje podatkov v datoteko JSON v programskem jeziku Java public static boolean save(dataall a, File file) { if (isexternalstoragewritable()) { try { long start = System.currentTimeMillis(); Gson gson = new GsonBuilder().setPrettyPrinting().create(); PrintWriter pw = new PrintWriter(file); String sss=gson.tojson(a); pw.println(sss); pw.close(); return true; catch (FileNotFoundException e) { e.printstacktrace(); System.out.println("Error save! (FileNotFoundException)"); catch (IOException e) { System.out.println("Error save! (IOException)"); else{ System.out.println(file.getAbsolutePath()+" NOT Writable"); return false; Shranjevanje podatkov v datoteko JSON v programskem jeziku Kotlin fun save(a: KotlinDataAll, file: File): Boolean { if (isexternalstoragewritable()) { try { val start = System.currentTimeMillis() val gson = GsonBuilder().setPrettyPrinting().create() val pw = PrintWriter(file) val sss = gson.tojson(a) pw.println(sss) pw.close() return true catch (e: FileNotFoundException) { e.printstacktrace() println("error save! (FileNotFoundException)") catch (e: IOException) { println("error save! (IOException)") else { println(file.absolutepath + " NOT Writable") 41

54 return false Za shranjevanje in pridobivanje podatkov iz datoteke JSON imamo narejen razred DataAll, kjer imamo definirane potrebne spremenljivke. Poglejmo si del razreda brez metod: DataAll v programskem jeziku Java public class DataAll { public static final String LOKACIJA_ID = "lokacija_id"; public static SimpleDateFormat dt = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss"); private User userme; private GobaList gobalist; private ArrayList<Lokacija> lokacijalist; private ArrayList<LokacijaGoba> lokacijagobalist;... DataAll v programskem jeziku Kotlin open class KotlinDataAll { val LOKACIJA_ID = "lokacija_id" var dt = SimpleDateFormat("dd.MM.yyyy HH:mm:ss") private var userme: KotlinUser? = null private var gobalist: KotlinGobaList?=null private var lokacijalist: ArrayList<KotlinLokacija>? = null private var lokacijagobalist: ArrayList<KotlinLokacijaGoba>?=null... Ker smo želeli zavarovati uporabnikove podatke, ki so se prej shranjevali samo na uporabnikovi napravi, smo se odločili, da shranjujemo podatke tudi v podatkovni bazi. Na spletni strani 000webhost [17] smo si ustvarili račun in svojo domeno. Nato smo naredili preprosto podatkovno bazo (Slika 7.4), kjer si shranjujemo podatke o uporabnikih, podatke o ocenah slik in podatke o slikah gob uporabnikov. 42

55 Slika 7.4: Podatkovni model Podatke o lokacijah gob od uporabnikov shranjujemo na strežniku v obliki datoteke JSON. Pošiljanje in pridobivanje vseh podatkov na strežnik smo naredili s pomočjo PHP skript. Podatke s strežnika pridobimo tako, da podamo URL, kjer se datoteka od uporabnika na strežniku nahaja, in uporabimo vgrajeno knjižnico HttpURLConnection. S pomočjo knjižice odpremo povezavo in začnemo prepisovati podatke iz strežnika v datoteko na mobilno napravo. Ko prepišemo celotno datoteko se povezava zapre. Prenos datoteke JSON s strežnika in shranjevanje le-te na mobilno napravo v programskem jeziku Java void downloadfile(string dwnload_file_path){ try { URL url = new URL(dwnload_file_path); HttpURLConnection urlconnection = (HttpURLConnection) url.openconnection(); urlconnection.setrequestmethod("get"); urlconnection.setdooutput(true); urlconnection.connect(); File file = new File(this.getExternalFilesDir(DATA_MAP), ""+ FILE_NAME); FileOutputStream fileoutput = new FileOutputStream(file); InputStream inputstream = urlconnection.getinputstream(); totalsize = urlconnection.getcontentlength(); byte[] buffer = new byte[1024]; int bufferlength = 0; 43

56 while ( (bufferlength = inputstream.read(buffer)) > 0 ) { fileoutput.write(buffer, 0, bufferlength); downloadedsize += bufferlength; fileoutput.close(); catch (final MalformedURLException e) { e.printstacktrace(); catch (final IOException e) { e.printstacktrace(); catch (final Exception e) { Prenos datoteke JSON s strežnika in shranjevanje le-te na mobilno napravo v programskem jeziku Kotlin internal fun downloadfile(dwnload_file_path: String) { try { var downloadedsize = 0 val url = URL(dwnload_file_path) val urlconnection = url.openconnection() as HttpURLConnection urlconnection.requestmethod = "GET" urlconnection.dooutput = true urlconnection.connect() val file = File(this.getExternalFilesDir(DATA_MAP), "" + FILE_NAME) val fileoutput = FileOutputStream(file) val inputstream = urlconnection.inputstream totalsize = urlconnection.contentlength val buffer = ByteArray(1024) var bufferlength = 0 do { bufferlength = inputstream.read(buffer) fileoutput.write(buffer, 0, bufferlength) downloadedsize += bufferlength while (bufferlength > 0) fileoutput.close() catch (e: MalformedURLException) { e.printstacktrace() catch (e: IOException) { e.printstacktrace() catch (e: Exception) 44

57 7.10 Prikaz lokacij gob Vse lokacije gob, ki jih je dodal uporabnik, prikazujemo v seznamu (Slika 7.6Slika 7.6). Poznamo več vrst seznamov, ki jih uporabljamo za prikaz podatkov. Odločili smo se, da ustvarimo seznam s pomočjo grafične komponente RecyclerView. RecyclerView je bolj napredna in prilagodljiva verzija ListView, ki pripomore k hitrejšemu premikanju po seznamu ob večji količini podatkov. Za uporabo smo morali v Gradle vključiti RecyclerView knjižnico. Nato smo v datoteki XML naredili izgled ene vrstice (Slika 7.5), ki smo jo v programski kodi uporabili za ustvarjanje vseh vrstic v seznamu. Slika 7.5: Izgled vrstice seznama Da smo lahko vnesli vse svoje podatke v seznam, smo morali narediti razred, ki je dedoval od razreda RecyclerView.Adapter. Ta razred ustvari vrstice in jih napolni s potrebnimi podatki. Znotraj razreda je še ena prednost RecyclerView, in sicer ko vrstice več ne potrebujemo oz. ni več vidna, jo ponovno uporabimo in napolnimo z novimi podatki s pomočjo implementirane metode onbindviewholder. To pomeni, da uporabljamo minimalno število vrstic za prikaz podatkov ter s tem pohitimo premikanje po seznamu. Usvarjanje nove vrstice v seznamu v programskem jeziku public ViewHolder oncreateviewholder(viewgroup parent, int viewtype) { View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.rowlayout, parent, false); ViewHolder vh = new ViewHolder(v); return vh; Usvarjanje nove vrstice v seznamu v programskem jeziku Kotlin override fun oncreateviewholder(parent: ViewGroup, viewtype: Int): ViewHolder? { val v = LayoutInflater.from(parent.context).inflate(R.layout.rowlayout, parent, false) return ViewHolder(v) 45

58 Slika 7.6: Seznam lokacij gob v mobilni aplikaciji JazGobar 7.11 Prikaz podrobosti o lokaciji gobe v novem oknu Ob pritisku na posamezni vnos v seznamu se mora odpreti novo okno, kjer se prikažejo podrobnosti o lokaciji (Slika 7.7). To smo naredili tako, da smo implementirali metodo OnClickListener na vsako vrstico in v novo okno prenesli ID lokacije ter prikazali vse podatke. 46 Slika 7.7: Prikaz podrobnosti o lokaciji gob v mobilni aplikaciji JazGobar

59 7.12 Končni izdelek Med aplikacijo, ki je izdelana s programskim jezikom Java, in tisto, ki je izdelana s programskim jezikom Kotlin, ni popolnoma nobene vizualne ali funkcionalne razlike. Za konec smo naredili še nekaj manjših primerjav (testov) med obema aplikacijama. Primerjave so bile izvedene na Android emulatorju z naslednjimi specifikacijami: velikost zaslona: 5,5 palcev, ločljivost zaslona: 1280 x 720 px, pomnilnik (RAM): 2048 MB, spomin: 800 MB. Primerjave (Tabela 1) smo izvajali na operacijskem sistem Android verzija 5.0 (Lolipop). V vseh primerjavah je boljša aplikacija, ki je napisana v programskem jeziku Java. Razlika v odstotkih med obema aplikacijama ni tako zelo velika, razen pri zasedenosti prostora na mobilni napravi. Pri tako majhni mobilni aplikaciji kot je naša, to ni tako zelo velika razlika, ampak če vzamemo za primerjavo aplikacije, ki so velike nekaj sto MB, je razlika veliko večja. Ampak v današnjih časih, ko imamo nekaj deset GB spomina, nas tistih nekaj odstokov razlike v zasedenosti prostora ne skrbi. Tabela 1: Primerjava velikosti in porabe pomnilnika med obema aplikacijama Aplikacija izdelana v Javi Aplikacija izdelana v Kotlinu Razlika v odstotkih Velikost APK-ja 5,9 MB 6,2 MB 5 % Zaseden prostora v 20,6 MB 24,7 MB 20 % mobilni napravi Najmanjša poraba 23 MB 25 MB 9 % pomnilnika Največja poraba pomnilnika 49,5 MB 52 MB 5 % 47

60 8 SKLEP Zadnjih nekaj let najdemo veliko različnih mobilnih aplikacij za Android operacijski sistem. Večina teh aplikacij je razvitih s pomočjo programskega jezika Java. Tako kot povsod drugje tudi pri programskih jezikih gre razvoj naprej. Tako so razvili programski jezik Kotlin ter ga dodali v Android Studio kot izbiro poleg Jave. S pomočjo izdelane mobilne aplikacije JazGobar smo se spoznali s programskim jezikom Kotlin, njegovimi prednostmi in slabostmi. S programskim jezikom Kotlin v večini primerov, še posebaj pri razredih, napišemo veliko manj kode kot v programskem jeziku Java. Manj kode pomeni manj napak med samim pisanjem. Velika prednost programskega jezika Kotlin v primerjavi z Javo je delo z ničelnimi spremenljivkami. Tudi programski jezik Java ima svoje prednosti, to je, da nam ustvari manjšo aplikacijo in hitreje izvede prvo prevajanje aplikacije z Gradl-om. Končnega odgovora na vprašanje, kateri programski jezik je bolje izbrati, nimamo, saj je odvisno od razvijalca in njegovih izkušenj. Če smo začetniki in nismo nikoli razvijali mobilnih aplikacij za Android operacijski sistem, je bolje, da začnemo razvijati s programskim jezikom Java, ker imamo veliko več literature, primerov, navodil, različnih rešitev za probleme, na katere bomo naleteli med razvojem. Menimo, da nekdo, ki se nauči oziroma že zna napisati dobro kodo v programskem jeziku Java, bo znal v Kotlinu napisati boljšo programsko kodo, kar obratno niti ne velja. Vsekakor pa ne bo nič narobe, če kar neposredno začnemo s programskim jezikom Kotlin, ki je zelo enostaven za učenje. Pojavili se bodo minusi pri iskanju rešitev za naše probleme, saj je razvijalska skupnost še v razvoju. Za izkušene razvijalce je priporočljivo preizkusiti programski jezik Kotlin, saj odpravlja večino težav in pomankljivosti programskega jezika Java. Edina pomankljivost, na katero smo naleteli med razvojem s programskim jezikom Kotlin, je vgrajen pretvorvnik iz Jave v Kotlin. Da ne boste razumeli napačno, pretvornik deluje več kot odlično, le nekaj manjših napak naredi, ki pa jih v večini primerov odpravimo v 48

61 zelo kratkem času. Slabost je samo ta, da neposredno pretvarja iz Jave v Kotlin, ne da bi upošteval vse prednosti programskega jezika Kotlin. Tukaj mislimo predvsem na upravljanje z ničelnimi spremenljivkami, urejanje SharedPreferences itd. Slika 8.1: Primerjava programskih jezikov Java in Kotlin (Vir: Menimo, da se bo programski jezik Kotlin v bližnji prihodnosti razvil do te mere, da bo v popolnosti zasenčil Javo. Že kar nekaj znanih podjetij je svoje mobilne aplikacije pretvorilo v Kotlin programski jezik, nekatera med njimi so: Pinterest, Trello, Evernote, Coursera itd. 49

62 LITERATURA IN VIRI [1] Wikipedia, Android Studio, [Elektronski]. Dostopno na: [ ]. [2] Android Developers, [Elektronski]. Dostopno na: [ ]. [3] Wikipedia, Android (operating system), [Elektronski]. Dostopno na: [ ]. [4] Mernik M., Žumer V. Programski jeziki. Maribor: Fakulteta za elektrotehniko, računalništvo in informatiko, Inštitut za računalništvo, [5] Wikipedia, Java (programming language), [Elektronski]. Dostopno na: [ ]. [6] Wikipedia, Kotlin (programming language), [Elektronski]. Dostopno na: [ ]. [7] Leiva A. Kotlin for Android Developers: Learn Kotlin the easy way while developing an Android App. Lean Publishing, [8] Yalantis, Kotlin vs Java: Basic Syntax Differences, [Elektronski]. Dostopno na: [ ]. [9] Kotlinlang, Reference, [Elektronski]. Dostopno na: [ ]. [10] Tutorialspoint, Java Tutorial, [Elektronski]. Dostopno na: [ ]. [11] Applikeysolutions, Kotlin vs Java: What is Better for Android Development?, [Elektronski]. Dostopno na: [ ]. [12] T. Software, Java vs Kotlin: Which Programming Language Is Better For Android Developers?, [Elektronski]. Dostopno na: [ ]. 50

63 [13] AndroidAuthority, Kotlin vs Java: key differences between Android s officiallysupported languages, [Elektronski]. Dostopno na: [ ]. [14] ArtTouch, Kotlin vs. Java: First Impressions Using Kotlin for a Commercial Android Project, [Elektronski]. Dostopno na: [ ]. [15] Envatotuts+, Java vs. Kotlin: Should You Be Using Kotlin for Android Development?, [Elektronski]. Dostopno na: [ ]. [16] GitHub, "Gson library," [Elektronski]. Dostopno na: [ ]. [17] 000webhost, "Free web hosting," [Elektronski]. Dostopno na: [ ]. 51

64 IZJAVA O AVTORSTVU IN ISTOVETNOSTI TISKANE IN ELEKTRONSKE OBLIKE ZAKLJUČNEGA DELA Ime in priimek študent a/ ke: Nikolaj Čolić Študijski program: Računalništvo in informacijske tehnologije Naslov zaključnega dela: Primerjava programskih jezikov Java in Kotlin na primeru implementacije aplikacije JazGobar Mentor: doc. dr. Matej Črepinšek Somentor: Podpisan i/ a študent/ ka Nikolaj Čolić izjavljam, da je zaključno delo rezultat mojega samostojnega dela, ki sem ga izdelal/ a ob pomoči mentor ja/ ice oz. somentor ja/ ice; izjavljam, da sem pridobil/ a vsa potrebna soglasja za uporabo podatkov in avtorskih del v zaključnem delu in jih v zaključnem delu jasno in ustrezno označil/ a; na Univerzo v Mariboru neodplačno, neizključno, prostorsko in časovno neomejeno prenašam pravico shranitve avtorskega dela v elektronski obliki, pravico reproduciranja ter pravico ponuditi zaključno delo javnosti na svetovnem spletu preko DKUM; sem seznanjen/ a, da bodo dela deponirana/objavljena v DKUM dostopna široki javnosti pod pogoji licence Creative Commons BY NC ND, kar vključuje tudi avtomatizirano indeksiranje preko spleta in obdelavo besedil za potrebe tekstovnega in podatkovnega rudarjenja in ekstrakcije znanja iz vsebin; uporabnikom se dovoli reproduciranje brez predelave avtorskega dela, distribuiranje, dajanje v najem in priobčitev javnosti samega izvirnega avtorskega dela, in sicer pod pogojem, da navedejo avtorja in da ne gre za komercialno uporabo; dovoljujem objavo svojih osebnih podatkov, ki so navedeni v zaključnem delu in tej izjavi, skupaj z objavo zaključnega dela; izjavljam, da je tiskana oblika zaključnega dela istovetna elektronski obliki zaključnega dela, ki sem jo oddal/ a za objavo v DKUM. Uveljavljam permisivnejšo obliko licence Creative Commons: CC BY 4.0 (navedite obliko) Začasna nedostopnost: Zaključno delo zaradi zagotavljanja konkurenčne prednosti, zaščite poslovnih skrivnosti, varnosti ljudi in narave, varstva industrijske lastnine ali tajnosti podatkov naročnika: (naziv in naslov naročnika/institucije) ne sme biti javno dostopno do (datum odloga javne objave ne sme biti daljši kot 3 leta od zagovora dela). To se nanaša na tiskano in elektronsko obliko zaključnega dela.

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č

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č

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č

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 _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č

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č

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č

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č

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č

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č

GHOSTBUSTERS navodila za učitelje O PROJEKTU S tem projektom se učenci sami naučijo izdelati igro. Ustvariti morajo več ikon (duhcov ali kaj drugega)

GHOSTBUSTERS navodila za učitelje O PROJEKTU S tem projektom se učenci sami naučijo izdelati igro. Ustvariti morajo več ikon (duhcov ali kaj drugega) GHOSTBUSTERS navodila za učitelje O PROJEKTU S tem projektom se učenci sami naučijo izdelati igro. Ustvariti morajo več ikon (duhcov ali kaj drugega) in za vsako napisati svojo kodo. Dve ikoni imata isto

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č

BYOB Žogica v vesolju Besedilo naloge Glavna ideja igre je paziti, da žoga ne pade na tla igralne površine, pri tem pa zbrati čim več točk. Podobno ig

BYOB Žogica v vesolju Besedilo naloge Glavna ideja igre je paziti, da žoga ne pade na tla igralne površine, pri tem pa zbrati čim več točk. Podobno ig BYOB Žogica v vesolju Besedilo naloge Glavna ideja igre je paziti, da žoga ne pade na tla igralne površe, pri tem pa zbrati čim več točk. Podobno igro najdemo tudi v knjigi Scratch (Lajovic, 2011), vendar

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č

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č

Navodila za uporabo aplikacije mlist - neposredni mentorji za Zdravniško zbornico Slovenije pripravila Gooya, interaktivni mediji, d.o.o. Ljubljana, m

Navodila za uporabo aplikacije mlist - neposredni mentorji za Zdravniško zbornico Slovenije pripravila Gooya, interaktivni mediji, d.o.o. Ljubljana, m Navodila za uporabo aplikacije mlist - neposredni mentorji za Zdravniško zbornico Slovenije pripravila Gooya, interaktivni mediji, d.o.o. Ljubljana, marec 2019 Vsebina 1 Dostop do aplikacije... 3 1.1 Android...

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č

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č

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č

Zadeva: Ponudba

Zadeva: Ponudba Navodila za urejanje Spletne strani CTEK.si 1. Dodajanje novega polnilnika Za dodajanje novega polnilnika nikoli ne prepisujte že objavljenih vsebin, ampak sledite tem navodilom. Ta so zagotovilo, da bodo

Prikaži več

PowerApps

PowerApps ko tehnologija postane brezmejna strast Microsoft PowerApps Uporabniška navodila Avtorji Brina Gomboc, Lucija Kos, Damjana Krampač Mentorici dr. Simona Sternad Zabukovšek Sara Cokan, mag. ekon. in posl.

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č

TNUV Lab

TNUV Lab TNUV - VAJA 5 doc. dr. Marko Meža 2013/14 Cilji vaje Predvajanje multimedijskih vsebin MediaPlayer http://developer.android.com/training/building-multimedia.html http://developer.android.com/guide/topics/media/mediaplayer.html

Prikaži več

Navodila za nastavitev mail odjemalca na ios in Android napravah TELEFONI iphone (ios 12) Predlagamo, da do svoje študentske e-pošte dostopate s pomoč

Navodila za nastavitev mail odjemalca na ios in Android napravah TELEFONI iphone (ios 12) Predlagamo, da do svoje študentske e-pošte dostopate s pomoč TELEFONI iphone (ios 12) Predlagamo, da do svoje študentske e-pošte dostopate s pomočjo aplikacije Outlook, katero lahko prenesete s pomočjo trgovine App Store. Ko aplikacijo zaženete se vam pojavi naslednje

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č

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č

Microsoft PowerPoint - OAPS1- P12.ppt

Microsoft PowerPoint - OAPS1- P12.ppt Univerza v Ljubljani Fakulteta za računalništvo in informatiko Igor Rožanc Osnove algoritmov in podatkovnih struktur I (OAPS I) 2. letnik, VSP Računalništvo in informatika, vse smeri PROSOJNICE ZA 12.

Prikaži več

Microsoft Word - CN-BTU4 Quick Guide_SI

Microsoft Word - CN-BTU4 Quick Guide_SI Bluetooth Dongle Artikel: CN-BTU4 NAVODILA v1.0 Sistemske zahteve Zahteve za PC: - Proc.: Intel Pentium III 500MHz or above. - Ram: 256MB ali več. - Disk: vsaj 50MB. - OS: Windows 98SE/Me/2000/XP - Prost

Prikaži več

PowerPointova predstavitev

PowerPointova predstavitev INTRANET - DETEKTIV Detektivska zbornica Republike Slovenije Pozdravljeni, v kratki predstaviti in navodilih za delo z intranet sistemom Detektiv. Intranet članom Detektivske zbornice RS omogoča, da: -

Prikaži več

IZGRADNJA PREDSTAVITVENE SPLETNE STRANI GLUCOWATCH Avtor: Marko Zajko Projekt delno financira Evropska unija, in sicer iz Evropskega socialnega sklada

IZGRADNJA PREDSTAVITVENE SPLETNE STRANI GLUCOWATCH Avtor: Marko Zajko Projekt delno financira Evropska unija, in sicer iz Evropskega socialnega sklada IZGRADNJA PREDSTAVITVENE SPLETNE STRANI GLUCOWATCH Avtor: Marko Zajko UPORABLJENE TEHNOLOGIJE Za izdelavo predstavitvene spletne strani smo izbrali tehnologije, ki zagotavljajo: Hitro delovanje spletne

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č

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č

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č

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č

ZAČETNI VODNIK ZA POVEZAVO Izkusite prilagojeno nego perila z aplikacijo My AEG Care. Pralni stroj lahko povežete in upravljate od koder koli in preje

ZAČETNI VODNIK ZA POVEZAVO Izkusite prilagojeno nego perila z aplikacijo My AEG Care. Pralni stroj lahko povežete in upravljate od koder koli in preje ZAČETNI VODNIK ZA POVEZAVO Izkusite prilagojeno nego perila z aplikacijo My AEG Care. Pralni stroj lahko povežete in upravljate od koder koli in prejemate obvestila o tem, kdaj je perilo pripravljeno.

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č

CODEKS IP KAMERA

CODEKS IP KAMERA CODEKS IP KAMERA uporabniška navodila Vse pravice pridržane. Noben del uporabniških navodil se ne sme reproducirati v kakršnikoli obliki ali na kakršen koli način - grafični, elektronski ali mehanski,

Prikaži več

Gimnazija Bežigrad Peričeva Ljubljana OPERACIJSKI SISTEM Predmet: informatika

Gimnazija Bežigrad Peričeva Ljubljana OPERACIJSKI SISTEM Predmet: informatika Gimnazija Bežigrad Peričeva 4 1000 Ljubljana OPERACIJSKI SISTEM Predmet: informatika KAZALO 1. Uvod...3 2. Predstavitev programa Windows 98...5 3. Raziskovanje računalnika...5 4. Raziskovanje Interneta...6

Prikaži več

TNUV Lab5

TNUV Lab5 TNUV - VAJA 5 doc. dr. Marko Meža Cilji vaje Predvajanje multimedijskih vsebin MediaPlayer http://developer.android.com/training/building-multimedia.html http://developer.android.com/guide/topics/media/mediaplayer.html

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č

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č

NAVODILA ZA IZPOLNJEVANJE ELEKTRONSKEGA OBRAZCA ZA PRIJAVO IN PREKLIC DIGITALNIH POTRDIL Verzija Datum Opis sprememb dokumenta dokumenta

NAVODILA ZA IZPOLNJEVANJE ELEKTRONSKEGA OBRAZCA ZA PRIJAVO IN PREKLIC DIGITALNIH POTRDIL Verzija Datum Opis sprememb dokumenta dokumenta NAVODILA ZA IZPOLNJEVANJE ELEKTRONSKEGA OBRAZCA ZA PRIJAVO IN PREKLIC DIGITALNIH POTRDIL Verzija Datum Opis sprememb dokumenta dokumenta 1.0 22.11.2013 Prva verzija dokumenta 1.1 15.04.2015 Dodana možnost

Prikaži več

VPELJAVA MDM V DRŽAVEM ZBORU MATJAŽ ZADRAVEC

VPELJAVA MDM V DRŽAVEM ZBORU MATJAŽ ZADRAVEC VPELJAVA MDM V DRŽAVEM ZBORU MATJAŽ ZADRAVEC Državni zbor v številkah 90 poslancev 9 + 1 poslanska skupina 150+ mobilnih naprav (OS Android, ios) 500+ internih uporabnikov, 650+ osebnih računalnikov, 1100+

Prikaži več

Watch 40_MT40X_UM_SL.pdf

Watch 40_MT40X_UM_SL.pdf Navodila za uporabo MT40X Vsebina 1 1 Glej pregled... 1 Tipka za vklop/izklop... 1 2 2 Odstranite trakove... 2 Pripenjanje novih trakov... 3 3 3... 3... 4 Vklop ure... 4... 4 Jezik... 4 4 5 5 5 6 6 7...

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č

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č

Microsoft Word - Brosura neobvezni IP

Microsoft Word - Brosura  neobvezni IP Osnovna šola dr. Aleš Bebler - Primož Hrvatini NEOBVEZNI IZBIRNI PREDMETI V ŠOLSKEM LETU 2017/18 Drage učenke in učenci, spoštovani starši! Neobvezni izbirni predmeti so novost, ki se postopoma uvršča

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č

Objektno usmerjeno programiranje

Objektno usmerjeno programiranje Objektno usmerjeno programiranje Izrazoslovje OOP Razred pomeni kategorijo stvari Ime razreda lahko v Javi uporabimo kot tip polja ali lokalne spremenljivke ali kot povratni tip funkcije (metode) Objekt

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č

Navodila Trgovina iCenter

Navodila Trgovina iCenter Napredovanja v plačne razrede javnih uslužbencev 2019 S pomočjo SAOP programa Kadrovska evidenca lahko ob dokupljeni kodi vodimo napredovanja javnih uslužbencev. Za napredovanja v letu 2019 je potrebno

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č

INFORMATOR BIROKRAT 1/2011

INFORMATOR BIROKRAT 1/2011 ta Veleprodaja Maloprodaja Storitve Računovodstvo Proizvodnja Gostinstvo Turizem Hotelirstvo Ticketing CRM Internetna trgovina Izdelava internetnih strani Grafično oblikovanje NOVOSTI IN NASVETI ZA DELO

Prikaži več

INFORMATOR BIROKRAT 1/2011

INFORMATOR BIROKRAT 1/2011 ta Veleprodaja Maloprodaja Storitve Računovodstvo Proizvodnja Gostinstvo Turizem Hotelirstvo Ticketing CRM Internetna trgovina Izdelava internetnih strani Grafično oblikovanje NOVOSTI IN NASVETI ZA DELO

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č

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č

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č

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č

DSI 2019

DSI 2019 SINERGIJA PROTOKOLA IPFS IN TEHNOLOGIJE VERIŽENJA BLOKOV Aida Kamišalić Latifić, Muhamed Turkanović, Blaž Podgorelec, Marjan Heričko TEHNOLOGIJA VERIŽENJA BLOKOV in IPFS Porazdeljena & decentralizirana

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č

Slajd 1

Slajd 1 REPUBLIKA SLOVENIJA MINISTRSTVO ZA JAVNO UPRAVO 1 EU ENOTNI DIGITALNI PORTAL: PRIHAJA NOVA EU UREDBA Alenka Žužek Nemec, Tina Kuliš DNEVI SLOVENSKE INFORMATIKE 18. april 2018 Ko podjetja ali državljani

Prikaži več

Upravljanje sistema COBISS Navodila za uporabo tiskalnika CITIZEN S310II V1.0 VIF-NA-27-SI

Upravljanje sistema COBISS Navodila za uporabo tiskalnika CITIZEN S310II V1.0 VIF-NA-27-SI Navodila za uporabo tiskalnika CITIZEN S310II V1.0 VIF-NA-27-SI IZUM, 2015 COBISS, COMARC, COBIB, COLIB, IZUM so zaščitene znamke v lasti javnega zavoda IZUM. KAZALO VSEBINE 1 Uvod... 1 2 Uporaba tiskalnika...

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č

Microsoft Word - Brosura neobvezni IP 2018

Microsoft Word - Brosura  neobvezni IP 2018 Drage učenke in učenci, spoštovani starši! Po 20. a člen ZOoš šola ponuja za učence 1.razreda, 4. 9. razreda neobvezne izbirne predmete. Šola bo za učence 1. razreda izvajala pouk prvega tujega jezika

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č

Microsoft Word - Analiza rezultatov NPZ matematika 2018.docx

Microsoft Word - Analiza rezultatov NPZ matematika 2018.docx Analiza dosežkov pri predmetu matematika za NPZ 28 6. razred NPZ matematika 28 Dosežek šole Povprečno število točk v % Državno povprečje Povprečno število točk v % Odstopanje v % 49,55 52,52 2,97 Povprečni

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č

(Microsoft Word - MSDN AA Navodila za \232tudente FS.doc)

(Microsoft Word - MSDN AA Navodila za \232tudente FS.doc) 1. Pogoji uporabe programske opreme Pred uporabo programske opreme iz programa MSDNAA morate prebrati in se strinjati s pogoji in določili Licenčne pogodbe za končnega uporabnika programske opreme MSDN

Prikaži več

Elektronska pošta

Elektronska pošta Elektronska pošta ZGODOVINA Prvo sporočilo je bilo poslano leta 1971. Besedilo, ki ga je vsebovalo, je bilo QWERTYUIOP. Pošiljatelj je bil Ray Tomlinson, računalnika med katerima je bilo sporočilo poslano

Prikaži več

(Microsoft Word - Nakupovalni vodi\350 po angle\232kih spletnih trgovinah - IzAnglije)

(Microsoft Word - Nakupovalni vodi\350 po angle\232kih spletnih trgovinah - IzAnglije) Nakupovalni vodič po angleških spletnih trgovinah Vedno več ljudi se odloča za nakupe preko spleta. Cene na spletu so pogosto ugodnejše, izbira bolj široka, nakupovanje pa je enostavno in udobno. Dandanes

Prikaži več

Spoznajmo PowerPoint 2013

Spoznajmo PowerPoint 2013 Spoznajmo PowerPoint 2013 13 Nova predstavitev Besedilo v predstavitvi Besedilo, ki se pojavlja v predstavitvah lahko premaknemo kamorkoli v diapozitivu. Kadar izdelamo diapozitiv z že ustvarjenimi okvirji

Prikaži več

Vaja 3 Kopiranje VM in namestitev aplikacij - strežnik SQL 2000 SP3a A. Lokalni strežnik Vmware ESX Dodajanje uporabnikov vajexx v skupino Vaje

Vaja 3 Kopiranje VM in namestitev aplikacij - strežnik SQL 2000 SP3a A. Lokalni strežnik Vmware ESX Dodajanje uporabnikov vajexx v skupino Vaje Vaja 3 Kopiranje VM in namestitev aplikacij - strežnik SQL 2000 SP3a A. Lokalni strežnik Vmware ESX 3.5 1. Dodajanje uporabnikov vajexx v skupino Vaje 2. Kopiranje Win2003 strežnika in registracija na

Prikaži več

Miluma Trader Miluma Trader navodila: V nadaljevanju sledijo osnovna navodila, kako začeli uporabljati Miluma Trader. 1. Preverite spletno stran Ta po

Miluma Trader Miluma Trader navodila: V nadaljevanju sledijo osnovna navodila, kako začeli uporabljati Miluma Trader. 1. Preverite spletno stran Ta po navodila: V nadaljevanju sledijo osnovna navodila, kako začeli uporabljati. 1. Preverite spletno stran Ta posnetek zaslona vam prikazuje, da morate v levem vrhnjem kotu preveriti, če se nahajate na pravi

Prikaži več

ISOFT , računalniški inženiring

ISOFT , računalniški inženiring ISOFT, računalniški inženiring Marko Kastelic s.p. Sad 2, 1296 Šentvid pri stični Spletna stran podjetja:http://www.isoft.si podjetja ISOFT Spletna stran sistema sledenja vozil track.si: http://www.track.si

Prikaži več

Postopek poracuna 2007 za JU

Postopek poracuna 2007 za JU POSTOPEK PORAČUNA PLAČ V JAVNEM SEKTORJU ZA OBDOBJE JANUAR-JUNIJ 2007 Ljubljana, julij 2007 verzija 1.00 Stran - 1 Skladno z objavo Zakona o spremembah in dopolnitvah zakona o sistemu plač v javnem sektorju

Prikaži več

Najprej si poglejmo učilnico. Za vse začetnike lahko tukaj najdete čudovito knjigo Python za programiranje. Poda odlično iztočnico za učenje. Priporoč

Najprej si poglejmo učilnico. Za vse začetnike lahko tukaj najdete čudovito knjigo Python za programiranje. Poda odlično iztočnico za učenje. Priporoč Najprej si poglejmo učilnico. Za vse začetnike lahko tukaj najdete čudovito knjigo Python za programiranje. Poda odlično iztočnico za učenje. Priporočam vam, da si v začetnih tednih vzamete par dni in

Prikaži več

Diapozitiv 1

Diapozitiv 1 REPUBLIKA SLOVENIJA MINISTRSTVO ZA JAVNO UPRAVO Dnevi slovenske informatike 2019 NOVOSTI NA PODROČJU STORTEV ZAUPANJA DRŽAVNEGA CENTRA SI-TRUST Dr. Alenka Žužek Nemec 16. april 2019 e-identitete v Sloveniji

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č

Space Invaders Opis igre: Originalna igra: Space Invaders je arkadna igra, ki so jo ustvarili leta Bila je ena izmed prvih streljaških iger, v k

Space Invaders Opis igre: Originalna igra: Space Invaders je arkadna igra, ki so jo ustvarili leta Bila je ena izmed prvih streljaških iger, v k Space Invaders Opis igre: Originalna igra: Space Invaders je arkadna igra, ki so jo ustvarili leta 1978. Bila je ena izmed prvih streljaških iger, v kateri je igralec vodil laserski top ali vesoljsko ladjo,

Prikaži več

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č

Primerjava razvoja prave domorodne mobilne aplikacije in razvoja z uporabo ogrodja React Native

Primerjava razvoja prave domorodne mobilne aplikacije in razvoja z uporabo ogrodja React Native Univerza v Ljubljani Fakulteta za računalništvo in informatiko David Mihelj Primerjava razvoja prave domorodne mobilne aplikacije in razvoja z uporabo ogrodja React Native DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI

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č

ŠTEVCI PROMETA IN NJIHOVA UPORABA ZA NAMENE STATISTIK ČRT GRAHONJA

ŠTEVCI PROMETA IN NJIHOVA UPORABA ZA NAMENE STATISTIK ČRT GRAHONJA ŠTEVCI PROMETA IN NJIHOVA UPORABA ZA NAMENE STATISTIK ČRT GRAHONJA Navdih Poizvedovanje po BD podatkovnih virih, ki imajo časovno dimenzijo in so dostopni. Večji promet pomeni večje število dobrin in močnejšo

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č

Najboljša skupaj Kontrola pristopa + registracija delovnega časa

Najboljša skupaj Kontrola pristopa + registracija delovnega časa Najboljša skupaj Kontrola pristopa + registracija delovnega časa Globalna rešitev prilagojena lokalnemu okolju Rešitev Time&Space je na voljo v 15-ih jezikih ter podpira latinico, cirilico in arabsko pisavo.

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č

Brezplačno učenje zaposlenim in brezposelnim od 2018 do 2022 omogočata Ministrstvo za izobraževanje, znanost in šport ter Evropska unija iz Evropskega

Brezplačno učenje zaposlenim in brezposelnim od 2018 do 2022 omogočata Ministrstvo za izobraževanje, znanost in šport ter Evropska unija iz Evropskega ter Evropska unija iz Evropskega socialnega sklada Računalniška pismenost za odrasle 60 ur. - Seznaniti vas z osnovnimi komponentami računalnika in osnovnimi pojmi informacijske tehnologije. - Naučiti

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č

Navodila za pisanje diplomskih nalog UM FERI

Navodila za pisanje diplomskih nalog UM FERI Domen Kupnik RAZVOJ APLIKACIJE ZA UPRAVLJANJE SLIK IN ALBUMOV NA MOBILNI PLATFORMI ANDROID Diplomsko delo Maribor, september 2012 Aplikacija za upravljanje slik in albumov na mobilni platformi Android

Prikaži več

PowerPointova predstavitev

PowerPointova predstavitev TIK terminal nima povezave s strežnikom Ob vpisu v TIK Admin se pojavi napis ni povezave s strežnikom Na terminalu je ikona 1. preverimo ali je pravilno nastavljen IP strežnika 1. Preverimo datoteko TIKSAdmin.INI

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č

Diapozitiv 1

Diapozitiv 1 Računalništvo in informatika Program: Mehatronika dr. Hubert Fröhlich, univ. dipl. el. Podatkovne baze 2 Podatkovne baze Podatki osnova za odločanje in izvajanje akcij tiskana oblika elektronska oblika

Prikaži več

Luka Pečečnik MOBILNI SVETOVALEC ZA NAKUP MOTORNEGA VOZILA Diplomsko delo Maribor, september 2011

Luka Pečečnik MOBILNI SVETOVALEC ZA NAKUP MOTORNEGA VOZILA Diplomsko delo Maribor, september 2011 Luka Pečečnik MOBILNI SVETOVALEC ZA NAKUP MOTORNEGA VOZILA Diplomsko delo Maribor, september 2011 I Diplomsko delo visokošolskega strokovnega študijskega programa MOBILNI SVETOVALEC ZA NAKUP MOTORNEGA

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č

ACAD-BAU-Analiza-prostorov

ACAD-BAU-Analiza-prostorov ANALIZA PROSTOROV Ko obdelujemo večje projekte, je analiza prostorov zelo pomembna v vseh fazah projektiranja. Pri idejnem snovanju moramo npr. za določeno površino trgovske namembnosti zagotoviti primerno

Prikaži več

UNIVERZA V LJUBLJANI FAKULTETA ZA MATEMATIKO IN FIZIKO Katja Ciglar Analiza občutljivosti v Excel-u Seminarska naloga pri predmetu Optimizacija v fina

UNIVERZA V LJUBLJANI FAKULTETA ZA MATEMATIKO IN FIZIKO Katja Ciglar Analiza občutljivosti v Excel-u Seminarska naloga pri predmetu Optimizacija v fina UNIVERZA V LJUBLJANI FAKULTETA ZA MATEMATIKO IN FIZIKO Katja Ciglar Analiza občutljivosti v Excel-u Seminarska naloga pri predmetu Optimizacija v financah Ljubljana, 2010 1. Klasični pristop k analizi

Prikaži več

Zapisnik 1

Zapisnik 1 Letno poročilo o študentski anketi UP FHŠ za študijsko leto 2014/15 Letno poročilo o rezultatih anketiranja se pripravi skladno s Pravilnikom o izvajanju študentske ankete Univerze na Primorskem in vsebuje:

Prikaži več