130 likes | 283 Views
Forts. fra Vprg 3. Sortering og søking i Java-API-et Tabeller og Arraylister Comaparable Comparator equals(). LC191D Videregående programmering Semesterplan: http://aitel.hist.no/fag/vprg/index_LC191D.php Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring
E N D
Forts. fra Vprg 3 Sortering og søking i Java-API-et Tabeller og Arraylister Comaparable Comparator equals() LC191D Videregående programmering Semesterplan: http://aitel.hist.no/fag/vprg/index_LC191D.php Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring Else Lervik, januar 2012
Å bruke Java API-et til å sortere tabeller/ArrayLister der elementene er (referanser til) objekter • De ferdige metodene må kunne sammenligne de elementene som skal sorteres (søkes i) • Intet problem hvis primitive datatyper • Hva hvis objekter? • A. Sorterer etter objektenes naturlige orden • Sorteringsmetoden må bruke en metode for å sammenligne objektene, og den må vite navnet på denne metoden og hvordan den fungerer • Metoden skal hete compareTo() og metodehodet fins i interfacet Comparable • En klasse implementerer et interface hvis vi skriver • implements <interfacenavn> etter klassenavnet og • programmerer alle metodene i interfacet • Kjenner java.io.Serializable fra før • B. Sorterer etter noe annet enn «objektenes naturlige orden» • Da legger vi sammenligningen i en egen klasse som implementerer interfacet Comparator. • Et objekt av denne klassen blir argument til sorteringsmetoden
Eksemplet fra forelesning 3 • Finn antall typer forskjellig utstyr I regeisteret • Lag en utstyroversikt • Registrer ny utstyrstype • Finn antall på lager av en bestemt type utstyr • Endre lagerbeholdningen for en bestemt type utstyr • Søke fram detaljinfo om en bestemt type utstyr • Vis fram koden fra forelesning 3, eksempel på sortering av arraylister etter naturlig orden. • Utvid med annen sortering. Klassen Utstyr er gitt. Programmer deler av klassen Register med enkel testklient. Utstyr Register registeret 1 *
Søking i arraylister, Java API-et • Binærsøk krever sammenligning, bruker Comparable eller Comparator • Lineærsøk krever kun test på likhet / ikke likhet. Meoden indexOf() i klassen ArraList bruker equals(). • Rimelig at equals() programmeres med samme funksjonalitet som compareTo() == 0. • Hva skjer hvis vi bruker disse metodene og • ikke programmerer compareTo()? • ikke programmerer equals()? • Prøv ut indexOf() i registerklassen.
Sammenligne tekster iht lokalt tegnsett • String implementerer Comparable<String> • Hvordan fungerer compareTo() for strenger? • Hva med compareToIgnoreCase()? • Klassen java.text.Collator implementerer Comparator<String> slik at tekstene sorteres iht lokalt tegnsett public int compareTo(Utstyr u) { // skal sammenligne this med u return betegnelse.compareTo(u.betegnelse); // tar ikke hensyn til æ, ø og å } • Skiftes ut med public int compareTo(Utstyr u) { // skal sammenligne this med u java.text.Collator koll = java.text.Collator.getInstance(); return koll.compare(this.betegnelse, u.betegnelse); // tar hensyn til æ, ø og å }
Vprg 5 Hva er en database? Hva er SQL? Å ta i bruk JavaDB Å lage Java-program mot en database LC191D Videregående programmering Semesterplan: http://aitel.hist.no/fag/vprg/index_LC191D.php Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring Else Lervik, januar 2012
Introduksjon til databaser • Når er det ikke godt nok med datafiler? • Vi trenger å gjøre hyppige oppslag • Vi trenger å lagre/endre ting fortløpende • Vi trenger å hente ut spesifikke kombinasjoner av data • Vi har høye krav til sikkerhet • Flere brukere samtidig • Så hva er en database? • ”En logisk samling med data satt sammen etter bestemte krav” • Sentrale begreper • databasesystem: Programvare som lar oss håndtere data (lagre, hente ut, endre, slette) og som tilbyr mekanismer for sikkerhetskopiering, adgangskontroll, transaksjonskontroll, med mer. Oracle, SQL Server, mySql, postgreSQL, Java DB (Derby), (Access) • database: dataene • tjener – klient, flerbrukersystemer • Vi ser data påtabellformogintetannet, ofte en tabell pr ”klasse”
Eksempel (fra forelesning 3) class Student { private Poststed poststed; private intstudnr; class Poststed { private final String postnr; private final String sted; Poststed Student I en vanlig relasjons- database lagres kun dataene. poststed -postnr {readonly} -sted {readonly} -studnr * 1 +getPoststed() +getStudnr() +setPoststed() +setStudnr() +finnPostnr() +finnSted() +getPostnr() +getSted() Poststed Student
Spesielle krav til tabellene • kun én verdi i hver rute • ingen rader er like, det eksisterer en såkalt ”primærnøkkel” som identifiserer raden • de samme dataene lagres ikke flere ganger enn nødvendig. I praksis betyr det at data lagres dobbelt bare dersom det trengs for å kople sammen tabeller – vi kopler sammen tabeller via kolonner med felles dataverdier Poststed Student
Oppgave • Hvilke tabeller foreslår du for klassene fra Øving 3? Anta at du skal lage en database for et konferansesenter for å holde oversikt over reservasjoner. reserva-sjonene Reservasjon Rom Konferanse-senter rommene 1 * 1 *
Hva er SQL? • Standardisert språk for • å lage, slette og endre tabeller • å hente ut data, å legge inn, slette og endre data Å taibrukJavaDB - demo • Lag en database som består av en enkelt tabell • CREATE TABLE person( • persnr INTEGER PRIMARY KEY, • fornavn VARCHAR(30) NOT NULL, • etternavn VARCHAR(30) NOT NULL); • INSERT INTO person VALUES (100, 'Ole', 'Hansen'); • INSERT INTO person VALUES (101, 'Anne Grethe', 'Ås'); • INSERT INTO person VALUES (102, 'Jonny', 'Hansen'); • Utførenkle SQL-setninger
Å lage Javaprogram mot en database standardisert grensesnitt (JDBC), forskjellige drivere (husk classpath!) Demonstrasjon: Lag enkle Java-program somhenterut / legger inn data