Kun til bruk i tilknytning til l - PowerPoint PPT Presentation

About This Presentation
Title:

Kun til bruk i tilknytning til l

Description:

Tabell-lister og programmering av assosiasjoner Hva er en tabell-liste? side 2-3 Et aggregat med tabell-liste side 4 Hvordan lagre tall i en tabell-liste? – PowerPoint PPT presentation

Number of Views:64
Avg rating:3.0/5.0
Slides: 16
Provided by: Else166
Category:

less

Transcript and Presenter's Notes

Title: Kun til bruk i tilknytning til l


1
Tabell-lister og programmering av assosiasjoner
Hva er en tabell-liste? side 2-3 Et aggregat
med tabell-liste side 4Hvordan lagre tall i
en tabell-liste? side 5-6Wrapperklassene
Integer, Double, m.fl. side 7Omforming
primitive datatyper ? wrapperobjekt side
8 Assosiasjoner side 9 Oppussingseksemplet,
del 2 side 10 Å programmere aggregeringer og
assosiasjoner side 11-13 Interfacet Comparable
og sortering av objekter side 14 Interfacet
Comparator og sortering av tekster side 15

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.
  • Konstruktør
  • public ArrayListltTypegt() - elementtypen oppgis
    i spissparentesene
  • En tabell-liste av String-referanser lages slik
  • ArrayListltStringgt navnene new
    ArrayListltStringgt()
  • Aktuelle metoder
  • boolean add(Type obj) - sett inn en referanse
  • Type get(int indeks) - hent en referanse
  • Type remove(int indeks) - fjern en referanse
  • int size() - størrelsen
  • Dersom ugyldig indeks, kastes IndexOutOfBoundsExce
    ption
  • 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
Eksempel
import java.util.ArrayList import static
javax.swing.JOptionPane. class
TabellListeAvNavn public static void
main(String args) ArrayListltStringgt
navnene new ArrayListltStringgt() // trenger
ikke å tenke på størrelsen String navn
showInputDialog("Oppgi navn (avslutt med blank)
") navn navn.trim() while
(!navn.equals("")) navnene.add(navn) //
add() er en metode i klassen ArrayList navn
showInputDialog("Oppgi navn (avslutt med
blank) ") navn navn.trim()
/ Henter ut og skriver ut alle navnene ved å
bruke en vanlig for-løkke. / for (int i 0
i lt navnene.size() i) String
detteNavnet navnene.get(i)
System.out.println(detteNavnet) /
Henter ut og skriver ut alle navnene ved å bruke
utvidet for-løkke. / for (String detteNavnet
navnene) System.out.println(detteNavnet)

Oppgave Tegn en figur som viser alle referanser
og objekter i dette eksemplet.
Gjør alle oppgavene side 328.
4
Et aggregat med tabell-liste
rollenavn
Fag
Fagkatalog
fagene
fagkode fagnavn antSp
registrerNyttFag finnAntallFag finnFag sorterFag

1
finnFagkode finnFagnavn finnAntStudiepoeng
multiplisitet
Vis programliste 9.2, side 329-330 sammen med
programliste 7.9, side 281-284
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
  • Kortform
  • Integer heltallsobjekt 50
  • int etTall heltallsobjekt
  • Dvs. automatisk omforming mellom en primitiv
    datatype og et objekt av den tilsvarende
    wrapperklassen.

6
Tabell-liste med tall, eksempel
  • import java.util.ArrayList
  • import static javax.swing.JOptionPane.
  • class TabellListeAvTall
  • public static void main(String args)
  • ArrayListltDoublegt tallene new
    ArrayListltDoublegt()
  • / Leser inn og lagrer tallene i
    tabell-listen /
  • String tallLest showInputDialog("Oppgi et
    tall (avslutt med blank) ")
  • while (!tallLest.equals(""))
  • double tall Double.parseDouble(tallLest)
  • tallene.add(tall) // egentlig
    tallene.add(new Double(tall))
  • tallLest showInputDialog("Oppgi et tall
    (avslutt med blank) ")
  • / Viser alle tallene i tabell-listen.
    Summerer dem. /
  • System.out.print("Finner følgende tall ")
  • double sum 0
  • for (double etTall tallene) // utvidet
    for-løkke
  • sum etTall

7
Wrapperklassene Integer, Double, m.fl.
  • 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)

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)
  • Utskrift
  • Kan ikke omforme 234_567 til tall
  • java.lang.NumberFormatException 234_567

Gjør oppgave 1 side 333.
8
Automatisk omforming mellom primitiv datatype og
wrapperobjekt
  • Automatisk omforming mellom en primitiv datatype
    og et objekt av den tilsvarende wrapperklassen
  • skjer ved tilordning, i uttrykk, ved metodekall
  • Omforming fra primitiv datatype til objekt kalles
    boxing conversion eller autoboxing
  • Omforming fra objekt til primitiv datatype kalles
    unboxing conversion eller auto-unboxing
  • Eksempler
  • Double t1 new Double(4.5)
  • Double t2 new Double(25)
  • Kalkulator kalk new Kalkulator(t1, t2) //
    auto-unboxing (side 170)
  • Double sum kalk.beregnSum() // auto-boxing
  • double svar1 (t1 t2) / 100 // auto-unboxing
  • Double svar2 (t1 t2) / 100 // auto-unboxing
    etterfulgt av auto-boxing

9
Assosiasjoner
1
Leilighet

Person
en-til-mange-assosiasjon
bebos av
Kontor
1
1
Person
en-til-en-assosiasjon
har plass på
Forfatter
Bok
1..
1..
mange-til-mange-assosiasjon
er skrevet av
navn med leseretning
10
Oppussingseksemplet, del 2
bruker

Flate
navn String lengde double bredde double
1
Oppussingsprosjekt

1
Maling
navn String
består av
finnNavn() finnLengde() finnBredde() finnMaling()
settMaling( nyMaling Maling) finnAreal() finnOm
krets()
navn String pris doubleantStrøk
int antKvmPrLiter double
finnNavn() registrerNyFlate( nyFlate
Flate) finnFlate(navn String) finnAntFlater() fin
nFlate(indeks int) registrerNyMaling(
nyMaling Maling) finnMaling(navn
String) finnAntMalinger() finnMaling(indeks
int) finnTotalpris()
finnNavn() finnPrisPrLiter() finnAntStrøk() finnAn
tKvmPrLiter() finnAntLiter( enFlate
Flate) finnTotalpris ( enFlate Flate)

1
trenger
11
Å 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 ltFlategtalleFlater new
    ArrayListltFlategt()
  • private ArrayList ltMalinggtalleMalingstyper
    new ArrayListltMalinggt()
  • 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 malingstype
  • Assosiasjoner og aggregeringer programmeres på
    samme måte.
  • For å kode komposisjoner må vi ta spesielle
    hensyn, se kapittel 8.

12
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.

13
Vis programliste 9.4 side 337-340 ogprogramliste
9.5 side 340-342.
Tegn en figur som viser alle objekter og
referanser som opprettes når programliste 9.5
kjøres.
Gjør oppgavene side 342.
14
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(Type 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 343-347.
15
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 ComparatorltTypegt
  • / sammenligner to objekter, merk forskjellen
    fra Comparable /
  • int compare(Type o1, Type 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
    348-352.

Gjør oppgavene side 352.
Write a Comment
User Comments (0)
About PowerShow.com