SVEUČILIŠTE U ZAGREBU FAKULTET ORGANIZACIJE I INFORMATIKE V A R A Ţ D I N
|
|
- Leona Powell
- 5 years ago
- Views:
Transcription
1 SVEUČILIŠTE U ZAGREBU FAKULTET ORGANIZACIJE I INFORMATIKE V A R A Ţ D I N Senko Pušec ZODB ZAVRŠNI RAD Varaţdin, 2016.
2 SVEUČILIŠTE U ZAGREBU FAKULTET ORGANIZACIJE I INFORMATIKE V A R A Ţ D I N Senko Pušec Matični broj: 39216/11 I Studij: Poslovni sustavi ZODB ZAVRŠNI RAD Mentor: Doc.dr.sc Markus Schatten Varaţdin, rujan 2016.
3 Sadrţaj 1. Uvod Objektne baze podataka Povijesni razvoj objektno-orijentiranih baza Osnovni koncepti Usporedba OID-a sa Vanjskim ključem Objektno-orijentirana baza podataka Usporedba sa relacijskim bazama podataka Objektno-relacijske baze podataka ZODB Svojstva ZODB-a Vrste pohrane u ZODB-u Pickling Binarna stabla Buckets Pohrana kao atribut/pohrana kao BTree BinaryLargeOBject Phone Book aplikacija Dijagram klasa za bazu Klasa User Klasa Contact Klasa PersonalContact Prijava i rad u aplikaciji Upiti prema bazi te rad s listama Zaključak Literatura Prilog - programski kod
4 1. Uvod Objektno-orijentirane baze iako već dugo postoje nisu u često spominjane, barem ne čisto objektno-orijentirane baze podataka. Iako smo se za vrijeme obrazovanja često sretali s principima objektno-orijentirane paradigme u programskim jezicima, rješenja koja smo razvijali često su za spremanje podataka imale obične relacijske baze podataka. Prvo susretanje s objektno-orijentiranim bazama podataka zapravo su bili ORM alati bilo u Javi (Persistence) ili u C# (Entity Framework) koje su nam pokazali kako je puno lakše razvijati aplikaciju bez SQL upita već putem LINQ-a i sl. MeĎutim ORM nije isto što i objektno-orijentirana baza podataka jer ORM zapravo sakriva relacijsku bazu podataka i jednostavno mapira tablice u bazi podataka u klase u programskom jeziku, dakle sve je ipak u pozadini SQL upit. Stoga smo odlučili provjeriti čistu objektno-orijentiranu bazu podataka, a to je bio nativna python objektno-orijentirana baza podataka ZODB, koja je nastala iz Zope Web Framework-a i koja omogućuje spremanje čistih objekata u bazu. Postoji velik broj komercijalnih i besplatnih sustava za upravljanje objektno-orijentiranim bazama meďutim ZODB se čini najjednostavnijim i najlakšim za korištenje zbog manjka dodatnog koda za integraciju u aplikacije. 2
5 2. Objektne baze podataka Objektna baza (eng. object database) ili objektno orijentirana baza podataka, je sustav upravljanja bazama podataka u kojoj su informacije predstavljene u obliku objekata. Relacijske baze podataka koje predstavljaju jedan od stupova informatike su jedno vrijeme bile dostatne za tradicionalne aplikativne domene kao što je procesiranje administrativnih podataka itd, meďutim daljnjim razvojem informatike u mnogim drugim aplikativnim domenama dolazi do obrade puno kompleksnijih vrsta podataka. Takvi podaci su uglavnom bili pohranjivani u podatkovnom podsustavu operacijskog sustava ili i u specijaliziranim podatkovnim strukturama prije nego u relacijskim bazama podataka. Jedan od primjera kompleksnih podataka koji su se na takav ili sličan način obraďivali je CAD/CAM sustav (eng. computer aided modeling / design). Porastom količine podataka, mnoge značajke DBMS sustava su postajale sve zanimljive je i štoviše potrebne. MeĎutim kako bi se te značajke DBMS sustava mogle upotrebljavati u gore navedenim slučajevima korištenja bilo je potrebito uvesti podršku kompleksnih tipova podataka u DBMS-ove. Koncepti objektnoorijentiranog programiranja su uvelike utjecali na zahtjev DBMS podrške kompleksnih tipova podataka i eventualno dovele do stvaranja objektno orijentiranih baza podataka odnosno sustava za upravljanje objektno orijentiranim bazama podataka. Objektne baze podataka su se kasnije razvijale u dva različita smjera: objektno-orijentirane baze te objektno-relacijske baze.[2] 2.1. Povijesni razvoj objektno-orijentiranih baza Objektne baze podataka ili objektno-orijentirane baze podataka su nastale na temelju istraživanja za unutrašnju podršku strukturiranih podataka (graf) u sustavima za upravljanje bazama podataka. Od tih istraživanja najvažnije je spomenuti sljedeća koja su imali utjecaj na razvoj objektno orijentiranih baza: IRIS (Hewlett-Packard), ODE (Bell Labs), ORION (MCC - Microelectronics and Computer Technology Corporation) i Zeitgeist (TI - Texas Instruments). Rani komercijalni proizvodi su bili Gemstone (Gemstone Systems), Gbase (Graphael) i VBase (Ontologic). Na razvoj objektno-orijentiranih baza za vrijeme 80-ih godina 20. stoljeća veliki utjecaj je imala sve veća zainteresiranost u objektno-orijentirane programske jezike. Objektno-orijentirani programski jezici kao što su C++ i Simula su se tek pojavili na programskoj sceni i pružali su potpuno novi pristup razvoju software-a koji je naglašavao korištenje objekata, te enkapsulacije objektne strukture i ponašanja korištenjem 3
6 apstraktnih tipova podataka. Spajanje perzistentnih, na objektima temeljenih, podataka sa objektno orijentiranim programskim jezicima obećavalo je novu paradigmu za baze podataka koja bi zajedno sa fleksibilnošću objektno orijentiranih programskih jezika omogućila efikasnu reprezentaciju velikih i kompleksnih setova podataka. Najveća prednost paradigme objektno orijentiranih baza podataka je bilo rješenje impendance mismatch problema što joj je omogućavalo jednostavnu integraciju baze podataka sa programskim jezikom. Impendance mismatch problem je problem koji se odnosi na razlike izmeďu deklarativnog pristupa bazama podataka i relacijskog, imperativnog odnosno pristupa programskih jezika prema podacima.[] 2.2. Osnovni koncepti Jedan od glavnih ciljeva objektnih baza podataka je podrška za perzistentnost objekata zajedno značajkama koje se uobičajeno očekuju od sustava baza podataka, a neke od tih značajki su: učinkovito upravljanje perzistentnim podacima, transakcije, istodobnost (eng. concurrency) i kontrola oporavka. Izazov za objektno orijentirane baze podataka je podrška gore navedenih značajki u kontekstu objektno orijentiranog programiranja i njegove složenosti. Sljedeći koncepti objektno orijentiranog programiranja su tipično vezani uz objektno orijentirane baze podataka (Dietrich i Urban, 2014) : složeni odnosno kompleksni objekti identitet objekta enkapsulacija ili učahurivanje ekstenzibilnost hijerarhija klasa i nasljeďivanje preopterećenje (overloading), polimorfizam, i late binding Mogućnost definiranja kompleksnih objekata iz jednostavnijih je važno svojstvo objektno-orijentiranog pristupa. Kompleksni objekti su definirani korištenje konstruktora, kao što je npr. tuple (par) konstruktor koji kombinira jednostavne objekte kako bi napravio kompleksniji objekt. Jedan od primjera gore navedene značajke objektno-orijentiranog pristupa bi bio avion, za koji se može reći da je kompleksni objekt koji se sastoji od drugih jednostavnijih objekata kao što krila, trup i motori.[1] 4
7 Objekti isto tako imaju objektni identitet putem interno dodijeljenog objektnog identifikatora (oid). Za razliku od ključeva u relacijskom modelu, oid je nepromjenjiv (immutable) što znači da kada je objekt jednom kreiran oid ostaje isti za vrijeme trajanja objekta. Usporedno s tim stanje objekta je promjenjivo (mutable) što znači da se vrijednosti svojstava (eng. property) mogu mijenjati. Sustav baze podataka koristi oid kao referencu izmeďu objekata kako bi stvorio kompleksne objekte. Vrijednosti svojstava se stoga ne koriste kao jedinstveni identifikatori za objekt u bazi podataka. To je zasebnost po kojoj se razlikuj objektno-orijentirani model od modela relacijskih baza podataka, koji koristi vrijednosti atributa (primarni - vanjski ključ).[2] Enkapsulacija ili učahurivanje se odnosi na mogućnost stvaranja klase kao apstraktnog tipa podatka, koji ima sučelje i implementaciju. Sučelje definira ponašanje apstraktnog tipa podatka na konceptualnoj razini dok implementacija definira realizaciju tog ponašanja na razini programskog jezika. Korištenjem koncepta učahurivanja, implementacija klase se može promijeniti bez utjecanja na sučelje koje klasa pruža ostatku aplikacije. Objektno-orijentirane baze podataka podržavaju učahurivanje specificiranjem tipova definiranih od strane korisnika. Sa ekstenzibilnošću nema razlike izmeďu korištenje tipova koji su definirani od strane sustava i onih koje definira korisnik. Odnosno korisnik može stvoriti nove tipove koji odgovaraju semantici aplikacije i koristiti ih na isti način kao i tipove koje je definirao sustav Usporedba OID-a sa Vanjskim ključem Kao što je gore navedeno, korištenje oid kao referencu za objekt je vrlo slično korištenju vanjskog ključa za referencu para (eng. tuple) ali s mali i bitnim razlikama. OID može pokazivati na objekt koji je spremljen bilo gdje u bazi podataka, čak i ako se nalazi u polju, dok je vanjski ključ ograničen na pokazivanje objekta koji se nalazi u specifično referenciranoj relaciji. (Ramakrishnan Gehrke, 2003) 2.3. Objektno-orijentirane baze podataka Objektno-orijentirane baze podataka ili sustavi za upravljanje objektno-orijentiranim bazama podataka su baze podataka u kojima se spremaju objekti umjesto podataka kao što su integeri ili string-ovi itd. Radi lakšeg pojašnjenja koncepta objektno-orijentiranih baza podataka ukratko ćemo objasniti objekte. Objekti se prema konceptima objektno-orijentiranog pristupa sastoje od atributa i metoda. Atributi su podaci koji odreďuju karakteristike objekta, 5
8 oni mogu biti jednostavni tipovi podataka (integer, string) ili reference na složenije tipove podataka. Metode odreďuju ponašanje objekta odnosno to su procedure i funkcije Usporedba sa relacijskim bazama podataka Relacijske baze podataka spremaju podatke u tablice koje su dvodimenzionalne. Tablice imaju stupce i retke i normalizirane su kako se podaci sadržani u njima ne ponavljaju više nego što je potrebno. Svi stupci u tablici ovise o primarnom ključu, koji je jedinstvena vrijednost u stupcu, radi identifikacije. Kada je specifični stupac identificiran, podaci iz jednog ili više redaka povezanih s tim stupcem, mogu se dohvatiti ili izmijeniti. Kompleksni tipovi podataka se ne mogu lagano spremati u relacijske baze podataka jer to zahtijeva razbijanje kompleksnih informacija u jednostavne podatke i zahtjeva puno vremena i u većini slučajeva puno koda. Prednosti objektno-orijentiranih baza podataka naspram relacijskih baza podataka su: Objekti se ne moraju sastavljati i rastavljati time štedeći vrijeme implementacije tj kodiranja i izvršavanja smanjeno straničenje lakša navigacija Bolja kontrola istodobnosti (eng. concurrency) Model podataka se temelji na stvarnoj pojavi tj stvarnom svijetu Dobro funkcionira za distribuirane arhitekture Manje programskog koda ako se aplikacije pridržavaju objektno-orijentiranog pristupa MeĎutim u nekim slučajevima su objektno-orijentirane baze loš odabir. Ukoliko se radi o jednostavnim aplikacijama učinkovitost te brzina pristupa su bolje u relacijskim bazama podataka.[1] Stoga možemo reći da objektno-orijentirane baze podataka funkcioniraju bolje sa: CAS aplikacijama (CASE - computer aided software engineering, CAD - computer aided design, CAM - computer aided manufacture) Multimedijskim aplikacijama Trgovinske aplikacije (eng. commerce) 6
9 2.4. Objektno-relacijske baze podataka Objektno-relacijske baze podataka su vrlo slične relacijskim bazama podataka ali sadrže objektno-orijentirani model baze podataka. Objekti, klase i nasljeďivanje su direktno podržane i shemama baze podataka i jeziku za upite. Za objektno-relacijske baze podataka se može reći kako predstavljaju kompromis izmeďu objektno-orijentiranih baza i relacijskih.[1] 3. ZODB ZODB ili Zope Object DataBase je nativna objektno-orijentirana baza podataka za python programski jezik. jedne od glavnih značajki koje razlikuju ovu objektno-orijentiranu bazu podataka od ostalih rješenja su: za operacije na bazi podataka se koristi python a ne neki zasebni programski jezik, potrebne su jako male promjene koda kako bi se objekti napravili perzistentnima, nepostojanje mapper-a za mapiranja baze podataka koji zapravo samo skriva jedan dio baze (ORM nije isto što objektno-orijentirana baza podataka iako se na prvi pogled možda čini tako), nije potrebna velika količina dodatnog koda za integraciju s bazom.[6] 3.1. Svojstva ZODB-a Jedno od glavnih svojstava koje najviše privlači developere ZODB-u je njegov minimalizam. On je zapravo ogoljena baza podataka koji sadrži samo osnovne značajke kao što je perzistentnost i podršku za transakcije, ali to ga ne čini slabijim ili lošijim od ostalih objektno-orijentiranih baza podataka jer, kao i većina modula u python ekosustavu, postoji pregršt ekstenzija za nj. Jezgru samog ZODB-a čine sljedeće značajke: familijarnost - kao što je prethodno rečeno, ne koristi se zasebni programski jezik za operacije na bazi podataka, u bazu se spremaju nativni python objekti te se koristi pickle modul koji je većini python developera poznat. Budući da je cijelio ZODB pisan u pythonu moguće je vidjeti unutrašnje mehanizme i operacije samog ZODB-a te, iako vrlo rijetko, napraviti preinake na njemu. Jednostavnost ZODB-a je isto tako vrlo bitna značajka. Sama baza podataka je hijerarhijska baza podataka što znači da imam korijenski object ili root koji se inicijalizira prilikom stvaranje same baze. Taj se objekt potom koristi na isti način kao i dictionary u pythonu te može sadržavati druge objekte koji i sami mogu biti dictionary tipa, iako postoje neke stvari koje se trebaju uzeti u obzir i koje su kasnije opisane. Transparentnost - da bismo napravili instancu klase perzistentnom potreban nam je modul persistence odnosno njegov dio a to je 7
10 klasa Persistence. Nakon što definiramo klasu koja nasljeďuje od klase Persistence ostali dio spremanja objekata i ažuriranja istih, ukoliko doďe do njihove promjene, obavlja ZODB. Isto tako mogu se spremati objekti koji nisu perzistentni kao što je običan dictionary ili list meďutim tada ZODB ne može detektirati promjene na njima i potrebno ga je obavijestiti kada doďe do promjene. ZODB podržava ACID odnosno svoja ACID-a. Transakcijski sustavi se brinu o stanju baze podataka odnosno sprječavaju da baza podataka doďe u nekonzistentno stanje, a to uspijevaju podrškom četiri svojstva koji se poznatiji pod akronimom ACID. ACID akronim predstavlja: Atomičnost (eng. atomicity) - ili će se sve izmjene u transakciji izvršiti odnosno zapisati na bazu podataka ili ukoliko doďe do pogreške i sl. cijela transakcija će biti otkazana. Upravo to omogućuje održavanja konzistentnog stanja baze podataka u slučaju hardverske greške ili greške pisanja. Konzistentnost (eng. consistency) - nijedna transakcija koja zapisuje podatke na bazu neće biti dozvoljena ukoliko bi ona ostavila bazu podataka u nekonzistentnom stanju, transakcija koja čita odnosno dohvaća podatke će vidjeti bazu podataka u konzistentnom stanju u kojem je bila na početku transakcije bez obzira na druge transakcije koje se istovremeno izvršavaju. Izoliranost (eng. isolation) - prilikom izvršavanje promjena na bazi podataka od strane dva različita programa, nijedan od njih neće moći vidjeti transakcije od drugoga dok ne izvrše vlastite transakcije (eng. commit) Postojanost (eng. durability) - podaci će biti spremljeni nakon što je transakcija izvršena. Softverski ili hardverski kvar neće uzrokovati gubitak podataka nakon što je transakcija izvršena.[7] U slučaju velikih promjena na bazi, odnosno u slučaju izvršavanje jedne transakcije kojim se modificira veliki broj objekata istovremeno dolazi do velikog zauzeća memorije koje usporava rad, a razlog usporavanje leži u načinu funkcioniranja ZODB-a, naime sve promjene koje se izvršavaju u jednoj transakciji se zadržavaju u memoriji dok se transakcija ne izvrši. Kako bi se poboljšale performanse i smanjilo zauzeće memorije, ZODB sadrži svojstvo Save Point koje omogućuje developeru da izvrši jedan dio transakcije prije nego je transakcija gotova kako bi se zapisale promjene na bazi podataka i oslobodio dio memorije koju je transakcija zauzela. Ukoliko transakcija koja je izvršena nije trebala biti izvršena ili se greškom prebrisao dio baze ZODB sadrži jednostavan mehanizam za vraćanje baze u prethodno stanje odnosno za poništavanje (eng. roll back) transakcije koji se zove Undo. Ova značajka postoji i funkcionira zato što ZODB pamti stanje baze podataka prije i poslije svake transakcije. Upravo to omogućava poništavanje bilo koje transakcije tj. promjena koje je 8
11 transakcija izvela na bazi. Treba uzeti u obzir kako je ovo jako jednostavan mehanizam te ukoliko je objekt nakon transakcije koju želimo poništiti ponovno promijenjen od strane druge transakcije, poništavanje neće biti moguće zbog gore navedenih ACID svojstava odnosno zbog konzistentnosti. S obzirom da, kao što je gore navedeno, ZODB pamti svaku promjenu na bazi odnosno pamti svaku transakciju, moguće je vidjeti stanje objekta prije i poslije promjene (transakcije) te ih usporediti što omogućuje implementaciju jednostavnog verzioniranja. ZODB dakle može spremati skoro pa sve vrste objekata koji postoje u python programskom jeziku, meďutim ukoliko želimo spremiti posebne vrste podataka kao što su multimedijski podaci itd. potrebno je koristiti ZODB-ov Blob. Veliki binarni objekti kao što su slike i dokumenti bi se trebali spremati u Blob objekt jer bi njihovo spremanje kao običnih svojstava objekta znatno usporilo bazu podataka te značajno povećalo veličinu baze. ZODB potom ima specijalnu vrstu Storage-a koje se zove Blob Storage pomoću kojeg je moguće lako rukovati velikim datotekama bez degradiranja performansi. [7] 3.2. Vrste pohrane u ZODB-u Vrste različitih pohrana (storing backends) u ZODB: Pickling Binarna stabla (engl. Binarytrees) Buckets Pohrana kao atribut / pohrana kao BTree BLOBs (BinaryLargeOBject) U nastavku je objašnjeno kako se podatci spremaju u ZODB što je bitno za razumijevanje ponašanja i optimizacije Plone baze podataka Pickling ZODB je objektno orijentirana baza podataka. Svi podaci u ZODB se pohranjuju kao pickled Python objekti. Pickle je objektni serializacijski modul Python standardne biblioteke. 9
12 Svaki put kada je objekt pročitan i nije spremljen u meďuspremnik (not cached), objekt se čita iz ZODB baze podataka i unpickled je Svaki put kad je objekt napisan, on je pickled i pomoću sustava za transakcije ga se dodaje na ZODB bazu podataka Pickle format je niz bajtova. Na donjem primjeru možemo vidjeti kako to izgleda: >>> import pickle >>>data = { "key" : "value" } >>>pickled = pickle.dumps(data) >>>printpickled (dp0 S'key' p1 S'value' p2 s. To nije format optimalan za čitanje. Čak i ako koristimo SQL temeljeni RealStorage ZODB backend, objekti su i dalje pickled na bazu podataka, SQL ne podržava varirajući tabličnu shemu po redu i Python objekti nemaju fiksnu shmenu za format Binarna stabla Podatci su obično organizirani u binarna stabla ili Bstabla (engl. BTrees). Točnije, podatci se obično pohranjuju kao objektno orijentirana binarna stabla (engl. OOBtree) koja daju Python objekt kao ključ i Python object value mapping. Ključ je objekt id u parentcontainer-u kao string, a vrijednost je bilo koji pickleable Python objekt ili primitive koju spremamo u bazu podataka.[7] Buckets BTree pophranjuje podatke u buckets (OOBucket). Bucket je najmanja jedinica podataka koje se jednom upisuje u bazu podataka. Buckets se pune sporo: BTree učitava jedino bucket-e koji spremaju vrijednosti ključeva kojima se pristupa. BTree pokušava staviti što je više moguće podataka u jedan bucket. Kada se jedna vrijednost u bucket-u promijeni, cijeli bucket mora biti prepisan na disk. Zadana veličina bucket-a je 30 objekata.[7] 10
13 Pohrana kao atribut / pohrana kao BTree Plone ima dva temeljna načina za pohranu podataka: Attributestorage (pohranjuje vrijednosti direktno u pickled objekte) Annotationstorage (OOBTreebased) plone objekti imaju atribut _annotations_ koji je OOBTree za pohranu objekata bez konflikta prilikom imenovanja. Kada su objekti pohranjeni u annotation storage obliku, čitanje vrijednosti objekta zahtjeva barem jedan dodatni upit u bazi podataka, za učitavanje prvog bucket-a iz OOBTree. Ako će se vrijednost koristiti često, posebice ako se čita kod pregleda sadržaja objekta, pohranjivanje u attribute je efikasnije nego pohranjivanje u annotation. Razlog tome je što BTree _annotation_ je zasebni perzistentni objekt koji mora biti učitan u memoriju i može izbaciti nešto drugo iz ZODB meďuspremnika (engl.zodb cache). Ako je u atributu pohranjena velika vrijednost povećati će se upotreba memorije, jer će se učitati u memoriju svaki put kada je objekt dohvaćen iz ZODB.[7] BinaryLargeOBject BLOBs su veliki binarni objekti poput datoteka ili slika. Podržani su od verzije ZODB 3.8.x. Kada koristimo BLOB sučelje za pohranu i dohvaćanje podataka, oni su spremljeni fizički kao datoteke na datotečnom sustavu. Datotečni sustav, kao što mu ime govori, je osmišljen kako bi upravljao podatcima i ima daleko bolje performanse sa velikim binarnim podatcima nego pohranjivanje podataka u ZODB. BLOBs su streamable što znači da možemo početi posluživati datoteku od početka te datoteke na HTTP, bez potrebe da se učita cijela datoteka u memoriju(što je sporo).[7] 11
14 4. Phone Book aplikacija Primjer korištenja ZODB-a u napravljen za ovaj završni rad je jednostavna aplikacija za upravljanje kontaktima. Korišteni su sljedeći moduli: tkinter - GUI za aplikaciju flask_bcrypt - za enkripciju lozinke ZODB - objektno-orijentirana baza podataka persistent - generička implementacija perzistentnosti ZEO - Zope Enterprise Objects, client-server sistem za dijeljenje spremnika (storage) izmeďu više klijenata transaction - generička implementacija transakcija logging - standardni mehanizam za logiranje Jedan od uvjeta postavljenih za ovu temu je bilo korištenje Client Storage-a odosno mrežnog spremnika i zbog toga je korišten modul ZEO koji unutar sebe sadrži runzeo.py skriptu koja pokreće mrežnog poslužitelja na kojem se nalazi spremnik i koji se potom dijeli izmeďu korisnika 12
15 4.1. Dijagram klasa za bazu Class diagram koji je korišten u ovoj aplikaciji je vrlo jednostavan i sastoji se od klase user,contact te personalcontact. Klasa user sadrži svojstva (eng. property) username ili korisničko ime, password ili lozinka te PersistenList object Contacts u koji se spremaju kontakti nakon što se pozove funkcija add_contacts(). 1. Dijagram klasa koje se spremaju u bazu Sve klase koje se nalaze na dijagramu nasljeďuju klasu Persistent koja je implementacija generičke perzistencije za python. Korisnik može imati više osobnih kontakata ali kontakt može imati samo jednog autora koji je objekt tipa User. Budući da sve klase nasljeďuju baznu klasu Persistent, ZODB može detektirati promjene na njima i tako obavijestiti ostale klijente koje koriste istu bazu odnosno Client Storage. 13
16 Klasa user Klasa user kao što je vidljivo na dijagramu klasa ima svojstva USERNAME, PASSWORD te CONTACTS. 2. Isječak koda koji prikazuje implementaciju klase user Prilikom instanciranja klase odnosno poziva se ugraďena python funkcija init () odnosno u slučaju pythona konstruktor. On prihvaća dva argumenta, username i password, password se pomoću modula flask_bcrypt hashira radi sigurnosti jer spremanje lozinki u bazi u obliku čistog texta je primjer loše prakse. Drugi zanimljivi dio je dodavanje kontakata pomoću funkcije add_contact() koja instancira klasu PersonalContact koja nasljeďuje klasu Contact. Kao parametre prima name, contact_number te nasljeďivanjem i parametar autor gdje se stavlja trenutni user koji instancira klasu Klasa Contact Sadrži svojstva: NAME - ime kontakta koji se dodaje CONTACT-NUMBER - telefonski broj/mobitel kontakta AUTOR - korisnik koji je kreirao ovaj kontakt 14
17 3. Isječak koda koji prikazuje implementaciju klase Contact Klasa PersonalContact NasljeĎuje sva svoja svojstva od klase Contact. 4. Isječak koda koji prikazuje implementaciju klase PersonalContact 4.2. Prijava i rad u aplikaciji Aplikacija je vrlo jednostavna i sastoji se od samo dva prozora, prvi prozor je logiranje korisnika odnosno provjera njegovih podataka u bazi podataka. 5. Prozor za prijavu korisnika Nakon uspješne prijave korisnika, korisniku se otvara prozor tk2 koji predstavlja sve njegove kontakte i omogućuje mu CRUD nad svojim kontaktima. Korisnik vidi isključivo kontakte 15
18 koje je on kreirao i ne druge. Dakle nakon uspješne prijava na sustav se pokreće upit koji dohvaća sve kontakte kojima je svojstvo autor jednako autoru koji se uspješno prijavio na sustav. 6. Prozor za rad sa kontaktima U listbox-u se nalaze svi kontakti koje je napravio trenutno prijavljeni korisnik. Klikom na neki od njih te pritiskom na tipku Load dohvaćaju se dodatni podaci o trenutno odabranom kontaktu i ispisuju se u textbox-ove. Za brisanje kontakta opet se mora odabrati jedan kontakt iz listobox te potom pritisnuti dugme Delete. Za dodavanje novog korisnika potrebno je upisati podatke u polja name i phone te potom pritisnuti na tipku Add. Za ažuriranje korisnika potrebno je odabrati korisnika iz listbox-a te potom obaviti promjene u poljima name i/ili phone te stisnuti dugme Update Upiti prema bazi te rad s listama Većina upita dolje opisana i prikazana su vrlo jednostavna i zahvaljujući jednostavnosti pythona vrlo kratka. Slični upiti u drugim programskim jezicima bi vjerojatno zahtijevali veći broj iteracija i veću količinu koda. Inicijalizacija baze te dodavanje početnih korisnika se izvršava u tri koraka, prvi korak je samo spajanje na ClientStorage, otvaranje konekcije te dohvaćanje root elementa iz baze. Potom se dodaju dva nova ključa 'korisnici' te 'kontakti' koji su tipa persistent.persistentlist(). Nakon dodavanja ključeva dolazi do instanciranje user klase gdje dodajemo par probnih korisnika te probnih kontakata koji se potom dodaju u bazu. 16
19 7. Isječak koda koji prikazuje implementaciju klase database 8. Isječak koda koji prikazuje dodavanje početnih korisnika i njihovih kontakata 9. Isječak koda koji prikazuje pražnjenje tablice sa korisnicima Nakon početnog postavljanja baze podataka, možemo početi raditi sa Persistent listama kod kojih su operacije u načelu jednake kao i operacije kod običnih python listi. Dakle elementi u listi imaju svoje indekse i sl Dohvaćanje korisnika putem aplikacije funkcionira na sljedeći način: 17
20 [x for x in root['kontakti'] if x.autor.name == 'senko'] Nakon što je upit izvršen vraća nam se lista koja ovisno o tome postoji li kontakt kojeg je kreirao autor 'senko' vraća jedan ili više elemenata, ako ne postoje kontakti koje je kreirao korisnik 'senko' vraća se prazna lista. Ukoliko želimo dobiti samo jednog korisnika iz liste tada koristimo standardnu python sintaksu za liste: [x for x in root['kontakti'] if x.autor.name == 'senko'][0] Iako je ovo tehnički loš primjer s obzirom da će dohvatiti prvog korisnika u listi, meďutim možemo još dodatno sačuvati gornju listu u varijabli i onda po njoj na isti način izvršiti upit: [x for x in rezultat if x.name == 'marko'][0] S ovim upitom vraća nam se prvi element u listi koji odgovara argumentima postavljenima u upitu. Dakle glavni predložak za rad s listama izgleda sljedeće: [predlozak for varijabla in lista if uvjet] I uvijek kao rezultat vraća objekt tipa lista, osim ako ne odredimo indeksu koji želimo vratiti kao što je opisano gore.[8] Možemo se još dodatno poigrati s listama i tražiti vraćanje isključivo imena kontakata koji odgovoraju upitu: [x.name for x in root['kontakti'] if x.autor.name == 'senko'] Dakle u ovom slučaju upit vraća listu korisničkih imena koji su povezani s autorom 'senko'. Brisanje podataka iz liste je isto tako jednostavno: del root['kontakti'][index_zapisa] del root['kontakti'][:] del root['kontakti'][:3] Prva operacija briše specifični indeks u listi, druga operacija briše sve elemente u listi, treća operacije briše sve elemente u listi do elementa s indeksom tri.[8] 18
21 5. Zaključak Zope Object DataBase je jedan od boljih primjera jednostavnosti i lakoće rada s objektnimbazama. Pisana u potpunosti u python programskom jeziku, omogućuje lako korištenje svih python operacija nad objektima i time omogućuje lako izvršavanje programske logike te brzo dohvaćanje podataka iz baze. MeĎutim za osobe koje dolaze bez predznanja o opčenitom načinu rada s objektnim bazama može predstavljati poneke poteškoće, usprkos tome možemo reći kako je rad sa ZODB-om te njegova integracija bilo u desktop aplikacije ili web aplikacije vrlo jednostavna. ZODB je vrlo jednostavna i zbog toga moćna objektno-orijentirana baza podataka ali kao i svaka objektno-orijentirana baza podataka i on je namijenjen za posebne aplikativne domene iako se može koristi u svakoj domeni. ZODB je prvenstveno namijenjen aplikacijama u kojima nema velikog broja upisivanja u bazu, ali ima dohvaćanja podataka te pretraga po bazi. Najbolji primjeri korištenja ZODB-a su wiki sustav izgraďen uz pomoć Pyramid pythona, te zodb-browser, koji su sve aplikacije u kojima nema velikog broj upisa. Stoga možemo reći kako je ZODB, iako jako jednostavan i zbog toga privlačan, namijenjen za veće aplikacije, distribuirane aplikacije dok je za jednostavne aplikacije kao što je gore opisana aplikacija jednostavno neiskorišten do svog punog potencijala. Najbolji primjeri prave aplikativne primjene ZODB-a se nalaze u plone CMS-u te Zope Web Frameworku gdje ZODB dolazi do svog punog potencijala. 19
22 6. Literatura [1] Suzanne W D,Susan D U (2011) Fundamentals of Object Databases:Object-Oriented and Object-Relational Design San Rafael: Morgan & Claypool. [2] Ramakrishnan R, Gehrke J (2001) Database Management Systems (3. izd.). Boston: McGraw-Hill. [3] Weitershausen P (2009) Web Component Development with Zope (3. izd.). Boston: Springer. [4] Grinberg M (2013) Flask Web Development (2. izd.). Sebastopol: O'Reilly. [5] Chaudhary B (2015)Tkinter GUI Application Development Blueprints(1. izd.). Birmingham: Packt Publishing. [6] Lott F S (2015) Mastering Object-oriented Python (2. izd.). Birmingham: Packt Publishing. [7] ZODB - Native object database for python - Documentation. (2016). Preuzeto 2. rujna s [8] Schatten Markus, Objektno-orijentirane baze podataka prezentacija (2015) 20
23 7. Prilog - programski kod import transaction from ZEO import ClientStorage from ZODB import DB import tkinter from flask_bcrypt import check_password_hash ADDRESS = ((' ', 8090)) ZODB = {} TRENUTNI = None def create_connection(): global root ZODB['storage'] = ClientStorage.ClientStorage(ADDRESS) ZODB['db'] = DB(ZODB['storage']) ZODB['connection'] = ZODB['db'].open() root = ZODB['connection'].root() def close_connection(): ZODB['connection'].close() ZODB['db'].close() ZODB['storage'].close() def commit(thing): try: root['korisnici'].extend(thing) transaction.commit() except Exception as ex: print ex.message def get_korisnic(): print root['korisnici'] def callback(user,passw): global tr try: a = [x for x in root['korisnici'] if x.username == user][0] if check_password_hash(a.password, passw): tr = a create_gui2() else: return None except IndexError: return None 21
24 ########################################################################### ############################################ #### LOGIN ########################################################################### ############################################ def create_gui(): window = tkinter.tk() window.title("python Games Login") window.geometry("270x210") window.configure(bg="#39d972") title1 = tkinter.label(window, text="--log in to play the Python Games--\n", bg="#39d972") usertitle = tkinter.label(window, text="---username---", bg="#39d972") passtitle = tkinter.label(window, text="---password---", bg="#39d972") message = tkinter.label(window, bg="#39d972") user = tkinter.entry(window) passw = tkinter.entry(window, show='*') go = tkinter.button(window, text="log in!",command=lambda: callback(user.get(),passw.get()), bg="#93ff00") title1.pack() usertitle.pack() user.pack() passtitle.pack() passw.pack() go.pack() message.pack() window.mainloop() ########################################################################### ############################################ #### LOGIN ########################################################################### ############################################ ########################################################################### ############################################ #### PBOOK ########################################################################### ############################################ def whichselected () : print "At %s of %d" % (select.curselection(), len(phonelist)) return int(select.curselection()[0]) 22
25 def addentry () : s = tr.add_contact(name.get(),phone.get()) root['kontakti'].extend([s]) transaction.commit() setselect() def updateentry() : rez = [x for x in root['kontakti'] if x.name == select.get(select.curselection()[0])][0] ind = root['kontakti'].index(rez) rez.name = name.get() rez.contact_number = phone.get() root['kontakti'][ind] = rez transaction.commit() setselect() def deleteentry() : rm = [x for x in root['kontakti'] if x.name == select.get(select.curselection()) ][0] print rm.name root['kontakti'].remove(rm) transaction.commit() setselect() def loadentry () : name.delete(0, tkinter.end) phone.delete(0,tkinter.end) rez = [x for x in root['kontakti'] if x.name == select.get(select.curselection()[0])][0] name.insert(tkinter.end,rez.name) phone.insert(tkinter.end, rez.contact_number) def makewindow () : global name,namevar,phonevar, select, phone win = tkinter.tk() namevar = tkinter.stringvar() frame1 = tkinter.frame(win) frame1.pack() phonevar = tkinter.stringvar() tkinter.label(frame1, text="name").grid(row=0, column=0, sticky=tkinter.w) name = tkinter.entry(frame1, textvariable=namevar) name.grid(row=0, column=1, sticky=tkinter.w) tkinter.label(frame1, text="phone").grid(row=1, column=0, sticky=tkinter.w) phone= tkinter.entry(frame1, textvariable=phonevar) phone.grid(row=1, column=1, sticky=tkinter.w) frame2 = tkinter.frame(win) frame2.pack() # Row of buttons 23
26 b1 = tkinter.button(frame2, text=" Add ", command=addentry) b2 = tkinter.button(frame2, text="update", command=updateentry) b3 = tkinter.button(frame2, text="delete", command=deleteentry) b4 = tkinter.button(frame2, text=" Load ", command=loadentry) b1.pack(side=tkinter.left); b2.pack(side=tkinter.left) b3.pack(side=tkinter.left); b4.pack(side=tkinter.left) frame3 = tkinter.frame(win) # select of names frame3.pack() scroll = tkinter.scrollbar(frame3, orient=tkinter.vertical) select = tkinter.listbox(frame3, yscrollcommand=scroll.set, height=6) scroll.config (command=select.yview) scroll.pack(side=tkinter.right, fill=tkinter.y) select.pack(side=tkinter.left, fill=tkinter.both, expand=1) return win def setselect () : select.delete(0,tkinter.end) rezultat = [x for x in root['kontakti'] if x.autor.username == tr.username] print rezultat for x in rezultat: select.insert(tkinter.end, x.name) def create_gui2(): win = makewindow() setselect () win.mainloop() if name == ' main ': create_connection() create_gui() from persistent import Persistent from flask_bcrypt import generate_password_hash from persistent.list import PersistentList class user(persistent): USERNAME = None PASSWORD = None CONTACTS = [] def init (self,username,password): self.username = username self.password = generate_password_hash(password=password) self.contacts = PersistentList() 24
27 def add_contact(self,name,contact_number): contact = PersonalContact(name=name,contact_number=contact_number,autor=self) self.contacts.append(contact) return contact class Contact(Persistent): NAME = None CONTACT_NUMBER = None AUTOR = None def init (self,name, contact_number,autor): self.name = name self.contact_number = contact_number self.autor = autor class PersonalContact(Contact): def init (self,name,contact_number,autor): Contact. init (self,name,contact_number,autor) class Singleton: """ A non-thread-safe helper class to ease implementing singletons. This should be used as a decorator -- not a metaclass -- to the class that should be a singleton. The decorated class can define one ` init ` function that takes only the `self` argument. Other than that, there are no restrictions that apply to the decorated class. To get the singleton instance, use the `Instance` method. Trying to use ` call ` will result in a `TypeError` being raised. Limitations: The decorated class cannot be inherited from. """ def init (self, decorated): self._decorated = decorated def Instance(self): """ Returns the singleton instance. Upon its first call, it creates a new instance of the decorated class and calls its ` init ` method. On all subsequent calls, the already created instance is returned. """ try: return self._instance 25
28 except AttributeError: self._instance = self._decorated() return self._instance def call (self): raise TypeError('Singletons must be accessed through `Instance()`.') def instancecheck (self, inst): return isinstance(inst, self._decorated) 26
VRIJEDNOSTI ATRIBUTA
VRIJEDNOSTI ATRIBUTA Svaki atribut (bilo da je primarni ključ, vanjski ključ ili običan atribut) može i ne mora imati ograničenja na svojim vrijednostima. Neka od ograničenja nad atributima: Null / Not
More informationPREDMET. Osnove Java Programiranja. Čas JAVADOC
PREDMET Osnove Java Programiranja JAVADOC Copyright 2010 UNIVERZITET METROPOLITAN, Beograd. Sva prava zadržana. Bez prethodne pismene dozvole od strane Univerziteta METROPOLITAN zabranjena je reprodukcija,
More informationCSS CSS. selector { property: value; } 3/20/2018. CSS: Cascading Style Sheets
CSS CSS CSS: Cascading Style Sheets - Opisuje izgled (appearance) i raspored (layout) stranice - Sastoji se od CSS pravila, koji defini[u skup stilova selector { property: value; 1 Font face: font-family
More informationOsnove programskog jezika C# Čas 5. Delegati, događaji i interfejsi
Osnove programskog jezika C# Čas 5. Delegati, događaji i interfejsi DELEGATI Bezbedni pokazivači na funkcije Jer garantuju vrednost deklarisanog tipa. Prevodilac prijavljuje grešku ako pokušate da povežete
More informationUpute za postavljanje Outlook Expressa
Upute za postavljanje Outlook Expressa Prije postavljanja klijenata morate obavezno obaviti prvu prijavu na web mail kako bi aktivirali vaš račun na novom sustavu. Ukoliko niste obavili prvu prijavu, nećete
More informationSberbank Business Online na Mozilla FireFox
Sberbank Business Online na Mozilla FireFox Verzija 1.6 Srpanj 2016. Sberbank d.d. Stranica 1 SADRŽAJ 1 INSTALACIJA... 2 2 POKRETANJE MOZILLE FIREFOX... 3 2.1 IMPORT SECURITY MODULA... 4 2.2 AUTOMATSKI
More informationSvi Java tipovi imaju ekvivalentan tip u jeziku Scala Većina Scala koda se direktno preslikava u odgovarajući Java konstrukt
Funkcionalno programiranje Interoperabilnost jezika Scala i Java Prevođenje u Java bajt kod Svi Java tipovi imaju ekvivalentan tip u jeziku Scala Većina Scala koda se direktno preslikava u odgovarajući
More informationOsnove programskog jezika C# Čas 4. Nasledjivanje 2. deo
Osnove programskog jezika C# Čas 4. Nasledjivanje 2. deo Nasledjivanje klasa Modifikator new class A { public virtual void F() { Console.WriteLine("I am A"); } } class B : A { public override void F()
More informationMicrosoft Hyper-V Server 2016 radionica EDU IT Pro, Zagreb,
Microsoft Hyper-V Server 2016 radionica EDU IT Pro, Zagreb, 13.04.2017. Podešavanje Hyper-V Servera 2016 za RSAT upravljanje Dario Štefek Lokacije za preuzimanje: Microsoft Hyper-V Server 2016 https://www.microsoft.com/en-us/evalcenter/evaluate-hyper-v-server-2016
More informationWindows Server 2012, VDI Licenciranje najprodavanijeg servera, što je novo, VDI licenciranje. Office 2013 / Office 365
Windows 8 Licenciranje, razlike u verzijama Windows Server 2012, VDI Licenciranje najprodavanijeg servera, što je novo, VDI licenciranje Serverski proizvodi Server 2012, System centar 2012, SQL 2012, Sharepoint
More informationUPUTSTVO ZA KORIŠĆENJE NOVOG SPINTER WEBMAIL-a
UPUTSTVO ZA KORIŠĆENJE NOVOG SPINTER WEBMAIL-a Webmail sistem ima podršku za SSL (HTTPS). Korištenjem ovog protokola sva komunikacija između Webmail sistema i vašeg Web čitača je kriptovana. Prilikom pristupa
More informationInformatika Uvod u C#,.NET Framework i Visual Studio... nastavak...
Informatika Uvod u C#,.NET Framework i Visual Studio... nastavak... Prof. dr. sc. Tomislav Pribanić Izv. prof. dr. sc. Vedran Podobnik Doc. dr. sc. Marija Seder Sveučilište u Zagrebu Fakultet elektrotehnike
More informationBinarne hrpe. Strukture podataka i algoritmi VJEŽBE 26. siječnja / 133
Binarne hrpe Potpuno binarno stablo binarno stablo u kojem svaki čvor koji nije list ima točno 2 nasljednika. Binarna hrpa potpuno binarno stablo u kojem svaki čvor koji nije list ima veću ključnu vrijednost
More informationPROGRAMIRANJE. Amir Hajdar
PROGRAMIRANJE Amir Hajdar Teme 2 Klase i objekti u Javi Primjer kroz klasu Krug Atributi i metode Inicijalizacija objekata (konstruktori) Polymorphism Statičke varijable i metode This Klase i objekti u
More informationJezik Baze Podataka SQL. Jennifer Widom
Jezik Baze Podataka SQL SQL o Jezik koji se koristi u radu sa relacionim bazama podataka o Nije programski jezik i manje je kompleksan. o Koristi se isključivo u radu za bazama podataka. o SQL nije case
More informationJavaScript i HTML DOM
4. vježbe iz WEB programiranja četvrtak, 22. ožujka 2012. JavaScript 1. dio JavaScript i Što je DOM? Kako JS koristi DOM? Pristup elementima dokumenta Promjena i učitavanje vrijednosti tagova Primjer 1.
More informationIzrada VI laboratorijske vježbe
Izrada VI laboratorijske vježbe 1. Programirati proceduru koja se aktivira sa Standard palete alatki klikom na button Fajlovi. Prilikom startovanja procedure prikazuje se forma koja sadrži jedan list box
More informationPARALELNO PROGRAMIRANJE
Predavanje 09 Odjel za matematiku 1 PARALELNO PROGRAMIRANJE POSIX threadovi za C++ Predavanje 09 Odjel za matematiku 2 Programske niti (thread) unutar procesa Danas ćemo se upoznati s POSIX thread bibliotekom
More informationUputa za instaliranje programske potpore za operativni sustav WINDOWS
ZABA SignErgy Desktop aplikacija Uputa za instaliranje programske potpore za operativni sustav WINDOWS SADRŽAJ 1. UVOD 3 2. PODRŽANI OPERATIVNI SUSTAVI 3 3. PROGRAMSKI PREDUVJETI ZA INSTALACIJU PROGRAMSKE
More informationVB komande. Programiranje 1
VB komande Programiranje 1 Zadatak 1: Sastaviti program koji se sastoji iz jedne ListBox kontrole, jedne Textbox kontrole i dva komandna dugmeta. Klikom na prvo komandno dugme umeće se u ListBox sadržaj
More informationSveučilište u Zagrebu PMF Matematički odsjek. Mreže računala. Vježbe 08. Zvonimir Bujanović Slaven Kožić Vinko Petričević
Sveučilište u Zagrebu PMF Matematički odsjek Mreže računala Vježbe 08 Zvonimir Bujanović Slaven Kožić Vinko Petričević Uvod: (X)HTML i CSS Na ovim i idućim vježbama naučit ćemo osnove jezika za opisivanje
More informationUputstvo za korišćenje logrotate funkcije
Copyright AMRES Sadržaj Uvod 3 Podešavanja logrotate konfiguracionog fajla 4 Strana 2 od 5 Uvod Ukoliko je aktivirano logovanje za RADIUS proces, može se desiti da posle određenog vremena server bude preopterećen
More informationVDSL modem Zyxel VMG1312-B10A/B30A
VDSL modem Zyxel VMG1312-B10A/B30A Default Login Details LAN IP Address http://192.168.2.1 User Name user Password 1234 Funkcionalnost lampica Power lampica treperi kratko vrijeme nakon uključivanja modema,
More informationPKI Applet Desktop Application Uputa za instalaciju programske potpore
1 SADRŽAJ 1. UVOD 3 2. PODRŽANI OPERATIVNI SUSTAVI 3 3. PROGRAMSKI PREDUVJETI ZA INSTALACIJU PROGRAMSKE POTPORE 3 4. INSTALACIJA PROGRAMSKE POTPORE 3 5. DEINSTALACIJA PROGRAMSKE POTPORE 6 2 1. Uvod PKI
More informationUčitati cio broj n i štampati njegovu recipročnu vrijednost. Ako je učitan broj 0, štampati 1/0.
Kontrolne naredbe Primjeri: Opšti oblik razgranate strukture (if sa ) if (uslov) Naredba 1 ili blok naredbi1 Naredba 2 ili blok naredbi2 Učitati broj x i štampati vrijednost double x, z; Scanner in=new
More informationObjektno orjentirano programiranje. Predavanje 9 Postojani objekti, serijalizacija, marshaling, relacijske baze podataka
Objektno orjentirano programiranje Predavanje 9 Postojani objekti, serijalizacija, marshaling, relacijske baze podataka Postojani objekti - osnove eng. persistent objects Bez obzira na veličinu poslovne
More informationGUI - događaji (Events) i izuzeci. Bojan Tomić
GUI - događaji (Events) i izuzeci Bojan Tomić Događaji GUI reaguje na događaje (events) Događaj je neka akcija koju korisnik programa ili neko drugi izvrši korišćenjem perifernih uređaja (uglavnom miša
More informationSingle Sign-On s Officeom 365 na Kineziološkom fakultetu Sveučilišta u Zagrebu
Single Sign-On s Officeom 365 na Kineziološkom fakultetu Sveučilišta u Zagrebu Stipe Gorenjak, Kineziološki fakultet Sveučilišta u Zagrebu e-mail: stipe.gorenjak@kif.hr Sponzori Ugasite mobitele. Hvala.
More informationProgramiranje Programski jezik C. Sadržaj. Datoteke. prof.dr.sc. Ivo Ipšić 2009/2010
Programiranje Programski jezik C prof.dr.sc. Ivo Ipšić 2009/2010 Sadržaj Ulazno-izlazne funkcije Datoteke Formatirane datoteke Funkcije za rad s datotekama Primjeri Datoteke komunikacija između programa
More informationOUR KNOWLEDGE FOR YOUR SUCCESS. Iskustva u razvoju i implementaciji ADF aplikacije
Iskustva u razvoju i implementaciji ADF aplikacije Sadržaj Opis aplikacije za AZ Mirovinski Fond Internacionalizacija aplikacije Integracija sa Oracle Reports Iskorištenje postojeće PL/SQL logike Kreiranje
More informationOBJEKTNO ORIJENTISANO PROGRAMIRANJE
OBJEKTNO ORIJENTISANO PROGRAMIRANJE PREDAVANJE 12: NASLEĐIVANJE Miloš Kovačević Đorđe Nedeljković 1 /17 OSNOVNI KONCEPTI - Statički i dinamički tipovi podataka - Prepisivanje metoda superklase - Polimorfizam
More informationNaredbe za kontrolu toka
Naredbe za kontrolu toka Naredbe za kontrolu toka Nakon odslušanog bit ćete u stanju: objasniti semantiku naredbi za kontrolu postupaka navesti sintaksu naredbi if, if-else i case u programskom jeziku
More informationRačunarske osnove Interneta (SI3ROI, IR4ROI)
Računarske osnove terneta (SI3ROI, IR4ROI) Vežbe MPLS Predavač: 08.11.2011. Dražen Drašković, drazen.draskovic@etf.rs Autori: Dražen Drašković Naučili ste na predavanjima MPLS (Multi-Protocol Label Switching)
More informationObjektno orjentirano programiranje
Objektno orjentirano programiranje Predavanje 4 Objektno orijentirani koncepti Konstruktori Metoda koja se poziva prilikom stvaranja novog objekta Svojstveni su OO programiranju Imaju isto ime kao i klasa
More informationdr. sc.. Josip Musić Originalne slideove izradio:
Uvod u programiranje Programiranje 1 (450) Poglavlje 1 Uvod u računala, Microsoft.NET i VB.NET (dio 2 od 2): Pregled.NET platforme dr. sc.. Josip Musić jmusic@fesb.hr 1 Originalne slideove izradio: Teo
More informationOSVRT NA NOSQL BAZE PODATAKA ČETIRI OSNOVNE TEHNOLOGIJE REVIEW OF NOSQL DATABASES FOUR BASIC TECHNOLOGIES
POLYTECHNIC & DESIGN OSVRT NA NOSQL BAZE PODATAKA ČETIRI OSNOVNE TEHNOLOGIJE REVIEW OF NOSQL DATABASES FOUR BASIC TECHNOLOGIES Aleksandar Stojanović Tehničko veleučilište u Zagrebu Vol. 4, No. 1, 2016.
More informationSVEUČILIŠTE U MOSTARU FAKULTET PRIRODOSLOVNO-MATEMATIČKIH I ODGOJNIH ZNANOSTI BAZE PODATAKA 2. Doc.dr.sc. GORAN KRALJEVIĆ BAZE PODATAKA 2 1
SVEUČILIŠTE U MOSTARU FAKULTET PRIRODOSLOVNO-MATEMATIČKIH I ODGOJNIH ZNANOSTI BAZE PODATAKA 2 Doc.dr.sc. GORAN KRALJEVIĆ BAZE PODATAKA 2 1 Baze podataka 2 Web: http://www.fpmoz.ba/gkraljevic Pitanja, primjedbe,
More informationString. String. Kreiranje string objekta pomoću string literala (konstanti) Kreiranje string objekta
String string ili znakovni niz (string) nije niz znakova u Javi su stringovi klase String paketa java.lang!!! Usporedba: char gf = G ; Niz znakova String char [] gf = { G, e, o, d, e, t, s, k, i ; String
More informationPrva recenica. Druga recenica.
Algoritmi i programiranje Predavanje 4 METODE LOKALNE, GLOBALNE VARIJABLE I KONSTANTE METODA je imenovani izdvojeni slijed naredbi koji rješava određeni zadatak i po potrebi se poziva jednom ili više puta
More informationCase Study Hrvatska pošta: Korisničko iskustvo iz snova. Tomislav Turk Samostalni sistem inženjer, Combis d.o.o. Zagreb,
Case Study Hrvatska pošta: Korisničko iskustvo iz snova Tomislav Turk Samostalni sistem inženjer, Combis d.o.o. Zagreb, 27.12.2018. Sadržaj Hrvatska pošta prije projekta Izazovi projekta Tehnologije korištene
More informationInformacioni sistemi i baze podataka
Fakultet tehničkih nauka, Novi Sad Predmet: Informacioni sistemi i baze podataka Dr Slavica Kordić Milanka Bjelica Vojislav Đukić Rad u učionici (1/2) Baze podataka (db2015): Studentska korisnička šema
More informationvježbe. Slobodan Jelić
Web programiranje i primjene My SQL Rad s MySQL ovom bazom podataka 9. vježbe Slobodan Jelić 1. Unošenje podataka u bazu 2. Učitavanje podataka iz baze 3. Ažuriranje zapisa u bazi podataka 4. Naknadne
More informationUputa: Zabranjeno je koristiti bilo kakva pomagala. Rje²enja pi²ete desno od zadatka. Predajete samo ovaj list.
Ime i prezime: Asistent: Predava : Programiranje (C) 1. kolokvij 14. 4. 2003. 1. 2. 3. 4. 5. 6. 7. Uputa: Zabranjeno je koristiti bilo kakva pomagala. Rje²enja pi²ete desno od zadatka. Predajete samo ovaj
More informationVežbe - XII nedelja PHP Doc
Vežbe - XII nedelja PHP Doc Dražen Drašković, asistent Elektrotehnički fakultet Univerziteta u Beogradu Verzija alata JavaDoc za programski jezik PHP Standard za komentarisanje PHP koda Omogućava generisanje
More informationProgramiranje III razred
Tehnička škola 9. maj Bačka Palanka Programiranje III razred Naredbe ciklusa for petlja Naredbe ciklusa Veoma često se ukazuje potreba za ponavljanjem nekih naredbi više puta tj. za ponavljanjem nekog
More informationPametna komunikacija na Internetu preko REST protokola
Pametna komunikacija na Internetu preko REST protokola Davor Lozić, dr. sc. Alen Šimec Tehničko veleučilište u Zagrebu, Vrbik 8, 10000 Zagreb, Hrvatska, dlozic@tvz.hr, alen@tvz.hr Abstract - REST protokol
More informationHybrid Cloud najbolje od oba svijeta
Partneri: Hybrid Cloud najbolje od oba svijeta Drazen.Bzik@COMBIS.HR Cloud okolina Hybrid infrastruktura Gartner & Hyperconverged Infrastruktura Source: Gartner, Magic Quadrant for Hyperconverged Infrastructure,
More informationGeant2 - JRA1. Upravljanje mjerenjem i performansama mreža (perfsonar, baza multi-domain nadzorne usluge) Danijel Matek (Srce)
Geant2 - JRA1 Upravljanje mjerenjem i performansama mreža (perfsonar, baza multi-domain nadzorne usluge) Danijel Matek (Srce) 21.11.2007, CUC2007, Rijeka Što je to JRA1? Glavni zadatak JRA1 (Performance
More informationUputstvo za podešavanje mail klijenta
Uputstvo za podešavanje mail klijenta 1. Podešavanje Thunderbird mail klijenta 1.1 Dodavanje mail naloga Da biste podesili Vaš mail klijent (u ovom slučaju Thunderbird) da prima i šalje mail-ove potrebno
More informationpojedinačnom elementu niza se pristupa imeniza[indeks] indeks od 0 do n-1
NIZOVI Niz deklarišemo navođenjemtipa elemenata za kojim sledi par srednjih zagrada[] i naziv niza. Ako je niz višedimenzionalni između zagrada[] se navode zarezi, čiji je broj za jedan manji od dimenzija
More informationRad sa MySQL bazom podataka
13. PHP 4.dio Rad sa MySQL bazom podataka M. Zekić-Sušac 1 Što je MySQL? MySQL je relacijska baza podataka. Relacijski model podrazumijeva određenu strukturu podataka, pohranjenu u tablice. Jedna baza
More informationProgramske paradigme Funkcionalna paradigma
Programske paradigme Funkcionalna paradigma 1. čas: Uvod u funkcionalno programiranje. Programski jezik Haskel. Upoznavanje sa razvojnim okruženjem. Tipovi podataka. Funkcionalno programiranje Stil u programiranju
More informationUvod u relacione baze podataka
Uvod u relacione baze podataka Ana Spasić 5. čas 1 Podupiti, operatori exists i in 1. Izdvojiti imena i prezimena studenata koji su položili predmet čiji je identifikator 2001. Rešenje korišćenjem spajanja
More informationVHDLPrimeri Poglavlje5.doc
5. VHDL opis kola koja obavljaju osnovne aritmetičke funkcije Sabirači Jednobitni potpuni sabirač definisan je tablicom istinitosti iz Tabele 5.1. Tabela 5.1. cin a b sum cout 0 0 0 0 0 0 0 1 1 0 0 1 0
More informationvar Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin ListBox1.Items.LoadFromFile('d:\brojevi.
1 PANEL komponenta kontejnerska, slična GropBox. Roditeljska komponenta za komp. postavljene na nju. Zajedno se pomeraju. Caption svojstvo za naziv; Alighment pomera svojstvo Caption levo i desno; Align
More informationDogađaj koji se javlja u toku izvršenja programa i kvari normalno izvršenje. Kada se desi izuzetak, sistem pokušava da pronađe način da ga obradi.
Obrada izuzetaka Šta je izuzetak? Događaj koji se javlja u toku izvršenja programa i kvari normalno izvršenje. Kada se desi izuzetak, sistem pokušava da pronađe način da ga obradi. Prosleđuje izuzetak,
More informationRAČUNARSKI PRAKTIKUM II
Prirodoslovno-matematički fakultet Matematički odsjek Sveučilište u Zagrebu RAČUNARSKI PRAKTIKUM II Predavanje 07 - Uvod u PHP 4. svibnja 2015. Sastavio: Zvonimir Bujanović PHP PHP Interpretirani skriptni
More informationOPTIMIZACIJA SQL UPITA BEZ IZMJENE PROGRAMSKOG KODA
OPTIMIZACIJA SQL UPITA BEZ IZMJENE PROGRAMSKOG KODA Josip Pojatina (Agrokor ICT) josip.pojatina@agrokor.hr Sadržaj Ø O tvrtki mstart Ø Uvod Ø Odnos krajnjeg korisnika i kupljenog SW-a Ø Tipovi procesa
More informationRazvoj hibridnih mobilnih aplikacija pomoću PhoneGap platforme
INFOTEH-JAHORINA Vol. 12, March 2013. Razvoj hibridnih mobilnih aplikacija pomoću PhoneGap platforme Igor Dujlović Elektrotehnički fakultet Banja Luka Banja Luka, BiH dujlovic@gmail.com Zoran Đurić Elektrotehnički
More informationNOSQL BAZA PODATAKA RAČUNALNIH KOMPONENTI
SVEUČILIŠTE JOSIPA JURJA STROSSMAYERA U OSIJEKU ELEKTROTEHNIČKI FAKULTET Sveučilišni studij NOSQL BAZA PODATAKA RAČUNALNIH KOMPONENTI Završni rad Vladimir Anić Osijek, 2016 Obrazac Z1P - Obrazac za ocjenu
More informationPRINCIPI SOFTVERSKOG INŽENJERSTVA TIM NAZIV_TIMA
PRINCIPI SOFTVERSKOG INŽENJERSTVA TIM NAZIV_TIMA SPECIFIKACIJA BAZE PODATAKA ZA PROJEKAT NAZIV_PROJEKTA Veb knjižara - Specifikacija baze podataka 1 10.04.2017. Verzija V 1.0 Datum: 20. mart 2017. Istorija
More information9. RAD S DATOTEKAMA PODATAKA
Rad s datotekama 7-1 9. RAD S DATOTEKAMA PODATAKA U programiranju se često radi sa skupovima podataka koji se čuvaju na jedinicama perfernih memorija, a koji se organizuju u posebne cjeline koje nazivamo
More informationMEHANIZMI AGREGACIJE U OBJEKTNO- ORIJENTIRANIM PROGRAMSKIM JEZICIMA
SVEUČILIŠTE U ZAGREBU FAKULTET ORGANIZACIJE I INFORMATIKE V A R A Ž D I N Davor Vučina MEHANIZMI AGREGACIJE U OBJEKTNO- ORIJENTIRANIM PROGRAMSKIM JEZICIMA ZAVRŠNI RAD Varaždin, 2014. SVEUČILIŠTE U ZAGREBU
More informationUvod u programiranje - vežbe. Kontrola toka izvršavanja programa
Uvod u programiranje - vežbe Kontrola toka izvršavanja programa Naredbe za kontrolu toka if, if-else, switch uslovni operator (?:) for, while, do-while break, continue, return if if (uslov) naredba; if
More informationSveučililište J.J. Strossmayera u Osijeku Odjel za matematiku. Davor Kolarević JavaScript na poslužiteljskoj strani. Diplomski rad
Sveučililište J.J. Strossmayera u Osijeku Odjel za matematiku Davor Kolarević JavaScript na poslužiteljskoj strani Diplomski rad Osijek, 2018. Sveučililište J.J. Strossmayera u Osijeku Odjel za matematiku
More informationDA LI POSTOJI SAMO JEDNA "ISPRAVNA" ARHITEKTURA WEB POSLOVNIH APLIKACIJA
DA LI POSTOJI SAMO JEDNA "ISPRAVNA" ARHITEKTURA WEB POSLOVNIH APLIKACIJA Zlatko Sirotić, univ.spec.inf. Istra informatički inženjering d.o.o. Pula Stranica 1 Malo marketinga Stranica 2 Autor je (bar neko
More informationUNIVERZITET U BEOGRADU ELEKTROTEHNIČKI FAKULTET
UNIVERZITET U BEOGRADU ELEKTROTEHNIČKI FAKULTET Katedra za elektroniku Računarska elektronika Grupa br. 11 Projekat br. 8 Studenti: Stefan Vukašinović 466/2013 Jelena Urošević 99/2013 Tekst projekta :
More informationVjež ba 3-3: Ražvoj ASP.NET MVC 4 Pogleda s Ražor sintaksom
Vjež ba 3-3: Ražvoj ASP.NET MVC 4 Pogleda s Ražor sintaksom U ovoj vježbi trebate dodati sljedeće view-ove u OnlineVrijednosnice aplikaciju: Details view za Graf model objekte ovaj view će prikazivati
More informationBackup i Restore C particije ili Windowsa sa NORTON-om
BRZO KOPIRANJE I RESTAURIRANJE DISKOVA (programski paket Norton SystemWorks) OBJAŠNJENJE Backup i Restore C particije ili Windowsa sa NORTON-om Je li vam se nekada srušio operativni sustav ili pokvario
More informationMoja naslovnica / Sveučilište u Zagrebu / Fakultet prometnih znanosti / Baze podataka / Opći dio / Izvanredni studenti - test za potpis
Moja naslovnica / Sveučilište u Zagrebu / Fakultet prometnih znanosti / Baze podataka / Opći dio / Izvanredni studenti - test za potpis Započeto Četvrtak, 27 Listopad 2016, 22:34 Stanje završen Završeno
More informationPROGRAMIRANJE. Teme. Packages Reference objekata Inheritance nasljeđivanje Exceptions. Amir Hajdar
PROGRAMIRANJE Amir Hajdar Teme 2 Packages Reference objekata Inheritance nasljeđivanje Exceptions Packages API Application Programmer Interface Sve klase ponuđene u sklopu Java jezika, uključujući i kompajler
More informationILM implementacija DWH baza u T-mobile
ILM implementacija DWH baza u T-mobile Bojan Šumljak, PS Consultant Hrvoje Dubravica, PS Head Consultant www.snt-world.com 1 Što je ILM? - information Lifecycle Management praksa primjenjivanja pravila
More informationSveučilište u Zagrebu Fakultet strojarstva i brodogradnje. WEB programiranje HTML & CSS
Sveučilište u Zagrebu Fakultet strojarstva i brodogradnje WEB programiranje HTML & CSS Autor/i: Juraj Benić 2018 1. Zadatak Kreirati stranicu kojoj će naslov biti Zadatak 1. i veličina teksta 20px te staviti
More informationLab. vježba PROGRAMIRANJE ZA INTERNET. Upute za laboratorijske vježbe. (izradio: Marin Bugarić) CSS3
Lab. vježba 6 PROGRAMIRANJE ZA INTERNET Upute za laboratorijske vježbe (izradio: Marin Bugarić) CSS3 P R O G R A M I R A N J E Z A I N T E R N E T Općenito Posljednja verzija Cascading Style Sheetsa, verzija
More informationMašinska vizija. Dr Nenad Jovičić tnt.etf.rs/~mv
Mašinska vizija Dr Nenad Jovičić 2017. tnt.etf.rs/~mv Linearne 2D geometrijske transformacije 2D geometrijske transformacije Pretpostavka: Objekti u 2D prostoru se sastoje iz tačaka i linija. Svaka tačka
More informationMICROSOFT LINQ. INFOTEH-JAHORINA Vol. 9, Ref. F-9, p , March Ognjen Borovina, Elektrotehnički fakultet, Istočno Sarajevo
INFOTEH-JAHORINA Vol. 9, Ref. F-9, p. 1032-1036, March 2010. MICROSOFT LINQ Ognjen Borovina, Elektrotehnički fakultet, Istočno Sarajevo Sadržaj: U ovom radu uveli smo LINQ i pokazali osnove njegovog rada.
More informationDBMS, modeli podataka, tipovi DBMS-ova
DBMS, modeli podataka, tipovi DBMS-ova 2. tjedan T. Carić, T. Erdelić Zavod za inteligentne transportne sustave Fakultet prometnih znanosti Sveučilište u Zagrebu Baze podataka T. Carić, T. Erdelić ITS::Baze
More informationKURSORI BAZE PODATAKA U ORACLE 11g
KURSORI BAZE PODATAKA U ORACLE 11g SAŽETAK Kursor baze podataka je privatno SQL područje u kojem se čuvaju informacije za procesiranje određene SQL naredbe. Oracle PLSQL jezik koristi implicitne i eksplicitne
More informationNumeričke metode i praktikum
Numeričke metode i praktikum Aleksandar Maksimović IRB / 23/03/2006 / Str. 1 vektori Vektor u 3D prostoru. C: int v1[3]; v1[0]=a;v1[1]=b;v1[2]=c; Fortran: INTEGER V1(3) V1(1)=a V1(2)=b V1(3)=c Skalarni
More informationIZRADA INTERAKTIVNOG TESTA U ANGULAR OKRUŽENJU
SVEUČILIŠTE U SPLITU PRIRODOSLOVNO-MATEMATIČKI FAKULTET ZAVRŠNI RAD IZRADA INTERAKTIVNOG TESTA U ANGULAR OKRUŽENJU Student: Krešimir Sudar Mentor: doc.dr.sc. Ani Grubišić Split, rujan 2016. Sadržaj 1.
More informationKINEMATIČKA ANALIZA MEHANIZAMA INDUSTRIJSKIH ROBOTA KORIŠTENJEM PROGRAMSKOG JEZIKA MATLAB
10 th International Scientific Conference on Production Engineering DEVELOPMENT AND MODERNIZATION OF PRODUCTION KINEMATIČKA ANALIZA MEHANIZAMA INDUSTRIJSKIH ROBOTA KORIŠTENJEM PROGRAMSKOG JEZIKA MATLAB
More informationBLAZE MODUL. Seminar iz kolegija Uporaba računala u nastavi. Ana Ledić U Zagrebu, 22. Svibnja 2014.
BLAZE MODUL Seminar iz kolegija Uporaba računala u nastavi U Zagrebu, 22. Svibnja 2014. Ana Ledić ana.ledic@studentpartner.com Sadržaj Čemu služi Blaze?... 2 Što je Blaze?... 3 Grafovi... 4 Datashapes...
More informationTP-LINK TL-WPA4220 strujni prijenosnik Internet ili IPTV signala s bežičnim modulom. Priručnik za korištenje i brzu instalaciju
TP-LINK TL-WPA4220 strujni prijenosnik Internet ili IPTV signala s bežičnim modulom Priručnik za korištenje i brzu instalaciju Sadržaj ŠTO JE TP-LINK TL-WPA4220... 3 KAKO KORISITI TP-LINK TL-WPA4220...
More informationSigurnost Java aplikacija CCERT-PUBDOC
Sigurnost Java aplikacija CCERT-PUBDOC-2006-07-163 Sigurnosni problemi u računalnim programima i operativnim sustavima područje je na kojem CARNet CERT kontinuirano radi. Rezultat toga rada ovaj je dokument,
More informationb) program deljiv3; uses wincrt; var i:integer; begin i:=3; while i<100 do begin write(i:5); i:=i+3; end; end.
NAREDBA CIKLUSA SA PREDUSLOVOM WHILE 1.Odrediti vrednosti s i p nakon izvrsenja sledecih naredbi za dato a=43, a=34, a=105 program p1; var a,s,p:integer; write('unesite a:');readln(a); p:=a; s:=0; while
More informationOUR KNOWLEDGE FOR YOUR SUCCESS. Optimizacija Oracle baze podataka u kontekstu data warehouse sustava
Optimizacija Oracle baze podataka u kontekstu data warehouse sustava Sadržaj 1. Uvod 2. Postavke parametara kod instalacije baze podataka 3. Optimizacija I/O operacija 4. Utjecaj na cost-based optimizer
More informationJAVA DESKTOP APLIKACIJA ZA PREGLED I VOĐENJE FINANCIJA
SVEUČILIŠTE JOSIPA JURJA STROSSMAYERA U OSIJEKU FAKULTET ELEKTROTEHNIKE, RAČUNARSTVA I INFORMACIJSKIH TEHNOLOGIJA OSIJEK Sveučilišni studij računarstva JAVA DESKTOP APLIKACIJA ZA PREGLED I VOĐENJE FINANCIJA
More informationOptimiziranje MySQL baze i Laravela za rad s vrlo velikim bazama podataka. Nenad Crnko Sveučilišni računski centar
Optimiziranje MySQL baze i Laravela za rad s vrlo velikim bazama podataka Nenad Crnko Sveučilišni računski centar Sadržaj Uvod Optimizacija sustava za upravljanje bazom podataka (MySQL) Optimizacija logičkog
More informationUvod, varijable, naredbe, petlje
8. JavaScript Uvod, varijable, naredbe, petlje M. Zekić-Sušac 1 Što je JavaScript? JavaScript je najpopularniji skriptni jezik na Internetu kojeg podržavaju svi poznatiji preglednici (Internet Explorer,
More informationType 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R.
R version 2.13.1 (2011-07-08) Copyright (C) 2011 The R Foundation for Statistical Computing ISBN 3-900051-07-0 Platform: x86_64-pc-mingw32/x64 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY.
More informationOracle 10gR2 Backup & Recovery
Oracle 10gR2 Backup & Recovery Dubravko Jurina, inf. djurina@infosistem.hr UVOD Raspoloživost baze podataka najvažnija nija je karakteristika modernog poslovanja! 1 Vrste problema i Oracle rješenja enja
More informationLab. vježba PROGRAMIRANJE ZA INTERNET. Upute za laboratorijske vježbe. (izradio: Marin Bugarić) HTML5
Lab. vježba 5 PROGRAMIRANJE ZA INTERNET Upute za laboratorijske vježbe (izradio: Marin Bugarić) HTML5 P R O G R A M I R A N J E Z A I N T E R N E T Općenito HTML5 je posljednja verzija HyperText Markup
More informationMicrosoftova productivity vizija
Office 365 Microsoftova productivity vizija Hybrid On Premises Online Isto iskustvo na raznim uređajima Lokalno ili cloud Messaging Voice & Video Content Management Enterprise Social Reporting & Analytics
More informationWEB APLIKACIJA ZA REZERVACIJU PACIJENATA
SVEUČILIŠTE JOSIPA JURJA STROSSMAYERA U OSIJEKU FAKULTET ELEKTROTEHNIKE, RAČUNARSTVA I INFORMACIJSKIH TEHNOLOGIJA Sveučilišni studij računarstva WEB APLIKACIJA ZA REZERVACIJU PACIJENATA Diplomski rad Dino
More informationPRETRAŽIVANJE PODATAKA U OBJEKTNIM WEB APLIKACIJAMA
Sveučilište Josipa Jurja Strossmayera u Osijeku Ekonomski fakultet u Osijeku Diplomski studij Poslovna informatika Amanda Draganjac PRETRAŽIVANJE PODATAKA U OBJEKTNIM WEB APLIKACIJAMA Diplomski rad Osijek,
More informationNumerical Computation
GNU Octave Numerical Computation vrlo često u tehnici retko stvarni problemi imaju closed-form solution čak i kad imaju, pitanje upotrebljivosti mnogo detalja numerički pristup u početku tretirano kao
More informationSadržaj. Verzija 03/2017 Primjenjuje se od 20. novembra godine
Sadržaj 1 Web hosting 3 2 Registracija domena 3 3 Internet marketing 3 4 E mail paketi 4 5 Virtuoz 4 6 Internet Security servis 5 7 Kolokacija servera 6 8 Cloud usluge 6 9 Aktivni servisi koji nijesu u
More informationKLASIFIKACIJA JELENA JOVANOVIĆ. Web:
KLASIFIKACIJA JELENA JOVANOVIĆ Email: jeljov@gmail.com Web: http://jelenajovanovic.net PREGLED PREDAVANJA Šta je klasifikacija? Binarna i više-klasna klasifikacija Algoritmi klasifikacije Mere uspešnosti
More informationDATOTEČNI SUSTAVI HFS+
SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA DATOTEČNI SUSTAVI HFS+ Računalna forenzika Zagreb, Siječanj 2017 Sadržaj 1. UVOD... 1 2. Metapodatci... 2 3. Datotečni sustavi MFS i HFS... 3
More informationPush(3,&S) 3 1 S Uvijek trebamo paziti da ne zovemo Pop nad praznim stogom.
tog (tack) tog je posebna vrsta liste: od svih operacija dozvoljeno je ubacivanje, brisanje i gledanje sadržaja elementa samo na jednom kraju liste koji zovemo vrh stoga. tog zovemo i lifo last in first
More information