Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Programmering i Java versjon september 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.

Liknende presentasjoner


Presentasjon om: "Programmering i Java versjon september 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else."— Utskrift av presentasjonen:

1 Programmering i Java http://www.tisip.no/Javabok/ versjon september 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2002. Kapittel 9 Tabell-lister og programmering av assosiasjoner Hva er en tabell-liste?side 2-3 Et aggregat med tabell-listeside 4 Hvordan lagre tall i en tabell-liste?side 5-6 Assosiasjonerside 7 Oppussingseksemplet, del 2side 8 Å programmere aggregeringer og assosiasjonerside 9-11 Interfacet Comparable og sortering av objekterside 12 Interfacet Comparator og sortering av teksterside 13

2 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2002. Kapittel 9, side 2 Hva er en tabell-liste? Vanlige tabeller er lite fleksible. Kan ikke endre størrelsen etter at tabellen er opprettet. Klassen java.util.ArrayList. –Innebygget en tabell av referanser. –Klassen vedlikeholder størrelsen på denne tabellen etter behov. –Klassen holder orden på hvor stor del av tabellen som til enhver tid inneholder fornuftige data. Aktuelle metoder: –boolean add(Object obj) - sett inn en referanse –Object get(int indeks) - hent en referanse –Object remove(int indeks) - fjern en referanse –int size() - størrelsen Dersom ugyldig indeks, kastes IndexOutOfBoundsException Dersom en parameter er av typen Object, kan argumentet være av en hvilken som helst referansetype. Dersom returtypen fra en metode er Object, må vi caste returobjektet til riktig klasse, før vi kan sende meldinger til det.

3 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2002. Kapittel 9, side 3 Eksempel import javax.swing.JOptionPane; import java.util.ArrayList; class TabellListeAvNavn { public static void main(String[] args) { ArrayList navnene = new ArrayList(); // trenger ikke å tenke på størrelsen String navn = JOptionPane.showInputDialog("Oppgi navn (avslutt med blank): "); navn = navn.trim(); while (!navn.equals("")) { navnene.add(navn); // add() er en metode i klassen ArrayList navn = JOptionPane.showInputDialog("Oppgi navn (avslutt med blank): "); navn = navn.trim(); } for (int i = 0; i < navnene.size(); i++) { Object detteNavnet = navnene.get(i); // henter ut en referanse System.out.println(detteNavnet); } System.exit(0); } Oppgave: Tegn en figur som viser alle referanser og objekter i dette eksemplet. Gjør alle oppgavene side 282.

4 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2002. Kapittel 9, side 4 Et aggregat med tabell-liste *1 fagene Fagkatalog registrerNyttFag finnAntallFag finnFag sorterFag Fag fagkode fagnavn antSp finnFagkode finnFagnavn finnAntStudiepoeng multiplisitet rollenavn Vis programliste 9.2, side 283-284 sammen med programliste 7.9, side 235-238

5 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2002. Kapittel 9, side 5 Hvordan lagre tall i en tabell-liste? Elementene i en tabell-liste må være referanser. Ofte behov for å lagre tall i en tabell-liste. Klassene Integer, Double osv. pakker en verdi av en primitiv datatype inn i et objekt, derav betegnelsen wrapperklasse (”innpakning” er egentlig ikke spesielt for disse klassene, alle klasser pakker inn noe…). Referanser til disse objektene kan lagres i tabell-liste. Eksempel: –Integer heltallsobjekt = new Integer(50); // lager et objekt med innhold 50 –int etTall = heltallsobjekt.intValue(); // henter ut tallverdien fra objektet Leser inn positive tall fra brukeren, og lagrer tallene i en tabell-liste: ArrayList tallene = new ArrayList(); String tallLest = JOptionPane.showInputDialog("Oppgi et tall (avslutt med blank): "); tallLest = tallLest.trim(); while (!tallLest.equals("")) { Double tallobjekt = new Double(tallLest); // må lagre tallet i et objekt tallene.add(tallobjekt); // add() er en metode i klassen ArrayList tallLest = JOptionPane.showInputDialog("Oppgi et tall (avslutt med blank): "); tallLest = tallLest.trim(); }

6 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2002. Kapittel 9, side 6 Wrapperklassene Integer, Double, m.fl. String t = "234_567"; try { int tall = Integer.parseInt(t); System.out.println("Tallet er " + tall); } catch (NumberFormatException e) { System.out.println("Kan ikke omforme " + t+ " til tall"); System.out.println(e); } Klassenavn: Integer, Long, Float, Double, Byte, Character og Boolean Klassene tilhører pakken java.lang. Alle klassene er immutable. Alle klassene har konstruktør som tar en verdi av den tilhørende primitive datatypen som argument. Alle klassene, unntatt Character, har en konstruktør som tar en streng som argument. Konstruktøren kaster NumberFormatException dersom det ikke er mulig å omforme strengen til den aktuelle datatypen. Eksempel, klassen Integer: Integer(int verdi) Integer(String s) throws NumberFormatException String toString() static int parseInt(String s) throws NumberFormatException static String toString(int i) Utskrift: Kan ikke omforme 234_567 til tall java.lang.NumberFormatException: 234_567 Gjør oppgave 1 side 286.

7 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2002. Kapittel 9, side 7 Assosiasjoner Person Kontor 1 1 har plass på Bok Forfatter 1..* er skrevet av navn med leseretning Leilighet * 1 bebos av Person en-til-mange-assosiasjon en-til-en-assosiasjon mange-til-mange-assosiasjon

8 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2002. Kapittel 9, side 8 Oppussingseksemplet, del 2 Oppussingsprosjekt finnNavn() registrerNyFlate( nyFlate: Flate) finnFlate(navn: String) finnAntFlater() finnFlate(indeks: int) registrerNyMaling( nyMaling: Maling) finnMaling(navn: String) finnAntMalinger() finnMaling(indeks: int) finnTotalpris() Flate finnNavn() finnLengde() finnBredde() finnMaling() settMaling( nyMaling: Maling) finnAreal() finnOmkrets() navn: String lengde: double bredde: double *1 Maling navn: String pris: double antStrøk: int antKvmPrLiter: double finnNavn() finnPrisPrLiter() finnAntStrøk() finnAntKvmPrLiter() finnAntLiter( enFlate: Flate) finnTotalpris ( enFlate: Flate) * 1 trenger består av navn: String 1 * bruker

9 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2002. Kapittel 9, side 9 Å programmere aggregeringer og assosiasjoner To en-til-mange-aggregeringer. Kan betraktes som ”registre”. Programmeres ved å lage tabell-lister i aggregat-klassen. Tabell-listene inneholder referanser til objektene som inngår i aggregatet. –class Oppussingsprosjekt { – private String navn; – private ArrayList alleFlater = new ArrayList(); – private ArrayList alleMalinger = new ArrayList(); En-til-mange-assosiasjon fra Maling til Flate. –Trenger et malingsobjekt å vite om alle flatene? Lag tabell-liste i klassen Maling. –Trenger et flate-objekt å vite om malings-objektet? Lag en referanse i klassen Flate. Det siste er nok: –class Flate { – private String navn; – private double lengde; – private double bredde; – private Maling maling; Assosiasjoner og aggregeringer programmeres på samme måte. For å kode komposisjoner må vi ta spesielle hensyn, se kapittel 8.

10 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2002. Kapittel 9, side 10 Hvilke oppgaver må en klasse som har ansvaret for å vedlikeholde et register kunne utføre? En klient må kunne få utført følgende oppgaver: –Å legge inn et nytt element i registeret. –Å se på de elementene som er lagt inn. Søking på f.eks. navn. Bør også kunne løpe gjennom alle ved hjelp av en indeks. –Eventuelt å slette et element. Dette gjelder generelt, vi skal som eksempel se på registrene i oppussingsprosjektet.

11 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2002. Kapittel 9, side 11 Vis programliste 9.4 side 290-293 og programliste 9.5 side 294-295. Tegn en figur som viser alle objekter og referanser som opprettes når programliste 9.5 kjøres. Gjør oppgavene side 295.

12 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2002. Kapittel 9, side 12 Interfacet Comparable og sortering av objekter Et interface er en samling med metodehoder. En klasse kan velge å implementere et interface. Den må da inneholde kode for alle metodene i interfacet. Eksempel på interface: public interface Comparable { // tilhører pakken java.lang public int compareTo(Object obj); // dette har vi sett før! } For å bruke biblioteksmetoder til sortering av objekter må klassen objektene tilhører implementere interfacet Comparable. Dermed kan sorteringsmetodene bruke compareTo() til å sammenligne objektene. Vis programlistene 9.6 og 9.7, sidene 296-300.

13 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2002. Kapittel 9, side 13 Interfacet Comparator og sortering av tekster Klassen String implementerer Comparable Ikke godt nok! Iallfall ikke for norske forhold. Trenger et objekt som inneholder riktig sorteringsrekkefølge. Et slikt objekt kan tilhører en klasse som implementerer Comparator: public interface Comparator { /* sammenligner to objekter, merk forskjellen fra Comparable */ int compare(Object o1, Object o2); // OBS! Her er metoden vi skal bruke /* sammenligner to objekter av klasser som implementerer Comparator */ boolean equals(Object obj); } Klassen Collator implementerer dette interfacet for tekster, og slik at sorteringsrekkefølgen er i henhold til gitt lokalisering. Kan bruke denne i egne sorteringsmetoder, og i bibliotekmetoder for sortering og søking. Vis programlistene 9.8, 9.9 og 9.10, sidene 301-305. Gjør oppgavene side 305.


Laste ned ppt "Programmering i Java versjon september 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else."

Liknende presentasjoner


Annonser fra Google