Indhold:
Analyse: Finde vigtige ord, brugssituationer, aktivitetsdiagrammer og skærmbilleder
Design: Kollaborationsdiagrammer og klassediagrammer
Eksempel: Skitse til et yatzy-spil
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:
Kravene til programmet bliver afdækket.
Analyse - hvad det er for ting og begreber, programmet handler om.
Design - hvordan programmet skal laves.
Programmering.
Afprøvning.
Traditionel systemudvikling bygger vandfaldsmodellen: 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 de senere faser skal følge og som kan bruges til dokumentation af systemet.
Dette er i skarp modsætning til den måde, som en selvlært umiddelbart programmerer på. 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.
Nu til dags stræber mange mod en arbejdsform, hvor man på ca. fire uger (en iteration) udfører et "mini-vandfald" hvor alle de fem faser indgår. Det, man derved lærer, bruges så til at forfine kravene, analysen, designet og programmet, i næste iteration. Denne udviklingsform kaldes "Unified Process".
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.
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.
Krav skal afdække, kommunikere og huske behovene. Lav en nummereret kravsliste:
K1) Yatzy skal understøtte 2-6 spillere
K2) Yatzy skal tjekke at reglerne er overholdt
K3) Yatzy skal kunne styre nogle af spillerne
K4) Yatzy skal lagre spillene når de er afsluttet
K5) Yatzy skal kunne vise en hiscore-liste
K6) Yatzy skal (kun) være på dansk
Analysen skal beskrive, hvad det er for ting og begreber, programmet handler om. Analysefasens formål er, at afspejle virkeligheden mest muligt.
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), knyttet til tingen.
Yatzyspil - antal spillere
Terning - værdi, kaste, holde
Raflebæger - kombination, ryste, holde
Blok - skrive spillernavn på, skrive point på
Spiller - navn, type (computer/menneske)
Computerspiller - strategi (dum/tilfældig, grådig, strategisk)
Menneskespiller
Regel (eller mulighed eller kriterium) - opfyldt, brugt, antal point
Lager - hiscore
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. Herunder to brugssituationer. Til venstre ses et meget overordnet, der beskriver to spillere og lageret som aktører. Til højre ses brugssituationen for en tur.

I stedet for diagrammer kan man
også blot beskrive brugssituation efter et skema:
|
Primær aktør |
Brugeren eller systemet, det handler om i denne situation |
|
Interessenter |
Andre aktører, der har sekundær interesse i denne situation |
|
Startsituation |
Hvad skal være opfyldt før brugssituationen forekommer |
|
Slutsituation |
Resultatet af at brugssituationen udføres |
|
Hovedscenarie |
Sekvensen af handlinger, der fører aktøren fra startsituation frem til slutsituationen |
|
Afvigelser |
Afvigelser og undtagelser fra hovedscenariet |
|
Åbne spørgsmål |
Problemstillinger som der først tages stiling til på et senere tidspunkt (hvis man anvender en udviklingsmodel som f.eks. Unified Process hvor analysen gentages senere i udviklingsforløbet) |
Her er et eksempel:
Brugssituation "SpilEnTur" i Yatzy
|
Primær aktør |
Brugeren, hvis tur det er |
|
Interessenter |
Systemet |
|
Startsituation |
Det er brugerens tur |
|
Slutsituation |
Bruger har valgt felt i blokken og alle pointtal er opdateret |
|
Hovedscenarie |
|
|
Afvigelser |
2a. Alle terninger er holdt: Advarselsvindue dukker op: "Vil du afslutte kastene?" |
|
Åbne spørgsmål |
- |
Man kan hævde, at Yatzy-spillet er på grænsen til at være for simpelt til at lave brugssituationer. Her er et mere realistisk eksempel på en brugssituation i et kurvetegningsprogram:
Brugssituation "TegnGraf" i et kurvetegningsprogram
|
Primær aktør |
Bruger |
|
Interessenter |
- |
|
Startsituation |
Et vindue skal være åbent og en funktion skal være tastet ind |
|
Slutsituation |
Grafens støttepunkter er beregnet og grafen vises i vinduet |
|
Hovedscenarie |
|
|
Afvigelser |
3a: Brugeren afbryder indtastning
3b: Brugeren har indastet andet
end tal i startværdi eller slutværdi
|
|
Åbne spørgsmål |
Hvordan tegnes uendelig? F.eks. 1/x ? Skal man kunne se flere grafer samtidig? |
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":

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 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
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.
Et udgangspunkt for, hvordan man designer klasser, 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
Typisk har hver
klasse 3-5 ansvarsområder
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.
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:
Raflebægeret har en reference til terningerne, ellers kan det ikke kaste dem. Terningerne kender ikke til raflebægerets eksistens.
Blokken har nogle regler (en for hver række). Reglerne kender ikke til blokkens eller spillerens eksistens.
Blokken har nogle spillere (en for hver søjle). Spillerne ved, de hører til en blok, hvor deres resultater skal skrives ind på.
Blokkens data skal vises i et vindue. Der er brug for, at blokken kender til Blokvindue, vinduet, der viser blokken på skærmen, så det kan gentegnes, når blokken ændrer sig. Men vinduet har også brug for at kende til blokken, som indeholder de data, det skal vise.
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.
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 som samtidig kan generere kode til programmeringsfasen, f.eks. Oracle JDeveloper, ArgoUML, der kan hentes på http://argouml.tigris.org/, eller Poseidon for UML, på http://www.gentleware.com/:
Til højre ses, hvilke typer regler, der kunne forekomme.
|
access |
adgang, tilgang |
|
applet |
applet |
|
array |
tabel, række, array |
|
assignment |
tildeling |
|
backslash |
bagstreg ( \ - angives som '\\' i kildeteksten) |
|
backspace |
bak-tegnet ('\b') |
|
block (statement) |
blok |
|
boolean |
logisk (boolsk) værdi |
|
browser |
netlæser (f.eks. Netscape, Opera eller Internet Explorer) |
|
bytecode |
mellemkode |
|
carriage return |
vognretur ('\r') |
|
cast |
typekonvertering |
|
character |
tegn |
|
character set |
tegnsæt |
|
checked exception |
undtagelse med tvungen håndtering |
|
class |
klasse |
|
comment |
kommentar |
|
compiler |
oversætter |
|
concatenation |
sammensætning (af
tegnstrenge) |
|
condition |
betingelse |
|
constructor |
konstruktør |
|
debugging |
fejlfinding/aflusning af et
program
|
|
declaration |
erklæring |
|
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 |
|
file |
fil |
|
floating-point number |
kommatal |
|
graphical user interface |
grafisk brugergrænseflade |
|
hardware |
maskinel |
|
host |
værtsmaskine |
|
identifier |
navn |
|
increment |
optælling |
|
indentation |
indrykning |
|
inheritance |
nedarvning |
|
instance |
instans, forekomst |
|
integer |
heltal |
|
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 |
|
nested |
indlejret |
|
newline |
linjeskift ('\n') |
|
open source |
åben kildekode/kildetekst |
|
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 |
|
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 |
|
underscore |
understreg ('_' ) |
|
unchecked exception |
undtagelse uden tvungen håndtering |
|
variable |
variabel |
|
visibility |
synlighed |
|
whitespace |
blanktegn |
A
abstract 292
abstrakte klasser 250, 292
ActionListener 226, 228
actionPerformed() 196, 226, 228
adaptere 230
addElement() 81, 93
adgang til metoder/variabler 154
adgangskontrol 154
AffineTransform 183
afkrydsningsfelter 198
afledt klasse 125
after() 92
aktivitetsdiagrammer 307
aktør 305
alternativudtryk 63
analyse 305
AND 57
anførelsestegn 91
animationer 181
anonyme klasser 230, 298
antialias 182
apostrof 91
append() 94
argumenter 71
ArithmeticException 233
aritmetiske operatorer 56
array 166
array versus ArrayList 169, 172
ArrayIndexOutOfBoundsException 166, 232
ArrayList 80, 93, 140, 169
ArrayList 172
arv 124, 220
associative afbildninger 97
AudioClip 189
auto-commit 288
autoboxing 93
B
baggrundsfarve 178, 198
bagstreg 91
bak 91
bankkonto 122
BasicStroke 183
basisklasse 125
before() 92
beregning af formel 162
beregningsudtryk 34
betinget udførelse 39
binær læsning og skrivning 248
binære talsystem 246
binært til tegnbaseret 251
blok 42, 117
BlueJ 27, 119
Boks 100, 103, 105, 111, 141, 156, 242
boolean 55
boolesk variabel 38
booleske udtryk 40
BorderLayout 204
Borland JBuilder 23
break 64
browser 188
brugergrænseflade 194
brugssituationer 305
buffer 248
BufferedReader 245, 251
byte 55
ByteArrayInputStream 251
bytekode 22, 32
C
CallableStatement 289
catch 233, 240
char 55
Character.isDigit() 158
Character.isLetter() 158
Character.isLowerCase() 158
CharArrayReader 251
Checked-filtreringsklasser 251
checksum 251
ClassCastException 131, 233
ClassNotFoundException 235
CLASSPATH 151
clone() 278
close() 244, 253
CODEBASE 189, 192
commit 288
Comparator 216
ComponentListener 228
Connection 284
containere 202
continue 64
cosinus 37
createStatement() 284
Cursor 178
D
database 284
databasedriver 284, 289
DatabaseMetaData 290
datakompression 252
datastrømme 244, 249
Date 85, 92
design af klasser 308
design-fane 194
destroy() 190
dialog-boks 202
division 35
do-while-løkken 63
double 35, 55
Double.parseDouble() 157, 246
drawImage 176
drawImage() 175
drawLine() 175
drawString 174
drawString() 175
drejninger 183
drevbogstaver 254
DriverManager 284
E
Eclipse 24
egenskaber 198
eksekverbare jar-filer 153
eksplicit typekonvertering 48, 56, 140
eksponentiel notation 246
elementtype 83, 93
equals() 76, 95, 139
er-en-relation 124, 133, 145, 310
Error 241
esperanto-dansk-ordbog 98
etiket 198
Event 222
eventyrfortælling 82
Exception 240
executeQuery() 285
extends 124
F
FalskTerning 124, 126
fange undtagelser 235
farve 175
fejl 50
fejlmeddelelse 51
Felt (matadorspil) 132, 133, 293
File 254
FilenameFilter 298
FileNotFoundException 235
FileReader 245, 250
FileSystem.listRoots() 254
FileWriter 244
filhåndtering 254
filtrering af filnavne 298
filtreringsklasser 251
final 148, 293
finally 242
fjerninterface 280
flerdimensionale arrays 171
flertrådet programmering 266
float 55
FlowLayout 201, 203
flueben 198
flush() 256
FocusListener 228
Font 176
for-løkken 45, 82
forberedt SQL 289
forbinde til en port 256
foreach 82, 167, 169
forgrundsfarve 178, 198
formateringsstreng 59
formelberegning 162
formen af en klasse 117
forpligtende SQL 288
forældreklasse 125
fraktaler 164
fremviser 188
FTP 260, 261
G
Gade (matadorspil) 135, 144
GeneralPath 183
getConnection() 284
getTime() 92
grafisk brugergrænseflade 194, 222
grafiske komponenter 194
Graphics 175
Graphics2D 182
GridBagConstraints 206
GridBagLayout 205
Grund (matadorspil) 143
grupper af klasser 150
GUI 194
GZIP-filtreringsklasser 252
H
har-relation 108, 114, 122, 134, 145, 309
HashMap 97
Helle (matadorspil) 133
heltal 33, 55
heltalsdivision 56
hexadecimale talsystem 246
hjem 254
hjemmesider 188
HTML-dokument 188
HTTP-tjeneste 256
hændelser 222
I
if 40
if-else 41
Image 176
implementere interface 212, 219
implicit typekonvertering 49, 55
import 150
import af klasser 72
indexOf() 76
indkapsling 103, 285, 295
indlejrede løkker 46
indlæsning fra tastatur 236
Indlæsning fra tastaturet 40, 236, 246
indre klasser 295
indrykning 42
indtastningsfelt 199
init() 190
initComponents() 195
initialisering uden for konstruktør 147
InputStream 249
InputStreamReader 251
insert() 94
insertElementAt() 81, 93
Insets 206
instruktioner 31
int 33, 55
Integer.parseInt() 157, 246
interaktive programmer 196
interface 212
InterruptedException 267
IOException 235
ItemListener 228
J
J2SE 27
JApplet 189
jar-filer 152
Java Web Start 192
Java-arkiver 152
java.awt 72, 150, 174, 177
java.io 150, 249
java.lang 150
java.net 150, 257
java.rmi 150, 280
java.sql 150, 285
java.text 150
java.util 81, 150
Java2D 182
javac 32
javadokumentationen 87
javax.swing 150, 174, 176, 177, 183
jbInit() 195
JBuilder 23
JButton 198, 227
JCheckBox 198
JComboBox 199
JDBC 284
JDeveloper 25
JDialog 202
JDK 27
JFrame 178, 202
JLabel 198
JList 200
JMenuBar 207
JPanel 202
JRadioButton 198
JTable 209
JTextArea 199
JTextField 199
JTree 209
JWindow 202
K
kaste undtagelser 241
KeyListener 227, 228
kildetekst 31
klassediagram 114, 132, 145, 310
klassemetode 60
klasser 68, 87, 116
klassevariabler og -metoder 156, 160
klipning 175
kollaborationsdiagrammer 309
kommandolinie-parametre 168
kommatal 35, 55
kommentarer 30, 53
komponenter 194
komprimering 252
konstruktør 105
konstruktør i underklasse 141, 143
konstruktører 72, 116, 148
Konto 122
konvertere mellem arrays og lister 172
koordinater 174
kopiere en fil 248
Kurvetegning 177
kvadratrod 37
køretidsfejl 51
L
layout 194
layout-manager 203
length() 76
LineNumber-filtreringsklasser 251
lineær transformation 183
linieskift 91
Linjelytter 230
Linjetegning 223, 225
LinjetegningAnonym 299
LinjetegningIndre 296
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 229
LukProgram 229
lytte på en port 258
lytter 222
læsLinje() 236
læsTal() 236
løkker 43
M
main()-metoden 31, 101, 158, 168
manifest-fil 153
matadorspil 132
matematiske funktioner 37
mellemvariabel 75
memappe 254
metadata 257, 290
metodehovede 101, 118
metodekald 38, 70, 71
metodekrop 102
metoder 38, 68, 73, 116, 160
metoder i vinduer 178
metoders returtype 74
Microsoft 22
modal 202
MouseAdapter 230
mouseClicked() 229
mouseDragged() 225, 229
MouseListener 222, 229
MouseMotionListener 225, 229
mouseMoved() 225, 229
mousePressed() 229
mouseReleased() 222, 229
multipel arv 220
multiplikation 35
Muselytter 222
musens udseende 178
N
navngivne løkker 64
navngivningsregler 55
nedarving 220
nedarvning 124
nedtælling 63
NetBeans 26
netlæser 188
new-operatoren 69
next() 285
NOT 57
notify() 272
NotSerializableException 275
NSidetTerning 112
null 72, 135, 233
null-layout 203
NullPointerException 233
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 251, 274
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, 248, 288
optælling 63
OR 57
Oracle 25, 284
OutputStream 249
OutputStreamWriter 251
override 125
oversætte 32
oversætterfejl 50
P
paintComponent() 174
pakker 72, 150
parametervariabler 158
parametre 71, 87, 118, 158
pause 136
Person 114
Piped-filtreringsklasser 251
platformuafhængig 21, 32
platformuafhængige filnavne 254
Point 69, 88
Polygon 176
polymorfe variabler 128
polymorfi 129, 132, 138, 169, 216
prepareCall() 289
PreparedStatement 289
prepareStatement() 289
primtal 60
printf() 59
printStackTrace() 234
PrintWriter 244
prioritet 272
private 103, 154
protected 148, 154
public 103, 154
Pushback-filtreringsklasser 251
R
radioknapper 198
RandomAccessFile 254
readLine() 257
readObject() 274, 278
Rectangle 72, 89
Rederi (matadorspil) 134, 144
reference-typekonvertering 131
referencer 159
regneark 209
regneudtryk 34
rekursion 161, 254
relationer mellem objekter 108, 122
Remote 280
removeElementAt() 81
repaint() 178, 181
replace () 76
restdivision 56
ResultSet 285, 290
ResultSetMetaData 290
return 102, 116
returtype 74, 87, 101, 118
reverse() 94
RMI 280
rmiregistry 281
rollback() 288
rotation 183
run() 266
Runnable 266
række af data 166
S
sammenligning af strenge 79
sammenligningsoperatorer 40, 57
sammensætte strenge 34
Scanner 40, 246, 247
semaforer 272
serialisering 274, 280
Serializable 275
ServerSocket 258
Shape 183
short 55
sikkerhed 192
simple typer 55
sinus 37
skaleringer 183
skilletegn 158
skjule variabler/metoder 103
skrifttype 178, 198
skrive til en tekstfil 244
sleep() 267
SnakkesagligPerson 266
Socket 256
SocketException 235
sortering 216
specialtegn i strenge 91
Spiller (matadorspil) 133
sprogfejl 50
SQL 284
SQLException 235, 284
stakspor 234
stamklasse 125
stamklassen Object 139
standardbiblioteket 87, 150, 157
standardkonstruktør 106, 116, 142
standardp 150
Start (matadorspil) 134
start() 190, 266
Statement 284
static 156
statistik 167, 247
statusfelt 189
sti-separatortegn 254
stifinder 209
stop() 190
stoppe programudførelsen 158
strenge 76
String 76, 90
StringBuilder 94
StringReader 250
subklasse 125
subrutiner 158
substring() 76
super 126, 141, 144
superklasse 125
switch 65
synchronized 271
synlighed af metoder/variabler 154
syntaksfejl 50
System.exit() 158
System.out 157, 246
T
tabulator 91
talsystem 246
Tastatur 40, 236
tastetryk 227
Tegnbar 212
tegne grafik 175
tekstdata 250
tekststrenge 76
Terning 107
TextListener 229
this 111, 122, 148
Thread 266
Thread.sleep() 267
throw 241
Throwable 241
throws 235
tildeling 33
tilsidesætte 125
tilsidesætte variabler 148
titel på vindue 178
tjeneste 256
toLowerCase() 76
toString() 139
toUpperCase() 76
transaktion 288
transformation 183
transient 275
trappeudjævning 182
trim() 90
trinvis gennemgang 47
try-catch-blok 233, 239
tråde 266, 300
typekonvertering 48, 55, 131, 140
tællevariabel 44
U
udbygge en klasse 124
udjævnede farveovergange 182
uendelige løkker 47
uforanderlig 77
UML-notationen 69
UML-udviklingsværktøj 310
underklasse 125
undtagelser 51, 232
Unified Modelling Language 69
Unified Process 305
Unified Process" 304
unikode 91
UnknownHostException 235
unreported exception 235
URL 189
URL-klassen 259
user.dir 254
user.home 254
V
valglister 199
vandfaldsmodellen 304
variabel-overskygning 148
variabler 33
variabler i interface 220
vente 136
virkefelt 158
virtuel maskine 22
vognretur 91
void 87, 116
vridninger 183
værditypekonvertering 48, 55
værtsmaskine 256
W
wait() 272
webserver 258, 268
while-løkken 43
WindowListener 229
writeObject() 274, 278
Y
Yatzyspil 305
ydre klasse 295
Z
Zip-filtreringsklasser 251
1En helt anden arbejdsform, der prøver at gå med den umiddelbare impuls: at programmere med det samme, er ekstremprogrammering (XP). 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.