Indholdsfortegnelse


0 Forord 15
0.1 Formål og indhold 15
0.1.1 Bogens opbygning og indhold 15
0.2 Forudsætninger for at læse bogen 17
0.2.1 UML: Klassediagrammer 17
0.3 Netudgaven af bogen 18
0.4 Åben Dokumentlicens (ÅDL) 19
0.5 Tak 20
Første del: Videregående Java
1 Samlinger af data 23
1.1 Lister og mængder 24
1.1.1 De simple typer og samlinger af data 25
1.1.2 Interfacene til lister og mængder 25
1.1.3 Lister 26
1.1.4 Mængder 26
1.1.5 Iteratorer 27
1.2 Afbildninger (nøgleindekserede lister) 28
1.2.1 Afbildninger (Interfacet Map) 28
1.2.2 Hashtabeller (klassen HashMap) 29
1.2.3 Eksempel - ordbog 29
1.2.4 Eksempel - fødselsdatoer 30
1.2.5 Klassen LinkedHashMap 31
1.2.6 Interfacet SortedMap (sorterede afbildninger) og klassen TreeMap 31
1.3 Opgaver 31
1.4 Videre læsning 31
1.5 Appendiks 32
1.5.1 Collection 32
1.5.2 Set 32
1.5.3 SortedSet 32
1.5.4 List 33
1.5.5 Map 34
1.5.6 Iteratorer 35
1.5.7 Manipulation og sortering af data 36
1.6 Avanceret 38
1.6.1 Store-O-notationen 38
1.6.2 Arraybaserede listers virkemåde 38
1.6.3 Hægtede listers virkemåde 39
1.6.4 Hashtabellers virkemåde 39
1.6.5 Søgetræers virkemåde 39
1.6.6 Uforanderlige samlinger 40
1.6.7 Trådsikre samlinger 40
1.6.8 Uddrag af kildeteksten til Vector-klassen 41
2 Dokumentation 45
2.1 Javadoc 46
2.1.1 API-dokumentation 46
2.1.2 At dokumentere med javadoc 47
2.1.3 Simpelt eksempel 47
2.1.4 Større eksempel: Vector-klassen 48
2.1.5 Oversigter 49
2.2 Kørsel af javadoc 50
2.2.1 Simpel brug 50
2.2.2 Henvise til den eksisterende javadokumentation 50
2.3 Appendiks 51
2.3.1 Parametre til javadoc 51
2.3.2 Koder tilgængelige i javadoc 52
2.3.3 Pakkekommentarer 52
2.4 Videre læsning 53
2.5 Opgaver 53
2.6 Løsninger 54
3 Rekursion 55
3.1 Introduktion til rekursive algoritmer 56
3.1.1 Folde en rekursion ud 56
3.1.2 Forudsætninger for rekursion 56
3.2 Rekursiv listning af filer 57
3.3 Beregning af et matematisk udtryk 58
3.4 Tegning af fraktaler 60
3.5 Opgaver 61
4 Komponentbaseret programmering 63
4.1 Genbrugelige komponenter 64
4.1.1 Javabønner 64
4.1.2 Eksempel: Bønnen TextField 64
4.1.3 Bruge en javabønne 65
4.2 At definere javabønner 67
4.2.1 En meget simpel bønne: GentagTekst 67
4.2.2 Brug af bønner fra et udviklingsværktøj 68
4.2.3 Størrelsen af en grafisk komponent 68
4.2.4 Skelne mellem udviklings- og i kørselsfasen 69
4.3 Karakteristika ved javabønner 70
4.3.1 Bønner skal have en parameterløs konstruktør 70
4.3.2 Bønner kan have egenskaber 70
4.3.3 Bønner kan have tilknyttet ekstra information 71
4.3.4 Bønner bør være afgrænsede og uafhængige 71
4.3.5 Bønner kan understøtte hændelses-lyttere 71
4.4 Ekstra eksempler 73
4.4.1 Rystetekst 73
4.4.2 Rulletekst 74
4.4.3 Simpel kryptering 75
4.4.4 Eksempel på brug af bønnerne i et værktøj 76
4.5 Opgaver 78
4.6 Løsninger 79
4.6.1 Grafisk komponent: GentagTekst 79
4.6.2 Grafisk komponent: Billede 79
4.6.3 Webserver-komponent 80
4.7 Avanceret 81
4.7.1 En komponent til at tegne kurver 81
4.7.2 Repræsentation af funktioner 84
4.7.3 Fortolkning af strenge til funktioner 86
4.7.4 Layout-manageres virkemåde 87
4.7.5 Øvelse: Samspil med layout-manager 88
4.7.6 Opgave: Adresseindtastningskomponent 88
4.7.7 Løsning: Adresseindtastningskomponent 89
5 Grafiktegning (Java2D) 93
5.1 Java2D kort fortalt 94
5.1.1 Geometriske figurer 94
5.1.2 Geometriske operationer 95
5.1.3 Transformationer 96
5.1.4 Linjetyper 96
5.1.5 Tegnekvalitet 96
5.1.6 Videre læsning 96
5.2 Eksempel 96
5.3 Eksempel fra JDK'et 98
6 Grafiske brugergrænseflader (Swing) 99
6.1 Introduktion til Swing 100
6.1.1 Eksempel på forskelle mellem Swing og AWT 101
6.2 MVC i Swing- og AWT-komponenter 102
6.2.1 AWT-komponenter 102
6.2.2 Swing-komponenter 102
6.3 Datamodellen i Swing-komponenter 103
6.3.1 Tekstfelter (interfacet Document) 103
6.3.2 Tabeller (interfacet TableModel) 104
6.3.3 Knapper (interfacet ButtonModel) 105
6.3.4 Andre komponenter 106
6.3.5 Opgaver 106
6.3.6 Løsning 107
6.4 Præsentationsdelen i Swing 110
6.4.1 Lister (ListCellRenderer) 110
6.4.2 Eksempel: Præsentation af skrifter i en liste 111
6.4.3 Tabeller (TableCellRenderer) 113
6.4.4 Træer (TreeCellRenderer) 114
6.4.5 Opgaver 114
6.5 Kontroldelen af Swing-komponenter 115
6.5.1 Tabeller (TableCellEditor) 115
6.5.2 Træer (TreeCellEditor) 115
6.5.3 Standardredigering med DefaultCellEditor 115
6.6 Eksempler 116
6.6.1 SwingSet2-demo af JTable 116
6.6.2 Eksempel med JTable 117
6.7 Avanceret: Udseendet af Swing 119
6.7.1 Swing-komponenters standardudseender 119
6.7.2 Andre udseender 119
6.7.3 Kunststoff-udseendet 119
6.7.4 Alloys-udseendet 120
6.7.5 Opgaver 120
7 Internationalisering 121
7.1 Internationale programmer 122
7.1.1 Formatering af tidspunkter 122
7.1.2 Formatering af tal og beløb 123
7.1.3 Tekstindhold i resursefiler 123
7.1.4 Avanceret: Binære resursefiler 124
7.1.5 Avanceret tekstformatering 125
7.2 Selv bestemme sproget 127
7.2.1 Styre sproget fra kommandolinjen 127
7.2.2 De mulige Locale-objekter 127
7.2.3 Bruge Locale-objekter 128
7.2.4 Avanceret: Sætte standardsprog 128
8 Databaser (JDBC) 129
8.1 Basisfunktioner i JDBC 130
8.1.1 Indlæse driveren 130
8.1.2 Etablere forbindelsen 130
8.1.3 Kommunikere med databasen 131
8.2 Forpligtigende eller ej? (commit) 132
8.3 Optimering 133
8.3.1 Bruge den rigtige databasedriver 133
8.3.2 Lægge opdateringer i kø (batch-opdateringer) 133
8.3.3 På forhånd forberedt SQL 134
8.3.4 Kalde gemte procedurer i databasen 135
8.4 Avanceret 136
8.4.1 Opdatering og navigering i ResultSet-objekter 136
8.4.2 Metadata 136
8.4.3 Metadata om databasen 136
8.4.4 Metadata om svaret på en forespørgsel 136
8.4.5 Eksempel - udskrive en vilkårlig tabel 137
8.4.6 Persistering af objekter - JDO 138
9 Optimering 139
9.1 Optimering 140
9.2 Ting, man skal undgå (hvis man kan) 140
9.2.1 Oprette mange objekter 140
9.2.2 Oprette mange tråde 141
9.2.3 Kaste og fange mange undtagelser 141
9.2.4 Gå ind og ud af synkroniserede blokke/metoder 141
9.2.5 Bruge mange (evt. anonyme) klasser 141
9.3 Er C++ hurtigere end Java? 142
9.3.1 Et testprogram i Java 143
9.3.2 Testprogrammet i C++ 143
9.4 Videre læsning 144
10 Eksterne kald og JNI 145
10.1 Kalde eksterne programmer 146
10.1.1 Kommunikation med det eksterne program 147
10.2 Kald til andre programmeringssprog 147
10.2.1 JNI - Java Native Interface 147
10.2.2 Skrive Java-klasser med maskinkode 147
10.2.3 Skrive en metode i C++ 148
10.2.4 Oversætte til maskinkode 149
10.2.5 Køre programmet 149
10.2.6 Kommunikation fra C-koden til Java 150
10.2.7 Henvisninger 150
11 Introspektion 151
11.1 Læse klasseinformation for et objekt 152
11.1.1 Oversigt over pakken java.lang.reflect 152
11.1.2 Opremse metoderne i en klasse 153
11.2 Arbejde med objekter 153
11.3 Introspektion på javabønner 154
11.4 Generere nye klasser og indlæse dem 155
11.4.1 Kalde oversætteren som eksternt program 155
11.4.2 Bruge oversætteren internt 155
11.4.3 Indlæse klasser fra filsystemet 156
11.5 Videre læsning 157
12 Standardbiblioteket (J2SE) 159
12.1 Grundlæggende klasser (java.lang) 160
12.1.1 Klasser, der svarer til de simple typer 160
12.1.2 Tråde 161
12.1.3 Introspektion og dynamisk klasseindlæsning 161
12.1.4 Svage referencer (java.lang.ref) 162
12.1.5 Matematik med vilkårlig præcision (java.math) 162
12.2 Værktøjsklasser (java.util) 162
12.2.1 De "klassiske" datastrukturer i java.util 163
12.2.2 Collections-klasserne i java.util 164
12.3 Behandling af tekst (java.text) 165
12.4 Grafiktegning (java.awt del 1) 166
12.4.1 Generelt 166
12.4.2 Grafiktegning (Java2D) 167
12.4.3 Udskrivning 169
12.5 Grafiske brugergrænseflader (java.awt del 2) 170
12.5.1 Grafiske komponenter i java.awt 170
12.5.2 Containere i java.awt 171
12.5.3 Appletter (pakken java.applet) 171
12.5.4 Layout-managere i java.awt 171
12.5.5 Hændelser i java.awt 171
12.5.6 Menuer i java.awt 173
12.5.7 Kopiering, udklipsholder og træk-og-slip 173
12.6 Lyd 174
12.6.1 WAV/indspillet lyd (javax.sound.sampled) 174
12.6.2 MIDI/nodebaseret musik (javax.sound.midi) 175
12.7 Netværkskommunikation (java.net) 177
12.8 Databasekommunikation (java.sql) 178
12.9 Fjernkald af metoder (java.rmi) 179
12.10 Sikkerhed, kryptering, adgangskontrol (java.security) 180
13 Mobiltelefoner (J2ME) 181
13.1 Introduktion til midletter 182
13.1.1 Eksempel - en simpel midlet 182
13.1.2 Prøvekøre en midlet 182
13.1.3 Midletters livscyklus 183
13.2 Brugergrænseflader i midletter 184
13.2.1 Klassen Display (den fysiske skærm) 184
13.2.2 Klassen Displayable (skærmbilleder) 185
13.2.3 Klassen Ticker (rulletekst på et skærmbillede) 185
13.2.4 Klassen Image (billeder) 185
13.2.5 Klassen Font (skrifttyper) 186
13.3 Direkte grafiktegning og spil 187
13.3.1 Klassen Canvas 188
13.3.2 Klassen GameCanvas og lagdelt grafik 188
13.3.3 Klassen Graphics 189
13.4 Grafiske standardkomponenter 190
13.4.1 Eksempel: Gæt et tal 190
13.4.2 Kommandoer og hændelser i midletter 191
13.4.3 TextBox 192
13.4.4 Alert 192
13.4.5 List 193
13.4.6 Form 194
13.5 Tilgængelige klasser fra J2SE 195
13.5.1 Pakken java.lang 195
13.5.2 Pakken java.util 195
13.5.3 Pakken java.io 195
13.6 Netværkskommunikation 196
13.6.1 Pakken javax.microedition.io 196
13.6.2 Eksempel: Kommunikation med webserver 197
13.7 Gemme data i telefonen 199
13.8 Udviklingsværktøjer til midletter 200
13.8.1 Wireless Toolkit 200
13.8.2 Sun ONE Studio Mobile Edition 200
13.8.3 Borland JBuilder MobileSet 201
13.9 Opbygningen af J2ME 202
13.9.1 Konfigurationer 202
13.9.2 Profiler 203
13.10 Yderligere læsning 203
14 Servere (J2EE & EJB) 205
14.1 J2EE-platformens dele 206
14.2 Webservere (servletter og JSP) 206
14.2.1 JSP-sider 206
14.2.2 HTML-formularer 207
14.3 RMI - objekter over netværk 208
14.3.1 Principper i kald over et netværk 208
14.3.2 Fjerninterfacet til serverobjektet 208
14.3.3 Implementationen af serverobjektet 209
14.3.4 Klientsiden - brug af fjerninterfacet 210
14.4 EJB-bønner 211
14.4.1 Kildeteksten i en bønne 211
14.4.2 Eksempel: Veksler 211
14.4.3 EJB-Containerens information om Veksler 212
14.5 Bruge en EJB-bønne 213
14.5.1 JNDI (Java Naming and Directory Interface) 213
14.5.2 Brug af Veksler-bønnen 213
14.5.3 Brug af Veksler fra JSP 214
14.6 Typer af EJB-bønner 214
14.6.1 Sessionsbønner 214
14.6.2 Entitetsbønner 215
14.6.3 Meddelelses-drevne bønner 215
14.6.4 Tilstandsfuld sessionsbønne: Brugeradgang 215
14.6.5 Opgaver 216
14.7 Entitetsbønner 217
14.7.1 Eksempel på en entitetsbønne 217
14.7.2 Fremfindingsmetoder 217
14.7.3 Idriftsætte bønnen 219
14.7.4 Bruge bønnen 220
14.7.5 Fremfinde entitetsbønner i EJB 1.1 220
14.7.6 EJB 2.0 og EJB Query language (EJBQL) 221
14.7.7 Opgaver 222
14.8 Transaktioner 223
14.8.1 JTS (Java Transaction Service) 223
14.8.2 Transaktioner i JDBC (resumé) 223
14.8.3 Transaktioner i en EJB-container 223
14.8.4 Deklarativ transaktionsstyring af metodekald 224
Anden del: Videregående objektorienteret programmering
15 Videregående OOP 227
15.1 Arv 228
15.1.1 Holdninger til arv 228
15.1.2 Modstrid mellem holdningerne 228
15.1.3 Øvelse 231
15.1.4 Nedarvinger, hvor funktionaliteten ikke udvides, men begrænses 231
15.2 Delegering (i stedet for arv) 232
15.2.1 At skjule nogle metoder 232
15.2.2 Modellering af roller 234
15.2.3 Resumé og konklusion 236
15.3 Specificér funktionalitet i et interface 236
15.3.1 Repetition af interfaces 236
15.3.2 Eksempel: Stak 237
15.3.3 Eksempel: Collections-klasserne 238
15.4 Konstanterklæringer i et interface 239
15.5 Markeringsinterface 239
15.6 Ansvarsområder 240
15.6.1 Eksempel på tildeling af ansvarsområder 240
15.6.2 Ekspert 242
15.6.3 Skaber 242
15.7 Lav kobling og høj kohæsion 243
15.7.1 Lav kobling 243
15.7.2 Høj kohæsion 243
15.7.3 Indkapsling 244
15.7.4 Indkapsling og pakker 244
15.8 GRASP 245
15.9 Introduktion til designmønstre 245
15.9.1 Designmønstre berørt i de følgende kapitler 245
16 Skabende designmønstre 247
16.1 Overordnet idé 248
16.1.1 Fabrikeringsmetoder 248
16.2 Fabrik 249
16.2.1 Eksempel: Image 249
16.3 Singleton 250
16.3.1 Eksempel: java.lang.Runtime 250
16.3.2 Eksempel: java.awt.Toolkit 250
16.3.3 Eksempel: Dataforbindelse 251
16.3.4 Singleton med sen initialisering 252
16.3.5 Singleton uden privat konstruktør 253
16.4 Abstrakt Fabrik 254
16.4.1 Eksempel: AdresseFabrik 254
16.4.2 Eksempel fra standardklasserne: AWT 256
16.5 Bygmester 257
16.5.1 Trinvis konstruktion 257
16.5.2 Eksempel på trinvis konstruktion: E-post 258
16.5.3 Eksempel på netværk af objekter: Funktioner 258
16.6 Prototype 259
16.6.1 Interfacet Cloneable 259
16.6.2 Overfladisk og dyb kopiering 259
16.6.3 Eksempel: Et tegneprogram 260
16.7 Objektpulje 262
16.7.1 Eksempel: Begrænsede resurser 262
16.7.2 Variation: Klient 'hænger', hvis puljen løber tør 263
16.7.3 Genbrug af tråde 264
16.7.4 Opgave: Objektpulje med objektfabrik 265
16.8 Større eksempel: Dataforbindelse 266
16.8.1 Specialiseringer af Dataforbindelse 267
16.8.2 Dataforbindelse over netværk 269
16.8.3 Dataforbindelse, der cacher forespørgsler 271
16.8.4 Endelig udgave af Dataforbindelse 272
17 Hyppigt anvendte designmønstre 273
17.1 Proxy 274
17.1.1 Simpelt eksempel: En stak, der logger kaldene 274
17.1.2 Variationer af designmønstret Proxy 275
17.1.3 Eksempel: Gøre data uforanderlige vha. Proxy 276
17.1.4 Doven Initialisering/Virtuel Proxy 277
17.1.5 Eksempel på Virtuel Proxy: En stak der først oprettes, når den skal bruges 277
17.2 Adapter 278
17.2.1 Simpelt eksempel 278
17.2.2 Anonyme klasser som adaptere 279
17.2.3 Anonyme adaptere til at lytte efter hændelser 280
17.2.4 Eksempel: Få data til at passe ind i en JTable 281
17.2.5 Ikke-eksempel: Adapter-klasserne 282
17.3 Iterator 283
17.3.1 Iteratorer i Collections-klasserne 283
17.3.2 Definere sin egen form for iterator 284
17.3.3 Iteratorer i JDBC 284
17.3.4 Iterator til at gennemløbe geometriske figurer 285
17.4 Facade 286
17.4.1 Eksempel: URL 286
17.4.2 Eksempel: Socket og ServerSocket 286
17.5 Observatør/Lytter 287
17.5.1 Eksempel: Hændelser 287
17.5.2 Eksempel: Kalender 288
17.6 Dynamisk Binding 289
17.6.1 JDBC og Dynamisk Binding 290
17.6.2 Eksempel: Fortolkning af matematikfunktioner 292
17.7 Opgaver 293
17.8 Løsninger 294
17.8.1 Dataforbindelseslogger 294
17.8.2 Designmønstre i JDBC 294
18 Andre designmønstre 295
18.1 Uforanderligt objekt (Immutable) 296
18.1.1 Uforanderlige objekter i standardbiblioteket 296
18.1.2 Eksempel - en uforanderlig punkt-klasse 297
18.1.3 Opgave 297
18.2 Fluevægt 298
18.2.1 Eksempel: Strenge 298
18.2.2 Eksempel: Dele UforanderligtPunkt-objekter 299
18.3 Filter 300
18.3.1 Eksempel: Kunde-filtre 300
18.3.2 Eksempel: Streng-filtre 302
18.3.3 Opgave 304
18.3.4 Eksempel: Output- og InputStream-klasserne 304
18.3.5 Avanceret: Læse vs. skrive data 306
18.4 Lagdelt Initialisering 307
18.4.1 Simpelt eksempel 307
18.4.2 Lagdelt initialisering vs. fabrikeringsmetode 307
18.4.3 Eksempel: URL-klassen 308
18.4.4 Avanceret lagdelt initialisering 308
18.4.5 Avanceret lagdelt initialisering og dynamisk binding i URL-klassen 308
18.5 Komposit/Rekursiv komposition 309
18.5.1 Analogi til byggeindustrien 309
18.5.2 Eksempel: Component/Container 312
18.5.3 Eksempel: Funktioner 313
18.6 Kommando 314
18.6.1 Eksempel 314
18.6.2 Avanceret: Variationer af designmønstret 316
18.6.3 Opgaver 316
18.7 Opgave: Designmønstre i standardbibliotekerne 317
18.7.1 Løsning: Designmønstre i standardbiblioteket 318
19 Model-View-Controller-arkitekturen 319
19.1 De tre dele af MVC 320
19.1.1 Modellen 320
19.1.2 Præsentationen 320
19.1.3 Kontrol-delen 321
19.2 Relationer mellem delene 321
19.2.1 Informationsstrøm gennem MVC 321
19.2.2 Opdatering af præsentationen - tre muligheder 322
19.2.3 A - Præsentationer undersøger modellen 322
19.2.4 B - Kontroldel underretter præsentationer 322
19.2.5 C - Modellen underretter præsentationer 323
19.3 Eksempel - bankkonti 323
19.3.1 Modellen 324
19.3.2 Præsentationer 325
19.3.3 Kontroldel 326
19.4 Model-View - "den lille MVC" 328
19.4.1 Adskillelse af præsentation og programlogik 328
19.5 Opgaver 328
19.5.1 Løsning 329
Stikordsregister 330
http://javabog.dk/ - af Jacob Nordfalk.
Licens og kopiering under Åben Dokumentlicens (ÅDL) hvor intet andet er nævnt (71% af værket).

Ønsker du at se de sidste 29% af dette værk (362838 tegn) skal du købe bogen. Så får du pæne figurer og layout, stikordsregister og en trykt bog med i købet.