javabog.dk  |  << forrige  |  indhold  |  næste >>  |  programeksempler  |  om bogen

22 Objektorienteret analyse og design

Indhold:

Kapitlet giver idéer til, hvordan en problemstilling kan analyseres, før man går i gang med at programmere.

Forudsætter kapitel 5, Nedarvning.

Når et program udvikles, sker det normalt i fem faser:

  1. Kravene til programmet bliver afdækket.

  2. Analyse - hvad det er for ting og begreber, programmet handler om.

  3. Design - hvordan programmet skal laves.

  4. Programmering.

  5. Afprøvning.

I traditionel systemudvikling er idealet, at de fem faser udføres en efter en, sådan at en ny fase først påbegyndes, når den forrige er afsluttet. Hver fase udmøntes i et dokument, som senere kan bruges til dokumentation af systemet.

Dette er i skarp modsætning til den måde, som en selvlært umiddelbart ville programmere. Her blandes faserne sammen i hovedet på programmøren, som skifter mellem dem, mens han programmerer. Resultatet er ofte et program, der bærer præg af ad-hoc-udbygninger og som er svært at overskue og vedligeholde - selv for programmøren selv1.

Den bedste udviklingsmetode findes nok et sted mellem de to ekstremer. Der dukker f.eks. altid nye ting op under programmeringen, som gør, at man må ændre sit design. Omvendt er det svært at programmere uden et gennemtænkt design.

Derfor er det ikke en god ide at bruge alt for lang tid på at lave fine tegninger og diagrammer - en blyantskitse er lige så god. Det er indholdet, der tæller, og ofte laver man om i sit design flere gange, inden programmet er færdigt. Dette gælder især, hvis man er i gang med at lære at programmere.

Dette kapitel viser gennem et eksempel (et Yatzy-spil) en grov skitse til objektorienteret analyse og design (forkortet OOAD). Det er tænkt som inspiration til, hvordan man kunne gribe sit eget projekt an, ved at følge de samme trin.

22.1 Krav til programmet

Vi skal lave et Yatzy-spil for flere spillere. Der kan være et variabelt antal spillere, hvoraf nogle kan være styret af computeren. Computerspillerne skal have forskellige strategier (dum/tilfældig, grådig, strategisk), der vælges tilfældigt.

Efter at spillet er afsluttet, huskes resultatet i et lager, hvorfra man kan generere en hiscore-liste.

22.2 Objektorienteret analyse

Analysen skal beskrive, hvad det er for ting og begreber, programmet handler om. Analyse-fasens formål er, at afspejle virkeligheden mest muligt.

22.2.1 Skrive vigtige ord op

Det kan være en hjælp først at skrive alle de navneord (i ental) eller ting op, man kan komme i tanke om ved problemet. Ud for hver ting kan man notere eventuelle egenskaber (ofte tillægsord) og handlinger (ofte udsagnsord), der knytter sig til tingen.

22.2.2 Brugssituationer

Brugssituationer (eng.: Use Case) beskriver en samling af aktører og hvilke brugssituationer de deltager i. Man starter helt overordnet og går mere og mere i detaljer omkring hver brugssituation.

Man kan hævde, at Yatzy-spillet er på grænsen til at være for simpelt til at lave brugsmønstre. Herunder to brugssituationer. Til venstre ses et meget overordnet, der beskriver to spillere og lageret som aktører. Til højre ses brugssituationen omkring en tur.

I stedet for at tegne flotte diagrammer kan man også blot beskrive hver brugssituation med almindelig tekst.

22.2.3 Aktivitetsdiagrammer

Aktivitetsdiagrammer beskriver den rækkefølge, som adfærdsmønstre og aktiviteter foregår i. Eksempel: Aktiviteten "definere deltagere i spillet":

Herunder ses et diagram for spillets gang, "en tur":

22.2.4 Skærmbilleder

Hvis skærmbilleder er en væsentlig del af ens program, er det en god hjælp at tegne de væsentligste, for at gøre sig klart, hvilke elementer programmet skal indeholde.

Disse kan med fordel designes direkte med et Java-udviklingsværktøj. Herved opnår man en ide om, hvad der er muligt, samtidig med at den genererede kode ofte (men ikke altid!) kan genbruges i programmeringsfasen.

Normalt kommer der en klasse for hvert skærmbillede, så man kan også med det samme give dem sigende navne.

Når programmet startes, skal vælges 2-6 spillere, hvoraf nogle kan være computerspillere:

TilfoejSpillervindue

Under selve spillet skiftes spillerne til at få tur.

For menneske-spillerne dukker dette billede op:

Turvindue

Man kan holde på terningerne ved at klikke på afkrydsningsfelterne.

Når spilleren er færdig (efter max 3 kast), skal han/hun vælge, hvilken regel der skal bruges, ved at klikke på den i blok-vinduet:

Blokvindue

22.3 Objektorienteret design

Designets formål er at beskrive, hvordan programmet skal implementeres.

I denne fase skal man bl.a. identificere de vigtigste klasser i systemet og lede efter ligheder mellem dem med henblik på nedarvning og genbrug.

22.3.1 Design af klasser

Et udgangspunkt for, hvordan man designer klasserne og objekterne i sit program, er at objekterne i programmet skal svare nogenlunde til de virkelige, oftest fysiske objekter fra problemstillingen.

Navneord (substantiver) i ental bliver ofte til klasser
Klassenavne skal altid være i ental
Udsagnsord (verber) bliver ofte til metoder

Det er vigtigt at huske, at dette kun er tommelfingerregler, som man ikke kan tage alt for bogstaveligt. Man bliver ofte nødt til at dreje tankegangen lidt for at få den til at passe i sit eget program.

F.eks. er en blyant eller et andet skriveredskab uundværlig i et virkeligt, fysisk Yatzy-spil (ellers kan man ikke skrive på blokken), men ingen erfarne programmører kunne drømme om at lave en Blyant-klasse og oprette Blyant-objekter, da blyanter slet ikke er vigtige for logikken i spillet.

22.3.2 Kollaborationsdiagrammer

Nyttige diagramformer under design er kollaborationsdiagrammer (samarbejdsdiagrammer), hvor man beskriver relationerne mellem klasserne eller objekterne på et overordnet plan.

Her er et eksempel:

Har-relationer giver et vink om, at et objekt har en reference til (evt. ejer) et andet objekt. F.eks.:

Når spilleren tjekker regler, sker det gennem blok-objektet. Man kan forestille sig, at spilleren løber gennem alle blokkens regler og ser, om der er nogle, der passer, som han ikke har brugt endnu. Tjek af regler er altså ikke en har-relation, for spilleren har ikke en variabel, der refererer til reglerne.

Visse steder er der mange slags objekter, der kan indgå i samme rolle. Det gælder for eksempel Spiller i diagrammet ovenfor. Så kan man tegne et separat diagram, der viser rollerne.

Er-en-relationer angiver generalisering eller specialisering (hvor nedarvning kan være en fordel). Det tegnes oftest med en hul pil.

Her er det lidt specielle, at én type spiller (nemlig Menneske) har et vindue tilknyttet. Dette vindue skal jo have adgang til at vise terningerne, så man skal huske at sørge for, at spillere har en reference til raflebægeret.

22.3.3 Klassediagrammer

Herefter kan skitseres klassediagrammer, hvor man fastlægger nedarvning (er-en-relationerne), de vigtigste variabler og referencerne mellem objekterne (har-relationer) og de vigtigste metoder.

Dette kan eventuelt tegnes med et UML-udviklingsværktøj (f.eks. købeudgaven af JBuilder eller TogetherJ, der kan hentes i en gratis prøveudgave på http://www.togethersoft.com ), der samtidig kan generere kode til programmeringsfasen.

Herunder ses, hvilke typer regler, der kunne forekomme.

Engelsk-dansk ordliste

CELLPADDING=4 CELLSPACING=0>

access

adgang, tilgang

applet

applet
miniprogram der kan køre i en netlæser, f.eks. Netscape

array

tabel, række, array

assignment

tildeling
a=5; er en tildeling af værdien 5 til variablen a

backslash

bagstreg ( \ - angives som '\\' i kildeteksten)

backspace

bak-tegnet ('\b')

block (statement)

blok
en gruppering af kommandoer. Starter med { og slutter med }

boolean

logisk (boolsk) værdi
sand (true) eller falsk (false).

browser

netlæser (f.eks. Netscape, Opera eller Internet Explorer)

bytecode

mellemkode
binær kode i en .class-fil, genereret af Java-oversætteren fra en .java-kildetekst.

carriage return

vognretur ('\r')

cast

typekonvertering
f.eks a = (int) f; konverterer værdien af f til et heltal før det tildeles a

character

tegn
f.eks 'b', '9', '?'

character set

tegnsæt

checked exception

undtagelse med tvungen håndtering

class

klasse
beskrivelsen af en objekttype

comment

kommentar
tekst der forklarer programmet. Ignoreres af maskinen.
En linje der starter med // bliver opfattet som en kommentar

compiler

oversætter
f.eks fra Java-kildetekst til bytekode

concatenation

sammensætning (af tegnstrenge)
f.eks "Hej " + "verden" sammensætter to strenge

condition

betingelse
a>5 er betingelsen i sætningen:
if (a>5) System.out.println("a er 6 eller derover");

constructor

konstruktør

debugging

fejlfinding/aflusning af et program
f.eks med trinvis gennemgang

declaration

erklæring
int a; er en erklæring af, at a er et heltal.

decrement

nedtælling

deprecated

frarådet, forældet

digit

ciffer

encapsulation

indkapsling

enumeration

opremsning (af nogle elementer)

event

hændelse

event driven

hændelsesstyret

exception

undtagelse

expression

udtryk
f.eks (a*5)/7

file

fil

floating-point number

kommatal
i Java er kommatalstyperne float og double.

graphical user interface

grafisk brugergrænseflade

hardware

maskinel

host

værtsmaskine

identifier

navn
f.eks a, public, class, int

increment

optælling

indentation

indrykning

inheritance

nedarvning

instance

instans, forekomst
en forekomst af en klasse er et objekt, f.eks er "Hej" en forekomst af String

integer

heltal
i Java er heltalstyperne int, long, short og byte.

interface

grænseflade

interpreter

fortolker

label

etikette

library

bibliotek

listener

lytter (efter hændelser)

location (in memory)

plads (i lager)

loop

løkke

memory

lager

method

metode
f.eks har System.out metoden println()

nested

indlejret

newline

linjeskift ('\n')

open source

åben kildekode/kildetekst
at kildeteksten er frit tilgængelig for forbedringer

overloading

overlæsning, navnesammenfald af metoder

override

tilsidesætte/omdefinere/overstyre/overskrive metode i en nedarvet klasse

package

pakke

parse

analysere, fortolke

pointer

reference/peger/hægte til et objekt et sted i lageret

polymorphism

polymorfi

reference

reference/peger/hægte til et objekt et sted i lageret

rounding

afrunding

scope

virkefelt

service

tjeneste

software

programmel

source code

kildetekst, kildekode

statement

sætning, ordre, kommando
f.eks System.out.println("Hej"); eller a = 5;

stack trace

stakspor

stream

strøm

string

tekststreng

subclass

underklasse, subklasse, afledt klasse, nedarvet klasse

test

afprøvning

thread

tråd

token

brik, bid

truncation

nedrunding (3.7 bliver rundet ned til 3.0)

typecast

typekonvertering
f.eks a = (int) f; konverterer værdien af f til et heltal før det tildeles a

underscore

understreg ('_' )

unchecked exception

undtagelse uden tvungen håndtering

variable

variabel

visibility

synlighed

whitespace

blanktegn
mellemrum, tabulatortegn og linjeskift er blanktegn

Stikordsregister

STYLE="background: transparent">

A

abstract 292

abstrakte klasser 247, 292

ActionListener 224, 226

actionPerformed() 196, 224, 226

adaptere 228

addElement() 81, 93

adgang til metoder/variabler 154

adgangskontrol 154

AffineTransform 185

afkrydsningsfelter 198

afledt klasse 125

after() 92

aktivitetsdiagrammer 306

aktør 305

alternativudtryk 63

analyse 305

AND 57

anførelsestegn 91

animationer 182

anonyme klasser 228, 298

antialias 184

apostrof 91

append() 94

Applet 189

argumenter 71

ArithmeticException 231

aritmetiske operatorer 56

array 166

array versus Vector 169

ArrayIndexOutOfBoundsException 166, 230

ArrayList 80, 93, 140, 169

arv 124, 217

associative afbildninger 97

AudioClip 189

auto-commit 288

autoboxing 93, 96

AWT-komponenter 207

B

baggrundsfarve 177, 198

bagstreg 91

bak 91

bankkonto 122

BasicStroke 186

basisklasse 125

before() 92

beregning af formel 162

beregningsudtryk 34

betinget udførelse 39

binær læsning og skrivning 246


binære talsystem 244

binært til tegnbaseret 249

blinkeri 183

blok 42, 117

BlueJ 27, 119

Boks 100, 103, 105, 111, 141, 156, 240

boolean 55

boolesk variabel 38

booleske udtryk 40

BorderLayout 203

Borland JBuilder 23

break 64

browser 188

brugergrænseflade 194

brugssituationer 305

buffer 246

BufferedReader 243, 249

Button 198, 225

byte 55

ByteArrayInputStream 249

bytekode 21, 32

C

CallableStatement 289

Canvas 200

catch 231, 238

char 55

Character.isDigit() 157

Character.isLetter() 158

Character.isLowerCase() 158

CharArrayReader 249

Checkbox 198

Checked-filtreringsklasser 249

checksum 249

Choice 198

ClassCastException 131, 231

ClassNotFoundException 233

CLASSPATH 151

clone() 276

close() 242, 251

CODEBASE 189, 192

commit 288

Comparator 214

ComponentListener 226

Connection 284

containere 202

continue 64

cosinus 37

createStatement() 284

Cursor 177

D

database 284

databasedriver 284, 289

DatabaseMetaData 290

datakompression 250

datastrømme 242, 247

Date 85, 92

dekoration 174

design af klasser 308

design-fane 194

destroy() 190

Dialog 202

dialog-boks 202

division 35

do-while-løkken 63

double 35, 55

double buffering 184, 207

Double.parseDouble() 157, 244

drawImage 176

drawImage() 175

drawLine() 175

drawString 174

drawString() 175

drejninger 185

drevbogstaver 252

DriverManager 284

E

Eclipse 26

egenskaber 198

eksekverbare jar-filer 152

eksplicit typekonvertering 48, 56, 140

eksponentiel notation 244

elementtype 82, 93

equals() 76, 95, 139

er-en-relation 125, 133, 145, 309

Error 239

esperanto-dansk-ordbog 98

etikette 199

Event 220

eventyrfortælling 82

Exception 238

executeQuery() 285

extends 124

F

FalskTerning 124, 126

fange undtagelser 233

farve 175

fejl 50

fejlmeddelelse 51

Felt (matadorspil) 132, 133, 293






File 252

FilenameFilter 298

FileNotFoundException 233

FileReader 243, 248

FileSystem.listRoots() 252

FileWriter 242

filhåndtering 252

filtrering af filnavne 298

filtreringsklasser 249

final 148, 293

finally 240

fjerninterface 278

flerdimensionale arrays 171

flertrådet programmering 264

float 55

FlowLayout 201, 203

flueben 198

flush() 254

FocusListener 226

Font 176

for-løkken 45, 82

forberedt SQL 289

forbinde til en port 254

forgrundsfarve 177, 198

formateringsstreng 58

formelberegning 162

formen af en klasse 117

forpligtende SQL 288

forældreklasse 125

fraktaler 164

Frame 177, 202

fremviser 188

FTP 258, 259

G

Gade (matadorspil) 135, 144

GeneralPath 185

getConnection() 284

getTime() 92

grafikbuffer 184, 207

grafisk brugergrænseflade 194, 220

grafisk vindue 174

grafiske komponenter 194

Graphics 175

Graphics2D 185

GridBagConstraints 205

GridBagLayout 204

Grund (matadorspil) 143

grupper af klasser 150

GUI 194

GZIP-filtreringsklasser 250

H

har-relation 108, 114, 122, 134, 145, 309

HashMap 97

Helle (matadorspil) 133

heltal 33, 55

heltalsdivision 56

hexadecimale talsystem 244

hjem 252

hjemmesider 188

HTML-dokument 188

HTTP-tjeneste 254

hændelser 220

I

if 40

if-else 41

ild 94

Image 176

implementere interface 210, 217

implicit typekonvertering 49, 55

import 150

import af klasser 72

indexOf() 76

indkapsling 103, 285, 295

indlejrede løkker 46

indlæsning fra tastatur 234

Indlæsning fra tastaturet 40, 59, 234, 244

indre klasser 295

indrykning 42

indtastningsfelt 199

init() 190

initComponents() 195

initialisering uden for konstruktør 147

InputStream 247

InputStreamReader 249

insert() 94

insertElementAt() 81, 93

Insets 174, 177, 205

instruktioner 31

int 33, 55

Integer.parseInt() 157, 244

interaktive programmer 196

interface 210

InterruptedException 265

IOException 233

ItemListener 226

J

J2SE 27

jar-filer 152

Java Studio Creator 25

Java-arkiver 152

java.applet 150, 188

java.awt 72, 150, 174

java.io 150, 247

java.lang 150

java.net 150, 255

java.rmi 150, 278, 282

java.sql 150, 285

java.text 150

java.util 81, 150

Java2D 184

javac 32

javadokumentationen 87

javax.swing 150, 207

jbInit() 195

JBuilder 23

JDBC 284

JDeveloper 24

JDK 27

JDK 1.5 41, 82, 96

JDK1.5 58

K

kaste undtagelser 239

KeyListener 225, 226

kildetekst 31

klassediagram 114, 132, 145, 309

klassemetode 60

klasser 68, 87, 116

klassevariabler og -metoder 156, 160

klipning 175

kollaborationsdiagrammer 308

kommandolinie-parametre 168

kommatal 35, 55

kommentarer 30, 53

komponenter 194

komprimering 250

konstruktør 105

konstruktør i underklasse 141, 143

konstruktører 72, 116, 148

Konto 122

koordinater 174

kopiere en fil 246

Kurvetegning 178

kvadratrod 37

køretidsfejl 51

L

Label 199

layout 194

layout-manager 203

length() 76

letvægtkomponenter 207

LineNumber-filtreringsklasser 249

lineær transformation 185

linieskift 91

Linjelytter 228

Linjetegning 221, 223

LinjetegningAnonym 299

LinjetegningIndre 296

List 200

liste af objekter 80

logisk variabel 38

logiske fejl 50

logiske udtryk 40, 57, 62

lokale klasser 297

lokale variabler 101, 156, 158

long 55

lukke vindue 174, 227

LukProgram 227

lytte på en port 256

lytter 220

læsLinje() 234

læsTal() 234

løkker 43

M

main()-metoden 31, 101, 158, 168

manifest-fil 152

matadorspil 132

matematiske funktioner 37

mellemvariabel 75

memappe 252

MenuBar 206

metadata 255, 290

metodehovede 101, 118

metodekald 38, 70, 71

metodekrop 102

metoder 38, 68, 73, 116, 160

metoder i vinduer 177

metoders returtype 74

Microsoft 22

modal 202

MouseAdapter 228

mouseClicked() 227

mouseDragged() 223, 227

MouseListener 220, 227

MouseMotionListener 223, 227

mouseMoved() 223, 227

mousePressed() 227

mouseReleased() 220, 227

multipel arv 217

multiplikation 35

Muselytter 220

musens udseende 177

N

navngivne løkker 64

navngivningsregler 55

nedarving 217

nedarvning 124

nedtælling 63

NetBeans 25

netlæser 188

new-operatoren 69

next() 285

NOT 57

notify() 270

NotSerializableException 273

NSidetTerning 112

null 72, 134, 231

null-layout 203

NullPointerException 231

nulpunkt 174

nøgle 97

nøgleindekserede tabeller 97

nøgleordet static 156

nøgleordet super 126, 141

nøgleordet this 111

O

Object (stamklasse) 139

ObjectOutputStream 249, 272

objekter 68, 87

objektorienteret analyse 305

objektorienteret design 308

objektreferencer 159

objektrelationer 108, 122

objektvariabler 70, 100, 117, 156, 160

ODBC 284, 289

OOAD 304

open source 28

operatorer 56

oprette objekt 69

optimering 95, 246, 288

optælling 63

OR 57

Oracle 24, 284

OutputStream 247

OutputStreamWriter 249

oversætte 32

oversætterfejl 50

P

paint() 174

pakker 72, 150

Panel 202

parametervariabler 158

parametre 71, 87, 118, 158

pause 137

Person 114

Piped-filtreringsklasser 249

platformuafhængig 21, 32, 207

platformuafhængige filnavne 252

Point 69, 88

Polygon 176

polymorfe variabler 128

polymorfi 129, 132, 138, 169, 214

prepareCall() 289

PreparedStatement 289

prepareStatement() 289

primtal 60

printf() 58

printStackTrace() 232

PrintWriter 242

prioritet 270

private 103, 154

protected 148, 154

public 103, 154

Pushback-filtreringsklasser 249

R

radioknapper 198

RandomAccessFile 252

readLine() 255

readObject() 272, 276

Rectangle 72, 89

Rederi (matadorspil) 134, 144

reference-typekonvertering 131

referencer 159

regneudtryk 34

rekursion 161, 252

relationer mellem objekter 108, 122

Remote 278

removeElementAt() 81

repaint() 177, 182

replace () 76

restdivision 56

ResultSet 285, 290

ResultSetMetaData 290

return 102, 116

returtype 74, 87, 101, 118

reverse() 94

RMI 278

rmiregistry 279

rollback() 288

rotation 185

run() 264

Runnable 264

række af data 166

S

sammenligning af strenge 79

sammenligningsoperatorer 40, 57

sammensætte strenge 34

Scanner 40, 244, 245

semaforer 270

serialisering 272, 278

Serializable 273

ServerSocket 256

Shape 185

short 55

sikkerhed 192

simple typer 55

sinus 37

skaleringer 185

skilletegn 158

skjule variabler/metoder 103

skrifttype 177, 198

skrive til en tekstfil 242

sleep() 137, 265

SnakkesagligPerson 264

Socket 254

SocketException 233

sortering 214

specialtegn i strenge 91

Spiller (matadorspil) 136

sprogfejl 50

SQL 284

SQLException 233, 284

stakspor 232

stamklasse 125

stamklassen Object 139

standardbiblioteket 87, 150, 157

standardkonstruktør 106, 116, 142

standardp 150

Start (matadorspil) 133

start() 190, 264

Statement 284

static 156

statistik 167, 245

statusfelt 189

sti-separatortegn 252

stop() 190

stoppe grafisk program 174

stoppe programudførelsen 158

strenge 76

String 76, 90

StringBuffer 94

StringBuilder 94

StringReader 248

subklasse 125

subrutiner 158

substring() 76

super 126, 141, 144

superklasse 125

sværvægtskomponenter 207

Swing-komponenter 207

switch 65

synchronized 269

synlighed af metoder/variabler 154

syntaksfejl 50

System.exit() 158

System.out 157, 244

T

tabulator 91

talsystem 244

Tastatur 40, 59, 234

tastetryk 225

Tegnbar 210

tegne grafik 175

tegneområde 200

tekstdata 248

tekststrenge 76

Terning 107

TextArea 199

TextField 199

TextListener 227

this 111, 122, 137, 148

Thread 264

Thread.sleep() 137, 265

throw 239

Throwable 239

throws 233

tildeling 33

tilsidesætte variabler 148

titel på vindue 177

tjeneste 254

TogetherJ 309

toLowerCase() 76

toString() 139

toUpperCase() 76

transaktion 288

transformation 185

transient 273

trappeudjævning 184

trim() 90

trinvis gennemgang 47

try-catch-blok 231, 237

tråde 264, 300

typekonvertering 48, 55, 131, 140

tællevariabel 44

U

udbygge en klasse 124

udjævnede farveovergange 184

uendelige løkker 47

uforanderlig 77

UML-notationen 69

UML-udviklingsværktøj 309

underklasse 125

undtagelser 51, 230

Unified Modelling Language 69

unikode 91

UnknownHostException 233

unreported exception 233

update() 183

URL 189

URL-klassen 257

user.dir 252

user.home 252

V

valglister 198

variabel-overskygning 148

variabler 33

variabler i interface 218

vente 137

vindue 174

virkefelt 158

virtuel maskine 21

vognretur 91

void 87, 116

vridninger 185

værditypekonvertering 48, 55

værtsmaskine 254

W

wait() 270

webserver 256, 266

while-løkken 43

Window 202

WindowListener 227

writeObject() 272, 276

Y

Yatzyspil 305

ydre klasse 295

Z

Zip-filtreringsklasser 249

Ændringer i tredje udgave

I de 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 tredje udgave

Selvom der er kommet meget stof til, er sidetallet ikke øget. I stedet er de eksisterende sider blevet bedre udnyttet.

1.2.2 Stor opbakning

1.3 Programmeringsværktøjer til Java

2.3.1 if-else

3.4.6 Opgaver

3.6.2 Opdeling af strenge (klassen StringTokenizer)

3.9.3 Klassen String

3.9.7 Klassen ArrayList

3.10.2 Nøgleindekserede tabeller (klassen HashMap)

5.2.4 Hvilken vej er en variabel polymorf ?

5.5.1 Konsekvenser

6.9.3 Indkapsling med pakker

9.3.1 Opgave: Grafisk Matador-spil

9.4.1 Simple animationer

10.5.3 Begrænsninger i ældre netlæsere

11.4.5 Dialog og mere??

11.1 Generering med et værktøj

15.3 Indlæsning fra tastatur

15.4 Analysering af tekstdata

15.4.1 Konvertere strenge til tal

15.4.2 Samlet eksempel: Statistik

17.4 Avanceret

22.2.2 Brugssituationer

22.3.1 Design af klasser

introducere og snakke om ny for-løkke et sted!

else-if beskrevet (OK)

ArrayList i stedet for Vector, HashMap i stedet for Hashtable, Iterator i stedet for Enumeration (OK?)

Brug at generics (f.eks. ArrayList<String>, dvs ArrayList der KUN kan indeholde strenge) (OK?)

den sidste printf-sætning formateres et Date-objekt (dato og tid). Her er nogle af typerne:

xxx flere?

xxx nævn om String.format()

xxx d

OOAD

xxx snak om brugssituationer skrevet på listeform

xxx snak om ansvarsområder

xxx Husk at sætte linjenummerering i typografi "kode m linienr." før ny udgave udgives

1En helt anden arbejdsform, der prøver at gå med den umiddelbare impuls til at programmere med det samme, er ekstremprogrammering. I denne form beskriver man først kodens ønskede opførsel i form af testtilfælde, der kan afprøves automatisk gennem hele forløbet. Så programmerer man to og to foran samme tastatur, indtil testene er opfyldt. Til sidst lægger man sig fast på et fornuftigt design og omstrukturerer programmet til at passe med det valgte design.

javabog.dk  |  << forrige  |  indhold  |  næste >>  |  programeksempler  |  om bogen
http://javabog.dk/ - af Jacob Nordfalk.
Licens og kopiering under Åben Dokumentlicens (ÅDL) hvor intet andet er nævnt (82% af værket).

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