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

Slides:



Advertisements
Liknende presentasjoner
Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Advertisements

Tabeller av objekter Klassen ArrayList
Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring
Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring
C++ for Java-programmerere
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Datafiler og serialisering Tekstfiler Scanner-klassen Binær overføring av data Direkte tilgang til filinnholdet Serialisering LC191D Videregående programmering.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
Uke 8 - Mer om: Objekter, klasser og pekere
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
1 Java 6 Mer om metoder Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Samarbeid mellom objekter
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Java 4 Mer om forgreninger While-løkker Ole Christian Lingjærde
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
IS-102 Klassedefinisjoner
C# for javaprogrammerere
En gang til!? .
Mer om programmering av aggregeringer Repetisjon: Komposisjon og aggregering En register-klasse: modellering En register-klasse: implementering Sortering.
Introduksjon til Java 5.0. Hva er nytt i 5.0? Generiske typer For-løkke med iterator (for-hver løkke) Automatisk innpakking av primitive typer Metadata.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Objektorientert programmering
Repetisjon av JSP Variabler, tabeller, if-setninger, for/while-løkker
1 Kap 06 Ordnede / Sorterte lister Oppgave nr 06_02 Polynomer Klassehierarki Javadokumentasjon.
Arv og polymorfi, del 3 Modifikatoren abstract side 2-3
Å lese tall fra en fil, klassen Scanner 1.Et Scanner-objekt kan knyttes til et strømobjekt eller til en streng. 2.Kan skanne teksten etter data av ulike.
Programmering i Java tilpasset undervisning våren 2009 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet.
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
Objekt, Instanser og referanser + litt til. Objekter  Instanser  Kan sees på som det samme. Personen Per kan være både et objekt og en instans av klassen.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon september 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Object  Klassen i java  Alle klasser arver fra denne om ikke noe annet blir spesifisert  ArrayList.add(Object instans)  Alle elementer formes til Object.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
INF1000 (Uke 14) Eksamen V06 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild Waaler.
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
INF1000 (Uke 4) Mer om forgreninger, While-løkker
Inf1000 (Uke 5) Arrayer, filer og tekst
Kapittel 7 Array (lister og tabellar). 7.1 Arrayelement Array (lister, tabellar) er kjent frå VB Blir brukt til å organisere data når vi har mange dataelement.
Variabler, datatyper og uttrykk
Utskrift av presentasjonen:

Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 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 Wrapperklassene Integer, Double, m.fl.side 7 Omforming primitive datatyper ↔ wrapperobjektside 8 Assosiasjonerside 9 Oppussingseksemplet, del 2side 10 Å programmere aggregeringer og assosiasjonerside Interfacet Comparable og sortering av objekterside 14 Interfacet Comparator og sortering av teksterside 15

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 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. •Konstruktør: –public ArrayList () - elementtypen oppgis i spissparentesene •En tabell-liste av String-referanser lages slik: –ArrayList navnene = new ArrayList (); •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 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.

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 9, side 3 Eksempel import java.util.ArrayList; import static javax.swing.JOptionPane.*; class TabellListeAvNavn { public static void main(String[] args) { ArrayList navnene = new ArrayList (); // 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 < 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.

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 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 sammen med programliste 7.9, side

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 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 •Kortform: –Integer heltallsobjekt = 50; –int etTall = heltallsobjekt; •Dvs. automatisk omforming mellom en primitiv datatype og et objekt av den tilsvarende wrapperklassen.

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 9, side 6 Tabell-liste med tall, eksempel import java.util.ArrayList; import static javax.swing.JOptionPane.*; class TabellListeAvTall { public static void main(String[] args) { ArrayList tallene = new ArrayList (); /* 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; System.out.print(etTall + " "); } System.out.println("\nSummen av tallene er " + sum + "."); }

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 9, side 7 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 333.

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 9, side 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

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 9, side 9 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

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 9, side 10 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

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 9, side 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 alleFlater = new ArrayList (); – private ArrayList alleMalingstyper = 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 malingstype; •Assosiasjoner og aggregeringer programmeres på samme måte. •For å kode komposisjoner må vi ta spesielle hensyn, se kapittel 8.

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 9, side 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.

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

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 9, side 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

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 9, side 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 Comparator { /* 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 Gjør oppgavene side 352.