Innhold Forord... v 1 Introduksjon... 1 1.1 Forutsetninger for å lese denne boka... 2 1.2 Hva er et program?... 3 1.3 Hvordan man kan betrakte en datamaskin... 4 1.4 Hvordan en datamaskin kan tenke... 6 1.5 Et lite eksempelprogram... 7 1.6 Å utvikle og vedlikeholde programmer... 13 1.7 Java-applikasjoner, Java-servleter og Java-appleter... 15 1.8 API-referanse... 19 1.10 Repetisjonsoppgaver... 22 1.11 Oppgaver... 22 2 Variabler, datatyper og uttrykk... 25 2.1 Data og variabler... 25 2.2 Algoritmer, programmeringsfeil og testdata... 29 2.3 Setninger, blokker og navn... 32 2.4 Variabler og konstanter... 34 2.5 Datatyper... 37 2.6 Tilordninger og aritmetiske uttrykk... 43 2.7 Typeomforming... 46 2.8 Beregninger i et oppussingsprosjekt... 48 2.11 Programmeringsoppgaver... 53 3 Bruk av ferdige klasser... 55 3.1 Objekter som modeller av virkeligheten... 56 3.2 Å bruke ferdige klasser... 60 3.3 Klassen Random... 66 3.4 Å organisere klasser i pakker... 69 3.5 Unntaksobjekter... 70 3.6 Klassekonstanter og -metoder i Javabiblioteket... 70 3.7 Å lese data fra brukeren... 72 3.8 Klassen String... 74 3.9 Å formatere utskrift av desimaltall... 80
xiv Innhold 3.10 API-referanse... 82 3.12 Repetisjonsoppgaver... 89 3.13 Programmeringsoppgaver... 90 4 Å lage egne klasser... 91 4.1 Å programmere en klasse... 92 4.2 Tilgangsmodifikatorene private og public...100 4.3 Innholdet i en klasse...101 4.4 Metoden tostring()...110 4.5 En klasse til og noen nye operatorer...111 4.6 Vinduer med enkel grafikk...115 4.7 Koordinater...120 4.8 Farger og skrifttyper...122 4.9 API-referanse...126 4.11 Repetisjonsoppgaver...133 4.12 Programmeringsoppgaver...134 5 Valg som kontrollstruktur...135 5.1 En enkel kalkulator...136 5.2 Et valg er en kontrollstruktur...137 5.3 Blokker inne i metoder...142 5.4 if-setningen...144 5.5 Nøstet if og flervalgssetninger...147 5.6 Logiske uttrykk...154 5.7 Sammenligning av strenger...158 5.8 Å sammenligne beregnede desimaltallverdier...160 5.9 Flervalgssetningen switch...161 5.10 Betingelsesoperatoren?:...163 5.11 API-referanse...164 5.13 Repetisjonsoppgaver...167 5.14 Programmeringsoppgaver...168 6 Løkke som kontrollstruktur...171 6.1 Tellerkontrollerte løkker...172 6.2 En løkke med en generell betingelse...175 6.3 Et eksempel på grafikk...177 6.4 for-setningen...180 6.5 Nøstede kontrollstrukturer...181 6.6 do-while-setningen...182 6.7 Valg av riktig løkkesetning...185 6.8 Kontroll av inndata...185 6.9 Å bruke pakker som ikke tilhører Java API-et...189 6.10 Å skrive ut tall i kolonner...192 6.12 Repetisjonsoppgaver...194 6.13 Programmeringsoppgaver...194 7 Tabeller...197
7.1 Hva er en tabell?...197 7.2 Å kopiere tabeller...203 7.3 Klassen Maned med nedbørdata...205 7.4 Sortering...209 7.5 Søking...212 7.6 Klassen java.util.arrays...214 7.7 Online API-dokumentasjonen...215 7.8 Todimensjonale tabeller...218 7.9 Et menystyrt program...225 7.10 Mer enn to dimensjoner...230 7.11 Tabell av strenger...231 7.12 Tabell av referansetype som medlem i klasse...234 7.13 Flerdimensjonale tabeller og objektorientert programmering..239 7.14 API-referanse...240 7.16 Repetisjonsoppgaver...242 7.17 Programmeringsoppgaver...242 8 Samarbeid mellom objekter...245 8.1 Et eksempel på samarbeid mellom objekter...246 8.2 Komposisjon, en-del-av-sammenheng...249 8.3 Referansetyper i grensesnittet til en klasse...255 8.4 Aggregering, en løsere en-del-av-sammenheng...260 8.5 Å sammenligne objekter...263 8.6 Oppussingseksemplet, del 1...269 8.8 Repetisjonsoppgaver...276 8.9 Programmeringsoppgaver...276 9 Tabell-lister og programmering av assosiasjoner...279 9.1 Tabell-lister...280 9.2 Et aggregat med tabell-liste...282 9.3 Wrapperklassene Integer, Double med flere...284 9.4 Assosiasjoner...286 9.5 Oppussingseksemplet, del 2...288 9.6 Interfacet Comparable og sortering av objekter...295 9.7 Interfacet Comparator og sortering av tekster...301 9.8 API-referanse...305 9.9 Nye begrep i dette kapitlet...309 9.10 Repetisjonsoppgaver...310 9.11 Programmeringsoppgaver...311 10 Arv og polymorfi...313 10.1 Generalisering, spesialisering og arv...314 10.2 Klassen Person med subklasser...316 10.3 Polymorfi...321 10.4 Abstrakte klasser...324 10.5 Hva hvis polymorfi ikke hadde eksistert?...328 xv
xvi Innhold 10.6 Tilgangsmodifikatoren protected...331 10.7 Oppussingseksemplet, del 3...335 10.8 Eksempler på arv i to nivåer og bruk av final...339 10.9 Regler og syntaks...342 10.10 Interface...346 10.12 Repetisjonsoppgaver...352 10.13 Programmeringsoppgaver...353 11 Unntakshåndtering...357 11.1 Unntak og unntaksobjekter...358 11.2 try-setningen...363 11.3 Å lage egne unntaksobjekter...369 11.4 API-referanse...372 11.6 Repetisjonsoppgaver...374 12 Bruk av datafiler og strømmer...375 12.1 Datafiler og strømmer...376 12.2 Et eksempel på en datafil...377 12.3 Å lese tekst fra en fil...379 12.4 Å skrive tekst til en fil...382 12.5 Lesing og skriving til fil sammendrag...383 12.6 Å lese tall fra en datafil...384 12.7 Kommunikasjon med konsollet...386 12.8 Binær overføring av data...388 12.9 Direkte tilgang til innholdet i en fil...389 12.10 Serialisering...393 12.11 API-referanse...397 12.13 Repetisjonsoppgaver...402 12.14 Programmeringsoppgaver...403 13 GUI-programmering og hendelser...405 13.1 GUI-komponenter...406 13.2 Å trykke på en knapp...408 13.3 Indre klasser...414 13.4 Å håndtere layouten...420 13.5 API-referanse...430 13.7 Repetisjonsoppgaver...437 13.8 Programmeringsoppgaver...437 14 GUI-komponenter for valg og tekster...439 14.1 Å gi brukeren valg mellom alternativer...440 14.2 Avkrysningsruter...442 14.3 Radioknapper...444 14.4 Listebokser...446 14.5 Spinnere...452 14.6 Kontroll av inndata...454 14.7 Tekstkomponenter og fokuslyttere...456
14.8 Andre måter å programmere lyttere på...463 14.9 API-referanse...465 14.11 Repetisjonsoppgaver...471 14.12 Programmeringsoppgaver...472 15 Å lage brukergrensesnitt...475 15.1 Menyer...475 15.2 Knapperader...478 15.3 Ulike typer vinduer...482 15.4 Vinduslyttere...483 15.5 Dialogvinduer...485 15.6 GUI-komponenten tabell (klassen JTable)...500 15.7 GridBagLayout som layout-håndterer...502 15.8 Oppussingseksemplet, del 4...506 15.9 Å lage egne datamodellklasser...516 15.10 API-referanse...520 15.12 Repetisjonsoppgaver...526 15.13 Programmeringsoppgaver...527 16 Tråder...529 16.1 Tråder i prosesser...529 16.2 Deling av tid mellom tråder...531 16.3 Eksempel på bruk av tråder...533 16.4 Trådenes tilstander...537 16.5 Kommunikasjon mellom tråder...538 16.6 Låser og synkronisering...539 16.7 Mer kontroll: wait(), notify() og notifyall()...543 16.8 Å titte på trådene med JDB...547 16.9 API-referanse...548 16.11 Repetisjonsoppgaver...551 16.12 Programmeringsoppgave...551 17 Datastrukturer og algoritmeteori...553 17.1 Grafer...553 17.2 Lister...556 17.3 Redningen: Collection, List og LinkedList...563 17.4 Køer og stakker...566 17.5 Rekursjon...567 17.6 Trær...569 17.7 Trær i API-et...577 17.8 Hashtabeller...578 17.9 Iteratorer...582 17.10 API-referanse...583 17.12 Repetisjonsoppgaver...588 17.13 Programmeringsoppgaver...589 18 Mer om appleter...591 xvii
xviii Innhold 18.1 Hva appleter gjør på web...591 18.2 Sikkerhet...592 18.3 Å programmere en applet...595 18.4 Sikkerheten i praksis...599 18.5 Kommunikasjon mellom applet og nettleser...601 18.6 API-referanse...603 18.8 Repetisjonsoppgaver...606 18.9 Programmeringsoppgaver...607 19 Distribuerte systemer med socket-programmering og RMI...609 19.1 Socketer...610 19.2 Objekter som samarbeider over nettet...616 19.3 Hvordan foregår kommunikasjonen mellom objektene?...622 19.4 RMI og appleter...629 19.5 Deploymentdiagram...629 19.6 Et distribuert system med tilbakekall...631 19.7 API-referanse...642 19.9 Repetisjonsoppgaver...644 19.10 Programmeringsoppgaver...645 20 Å programmere mot en database...647 20.1 Databasedrivere...648 20.2 Å få kontakt med en database...649 20.3 Et større eksempel...654 20.4 En databaseapplikasjon...660 20.5 Trelagsarkitektur...665 20.6 Transaksjoner...671 20.7 Kompilerte SQL-setninger...674 20.8 API-referanse...676 20.9 Nye begrep i dette kapitlet...678 20.10 Repetisjonsoppgaver...679 20.11 Programmeringsoppgaver...680 21 Web-programmering med JavaServer Pages...683 21.1 Ulike måter å programmere for web...684 21.2 Installasjon av programvare...685 21.3 Servleter...686 21.4 JavaServer Pages (JSP)...690 21.5 Hva består JSP av?...691 21.6 Å lese inn data fra brukeren...695 21.7 Klientsidevalidering med JavaScript...702 21.8 JSP-sider som kommuniserer med databaser...704 21.9 Å lagre tilstandsinformasjon...712 21.10 API-referanse...723 21.12 Repetisjonsoppgaver...728 21.13 Programmeringsoppgaver...729
22 Å teste programmer...731 22.1 Refleksjon...731 22.2 Enhetstesting med JUnit...733 22.3 Systemtesting...741 22.4 Assert...743 22.5 Regresjonstesting...745 22.6 Akseptansetesting...745 22.7 Svartboks- og hvitbokstesting...745 22.8 API-referanse...746 22.10 Repetisjonsoppgaver...749 Vedlegg A: Bruk av Java SDK og WinEdit...751 A.1 J2SE...751 A.2 Kjøring av appleter...755 A.3 WinEdit...756 A.4 Pakking med jar...757 A.5 Dokumentasjon med javadoc...759 Vedlegg B: Reserverte ord...763 Vedlegg C: Tallsystemer...765 Vedlegg D: Unicode-tegnsettet...769 Vedlegg E: HTML og appleter...771 E.1 HTML...771 E.2 Inkludering av appleter...773 Vedlegg F: Unntak fra kodestandard...775 Vedlegg G: Referanser...777 Stikkordliste...779 xix
xx Innhold