I denne bog kan du lære tre ting:
Programmering. Bogen starter fra grunden af, men har du ikke programmeret før, bør du være rede til at gøre en indsats, dvs. løbende lave en række små programmer for at øve dig i stoffet. Det forudsættes, at du har kendskab til computere på brugerniveau, dvs. at du uden problemer kan bruge internet, tekstbehandling og andre programmer og problemfrit navigere og flytte og kopiere filer i Windows, Linux eller et andet styresystem. En smule kendskab til matematik er en fordel, men bestemt ikke et krav.
Objektorienteret programmering. Bogen arbejder grundigt med begreberne omkring objektorienteret programmering (forkortet OOP) og har mange praktiske eksempler på denne måde at programmere på. Den introducerer og anvender løbende relevante dele af UML-notationen, som er meget anvendt i objektorienteret analyse og design og beslægtede fag.
Java. Programmeringssproget Java har en række faciliteter, som kan lette programmeringen meget. Har du - som mange andre - lært Java ved at prøve dig frem, kan det overblik, der præsenteres i denne bog, hjælpe, samtidig med at hvert kapitel slutter af med at gå i dybden med avancerede emner.
Ideen til bogen opstod i efteråret 2000 i forbindelse med, at jeg underviste på et kursus i objektorienteret programmering og Java på IT-Diplomuddannelsen på Ingeniørhøjskolen i København. Jeg savnede en lærebog på dansk og gik sammen med Troels Nordfalk og Henrik Tange i gang med at skrive mine egne noter. Det er blevet en praktisk orienteret lærebog, krydret med mindre, men komplette, eksempler.
Størstedelen af bogen (opgaver og avancerede emner er skåret væk) findes også på adressen http://javabog.dk, der frit kan bruges af alle, der vil lære Java. Bidrag til bogen og hjemmesiden er meget velkomne: Skriv til nordfalk@mobilixnet.dk
På http://javabog.dk kan du også hente programeksemplerne fra bogen.
Hvert emne behandles i et særskilt kapitel. Det er i en vis udstrækning muligt at læse kapitlerne uafhængigt af hinanden.
Det anbefales at læse kapitel 2, 3, 4 og 5 i rækkefølge. Derefter kan man vælge, om man vil:
tage nogle af de valgfrie kapitler (6, 7 og 8)
gå i gang med interfaces, grafik og brugergrænseflader (9, evt. 10, 11, 12, evt. 13)
arbejde med undtagelser (eng.: exceptions), filer og netværk (14, 15 og 16)
Her er en oversigt over kapitlerne (midtersøjle), og hvilke kapitler de forudsætter (venstre søjle). Hvis et kapitel er forudsat i parentes, betyder det, at visse eksempler eller opgaver forudsætter det, men man kan godt klare sig uden.
|
Forudsætter |
Kapitelnummer og -navn |
Er nødvendig for |
|---|---|---|
|
|
2 Basal programmering |
Alle efterfølgende |
|
2 |
3 Objekter |
Alle efterfølgende |
|
3 |
4 Definition af klasser |
Næsten alle efterfølgende |
|
4 |
5 Nedarvning |
Næsten alle efterfølgende |
|
Valgfrie emner |
||
|
4 |
6 Pakker |
Ingen |
|
4 |
7 Lokale, objekt- og klassevariabler |
Ingen |
|
3 (5) |
8 Arrays |
Ingen |
|
Grafik og brugergrænseflader (klient-programmering) |
||
|
3 (5) |
9 Grafiske programmer |
11 |
|
9 |
10 Appletter |
(12 og 13) |
|
9 (5) |
11 Grafiske standardkomponenter |
13 |
|
5 (10) |
12 Interfaces - grænseflade til objekter |
13, 17, 18, 19, 21 |
|
11, 12 (10) |
13 Hændelser i grafiske brugergrænseflader |
21 |
|
Filer og netværk (server-programmering) |
||
|
4 (5) |
14 Undtagelser og køretidsfejl |
15 |
|
14 |
15 Datastrømme og filhåndtering |
16 + 18 |
|
15 |
16 Netværkskommunikation |
|
|
Videregående emner |
||
|
12 (16) |
17 Flertrådet programmering |
Ingen |
|
15 (12) |
18 Serialisering af objekter |
19 |
|
12, 18 |
19 RMI - objekter over netværk |
Ingen |
|
14 |
20 JDBC - databaseadgang |
Ingen |
|
5, 12 (13, 17) |
21 Avancerede klasser |
Ingen |
|
5 |
22 Objektorienteret analyse og design |
Ingen |
Hvert kapitel starter med en oversigt over indholdet, og hvilke andre kapitler det forudsætter, sådan at man altid har overblik over, om man har de nødvendige forudsætninger.
Så kommer hovedteksten, der introducerer emnerne og kommer med programeksempler, hvor de anvendes.
De fleste kapitler har herefter
Test dig selv, hvor man kan afprøve, om man har fået fat i de vigtigste ting i kapitlet.
Resumé, som i kort form repeterer de vigtigste ting.
Appendiks giver en komplet oversigt
over de fakta, som relaterer sig til kapitlet.
Det er beregnet
til at blive læst sammen med kapitlet, men er også
velegnet til senere opslag.
Avanceret,
der handler om de mere avancerede ting i relation til kapitlets
emne.
Disse kan springes over ved første læsning,
men kan være nyttige at kigge på senere hen. Resten af
bogen forudsætter ikke, at man har læst de avancerede
afsnit.
Denne bog koncentrerer sig om OOP og Java i praksis. Den starter med det helt grundlæggende og kommer i avanceret-afsnittene til bunds i mange aspekter af stoffet. I OOP går den "hele vejen" og får dækket klasser og objekter, indkapsling, arv og polymorfi.
Der er mange måder at undervise i Java på, og bogen giver mulighed for, at underviseren selv vælger, hvilken del af stoffet han vil lægge vægt på i sit kursus:
Objektorienteret programmering: kapitel 2, 3, 4, 5 og derefter 9, 11, 12, 13 (kapitel 7 om klassevariabler kan komme sent i kurset, så eleverne ikke fristes til at bruge dem som "globale variabler").
Strukturel programmering: kapitel 2, dernæst dets avanceret-afsnit om do-while, switch, tastaturindlæsning og klassemetoder, kapitel 3 om brug af objekter, kapitel 8 om arrays, kapitel 4 om klasser, kapitel 7 om klassevariabler.
Sproget Java: kapitel 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 osv. i rækkefølge.
Hurtigt i gang med at lave grafiske programmer: kapitel 2, det meste af 3 og derefter 9, 11 og 12 om grafik, grafiske standardkomponenter og hændelser.
Bogen er egnet til kursusbrug.
Der findes en (gratis) samlet pakke, hvor underviseren får:
transparenter, der supplerer bogen
forslag til lektionsplan og opgaver
vejledende opgavebesvarelser
Skriv til nordfalk@mobilixnet.dk, hvis du holder et kursus og er interesseret i undervisningspakken.
I det sidste år har jeg samlet på rettelser, kommentarer og forslag til bogen, og derudover selv undervist i den. Rettelserne og forbedringerne er næsten alle ført ind i anden udgave:
Kapitel 1, Introduktion er opdateret og udvidet med afsnit om hjælp og videre læsning.
Kapitel 2, Basal programmering er udvidet med bedre tastaturindlæsning og navngivne løkker.
Kapitel 3, Objekter er udvidet med SimpleDateFormat.
Kapitel 4, Definition af klasser og kapitel 5, Nedarvning er blevet omstruktureret og det svære stof (relationer mellem objekter og polymorfi) spredt mere ud.
Kapitel 6, Pakker er udvidet med eksekverbare jar-filer.
Kapitel 7, Lokale, objekt- og klassevariabler er udvidet med 4 sider om rekursion, fortolkning af formler og tegning af fraktaler.
Det gamle kapitel 9 om appletter og grafik er blevet delt op i kapitlel 9, Grafiske programmer og kapitel 10, Appletter med langt bedre forklaring af grafiske vinduer (Frame), eksempel på brug af Java2D, ældre netlæsere og Java-plugin.
Kapitel 11, Grafiske standardkomponenter har flere eksempler på forskellige layout, Swing-komponenter og forskelle mellem Swing og AWT.
Kapitel 15, Datastrømme og filhåndtering er udvidet med binær læsning og skrivning, optimering af ydelse og manipulering af filer.
Kapitel 16, Netværkskommunikation er kraftigt udvidet med URL-klassen og et eksempel på en FTP-klientklasse.
Kapitel 18, Serialisering er udvidet omkring serialisering af det samme objekt flere gange, og hvordan man selv styrer, hvordan serialiseringen foregår.
Kapitel 19, RMI er udvidet med eksempel på server og klient på to forskellige maskiner.
Kapitel 20, JDBC - databaseadgang starter nu med et simpelt eksempel og er udvidet med diskussion af optimering, metadata, drivere, transaktioner (commit) og opdatering og navigering i ResultSet-objekter.
De gamle kapitel 20 og 21 er slået sammen i kapitel 21, Avancerede klasser.
En engelsk-dansk ordliste er tilføjet.
Selvom der er kommet meget stof til, er sidetallet ikke øget. I stedet er de eksisterende sider blevet bedre udnyttet.
Min bror Troels' kritik og bidrag har været uundværlige, og bogen afspejler mange af hans holdninger og tanker (som også er blevet mine) om objektorienteret programmering.
Tak til Henrik Tange, Jakob Bendsen, Peter Sestoft og andre, som har ladet mig bruge deres materiale.
Tak til Torben Vaarby Laursen for at læse korrektur på manuskriptet til 1. udgave.
Sidst men ikke mindst - tak til Linux-samfundet for at lave et styresystem, der styrer!
Denne bog er skrevet med OpenOffice.org under Linux-Mandrake. Begge er projekter med åben kildekode (Open Source) og kan gratis hentes på henholdsvis www.openoffice.org og www.linux-mandrake.com.
Bonan plezuron legi la libron!
(det er
esperanto og betyder "god fornøjelse med at læse
bogen")
Jacob Nordfalk
Espergærde, juli 2002.