otvoreno računarstvo · priprema za vježbu o naučiti programski jezik java :) o riješiti...

27
Otvoreno računarstvo o 4. laboratorijska vježba o Java Igor Čavrak

Upload: others

Post on 05-Feb-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvoo 4. laboratorijska vježba

o Java

Igor Čavrak

Page 2: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java2

Priprema za vježbuo Naučiti programski jezik Java :)o Riješiti laboratorijsku vježbu

Page 3: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java3

Zadatak

1. Stvoriti ulaznu tekstualnu datoteku2. Oblikovati i implementirati razrede za opis podataka domene

problema3. Oblikovati i implementirati razrede za stvaranje podatkovne

strukture iz TXT i zapis podatkovne strukture u XML4. Glavni program

txt aplikacija xml

Page 4: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java4

Cilj vježbeo Upoznavanje s osnovama jezika i platforme Javao Izrada jednostavne Java aplikacijeo Objektno-usmjereno oblikovanjeo Rad s kolekcijama objekata u jeziku Javao Stvaranje/pohrana podatkovne strukture iz/u različite formate

zapisao (implementirana funkcionalnost bit će korištena u vježbi sa

servletima)

Page 5: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java5

Radna okolina

o Preporučamo Eclipse

o Može i command line okolina, pažnja u postavljanju path i classpath varijabli okoline!

Page 6: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java6

Odakle učiti Javu, što se mora znati?o Java tutorial:

o http://docs.oracle.com/javase/tutorial/

o Preporučene cjeline:o Trails Covering the Basics

o Getting startedo Learning the Java languageo Essential classes (Exceptions, Basic I/O, The platform

environment -> Path and Classpath)o Ako vas baš zanima:

o Ostala poglavlja iz Essential classeso Collectionso Deployment -> Packaging Programs in JAR files

Page 7: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java7

Ali tko će to sve proučiti ...o i još napraviti vježbu ?!?!?!?!?

o paaa, Vi ;)

o Uz tekst zadatka dan kostur rješenja za pokaznu inačicu – popis studentskih kartica

o Svi bitni elementi rješenja primjenjeni u rješenju pokazne inačice

Page 8: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java8

Popis pametnih karticao Svaka kartica ima pridružene podatke:

o Id karticeo JMBAGo Ime korisnikao Prezime korisnikao Konfiguracija karticeo Serija karticao Vrijeme valjanostio Popis usluga na kartici:

o Šifra uslugeo Ime uslugeo Verzija (Java!) appletao Šifra vlasnika usluge

Page 9: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java9

Zapis podataka u txt datoteci

0095457354009452376 | 0050578887 | Matilda | Skoko | SXAA | 1 | 110930 | 1,korisnik,01,0000 ; 2,e-indeks,01,0000 ; 3,menza,01,0001 |

| - delimiter polja prve razine ; - delimiter elemenata liste , - delimiter polja elementa liste

Potrebno parsirati redak po redak datoteke: - ako redak započinje s # - preskočiti ga - ako je redak prazan, ignorirati ga - inače razdvojiti elemente retka, stvoriti objekte

Page 10: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java10

Model domene problemao Razred 1: Lista pametnih kartica

o Sadrži sve pametne karticeo Razred 2: pametna kartica

o Sadrži podatke o kartici, listu uslugao Razred 3: usluga

o Sadrži podatke o pojedinoj usluzi

o Paket u kojem se razredi modela nalaze: model (model.CardList, model.Card, model.Service)

+ a d d ( )+ r e m o v e ( )+ c a r d s ( )

- c a r d s

C a r d L i s t

+ g e t S e r v i c e I D ( )+ s e t S e r v i c e I D ( )+ g e t N a m e ( )+ s e t N a m e ( )+ g e t V e r s i o n ( )+ s e t V e r s i o n ( )+ g e t O w n e r ( )+ s e t O w n e r ( )

- I D- n a m e- v e r s i o n- o w n e r

S e r v i c e

+ g e t I D ( )+ s e t I D ( )+ g e t J M B A G ( )+ s e t J M B A G ( )+ g e t F i r s t N a m e ( )+ g e t L a s t N a m e ( )+ s e t C o n f i g u r a t i o n ( )+ g e t C o n f i g u r a t i o n ( )+ g e t S e r i e s ( )+ s e t S e r i e s ( )+ g e t V a l i d T o ( )+ s e t V a l i d T o ( )+ s e r v i c e s ( )+ a d d S e r v i c e ( )+ r e m o v e S e r v i c e ( )

- i d- j m b a g- f i r s t N a m e- l a s t N a m e- c o n f i g u r a t i o n- s e r i e s- v a l i d T o- s e r v i c e s

C a r d

p r i p a d a p r u ž ap r i p a d a s a d r ž i

Page 11: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java11

Stvaranje modela, pohrana modelao Znanje o zapisu objekta modela (pro et contra):

o Unutar objekta modelao Unutar vanjskog objekta

o Paralelna hijerarhija razredao Ista imena razreda, paket model.factoryo Svaki razred zna kako restaurirati i pohraniti objekt

modela u neki od formata zapisao Statičke metode:

o fromText()o toXML()

Page 12: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java12

Izlazni XML<cardList> <card cardID="8745884582322454342"> <JMBAG>0036435543</JMBAG>s <firstName>Vlatko</firstName> <lastName>Pokos</lastName> <conf>SXAA</conf> <series>1</series> <validTo>110930</validTo> <services> <service id="1" version="1"> <name>korisnik</name> <owner>0</owner> </service> <service id="2" version="1"> <name>e-indeks</name> <owner>0</owner> </service> <service id="3" version="1"> <name>menza</name> <owner>1</owner> </service> </services> </card>...

Page 13: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java13

Parsiranje txt datoteke

o java.util.StringTokenizerStringTokenizer st = new StringTokenizer(input, "|");...kartica.setJmbag(st.nextToken().trim());...

//usluge ...st = new StringTokenizer(input, ";");

while(st.hasMoreElements() == true) {

String usluga = (String) st.nextElement(); model.Service usl = model.factory.Service.fromText(usluga); if(usl != null) kartica.addService(usl);}

Delegacija parsiranja podelementa

Page 14: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java14

Glavni program//stvaranje podatkovne strukture čitanjem tekstualne datotekemodel.CardList cardList = null;try {

cardList = model.factory.CardList.fromText(reader);} catch(Exception e) {

//serijalizacija podatkovne strukture u datotekutry {

model.factory.CardList.toXML(cardList, writer);} catch(IOException e) {

Page 15: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java15

Tokovi podataka (paket java.io.*)o Tokovi bajtova (8-bitni - byte streams)

o podržani preko razreda i podrazreda java.io.InputStream i java.io.OutputStream

o Tokovi znakova (16 bitni character streams)o implementirani su kroz razrede i podrazrede

java.io.Reader i java.io.Writer o apstraktni razredi najviše razine vezani uz tokove

znakova (character-stream based classes)o Primjer prefiksa:

o za čitanje znakova iz datoteke - java.io.FileReadero za čitanje bajtova (binarni podatci - slike, zvukovi)

koristimo java.io.FileInputStream

Page 16: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java16

Tokovi podatakao Bolje je koristiti Reader i Writer

(character streams):o skup znakova Unicode (16 bita) kodirani po normi UTF-

8 (ne uvijek - serijalizacija objekata koristi nestandardni UTF-8)

o internacionalnije - ne ovise o specifičnom kodiranjuo zbog tehnike “buffering” efikasnije od “byte streams”.

o nego InputStream i OutputStream (byte streams):o skup znakova ograničenih na ISO-Latin-1 (8 bita)

Page 17: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java17

Tokovi podataka - PrimjerPostupci (metode) za čitanje/pisanje su: o int read(), int read(char cbuf[]), int read(char cbuf[], int offset, int length)o int write(int c), int write(char cbuf[]), int write(char cbuf[], int offset, int length)

//ispis sadržaja datoteke(naredba cat ili type) po uzoru na C

import java.io.*;public class Cat{ public static void main(String args[])throws Exception{ FileReader ulaz = new FileReader(args[0]); PrintWriter izlaz = new PrintWriter(System.out,true); char c[] = new char[4096]; int broj = 0; while ((broj = ulaz.read(c)) != -1) izlaz.write(c, 0, broj); ulaz.close(); izlaz.close(); }}

Page 18: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java18

Znakovni tokovio osnovni razredi:

o Readero Writer

Writer

Page 19: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java19

Podatkovni tokovio osnovne razredi:

o InputStreamo OutputStream

Page 20: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java20

Osnovne metodeo I znakovni i podatkovni tokovi definiraju slične

metode:int read()int read(char cbuf[])int read(char cbuf[], int offset, int length)

int read()int read(byte cbuf[])int read(byte cbuf[], int offset, int length)

java.io.Reader

java.io.InputStream

int write(int c)int write(byte cbuf[])int write(byte cbuf[], int offset, int length)

java.io.OutputStream

int write(int c)int write(char cbuf[])int write(char cbuf[], int offset, int length)

java.io.Writer

Page 21: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java21

Ulančavanje tokova podatakao Čitanje podataka pomoću razreda Reader -možemo

učitavati:o znak po znako N znakova odjednom

o Što ako želimo učitavati redak po redak?o učitavati znak po znak, provjerati oznaku kraja retka?o učitati N znakova pa tražiti oznake kraja retka?

o NE!, postoje razredi koje to mogu bolje

Page 22: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java22

Ulančavanje tokova podatakao Tokovi podataka mogu se ulančavati

o npr. razred BufferedReader može čitati podatke od InputStreamReader-a:

BufferedReader breader = null;breader = new BufferedReader(new FileReader(f));

/Primjer/Likovi/Citac.java

String redak=breader.readLine();

o čitanje jednog retka:

o osim dodatnih metoda, postiže se i ubrzanje radao i drugi tokovi se mogu ulančavati

Page 23: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java23

Rad s datotekamao Razred java.util.File predstavlja IME datoteke ili

kazala uključujući put (puni ili relativni)o Datoteka ili kazalo ne moraju postojatio Ima metode koje omogućuju:

o provjere:o da li datoteka/kazalo postojio da li je moguće čitanje ili pisanje

o stvaranje datotekao brisanje datoteka i kazalao dohvaćanje sadržaja kazalao stvaranje kazalao promjenu imenao etc ... /Primjeri/TurnAround.java

Page 24: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java24

Imena datoteka na različitim OS-imao Interni zapis imena datoteke ili kazala neovisan je o

operacijskom sustavuo Prilikom pretvorbe tog apstraktnog zapisa imena u

niz znakova (String), koriste se osobine platforme na kojoj se izvodi aplikacija System.getProperty())o Linux koristi '/' za razdvajanje kazalao Windowsi koriste '\'

o Polje java.io.File.pathSeparator

/Primjeri/PrintThySelf.java

Page 25: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java25

Otvaranje i zatvaranjeo svi tokovi se automatski otvaraju pri stvaranju, a

zatvaraju:o eksplicitnim pozivom close() ili o implicitno kad više nisu potrebni (garbage collector)

Page 26: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java26

Standardni tokovi podatakao u C-u: stdin, stdout, stderro u Javi:public final class System {

//... //standardni ulaz public final static InputStream in=...; //standardni izlaz public final static PrintStream out=...; //standardni izlaz za greske, ispisuje //na konzolu (kao i out) public final static PrintStream err=...; //...}

System.out.println("123")

java.lang.System

Stvara ih virtualni

stroj

Page 27: Otvoreno računarstvo · Priprema za vježbu o Naučiti programski jezik Java :) o Riješiti laboratorijsku vježbu. 3 Otvoreno računarstvo - Java Zadatak 1.Stvoriti ulaznu tekstualnu

Otvoreno računarstvo - Java

Pitanja?