Upload
others
View
7
Download
0
Embed Size (px)
Citation preview
Otvoreno računarstvoo 4. laboratorijska vježba
o Java
Igor Čavrak
Otvoreno računarstvo - Java2
Priprema za vježbuo Naučiti programski jezik Java :)o Riješiti laboratorijsku vježbu
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
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)
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!
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
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
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
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
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
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()
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>...
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
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) {
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
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)
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(); }}
Otvoreno računarstvo - Java18
Znakovni tokovio osnovni razredi:
o Readero Writer
Writer
Otvoreno računarstvo - Java19
Podatkovni tokovio osnovne razredi:
o InputStreamo OutputStream
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
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
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
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
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
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)
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
Otvoreno računarstvo - Java
Pitanja?