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 Fejl: Henvisningskilde ikke fundet, Fejl: Henvisningskilde ikke fundet.

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.

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.

22.1 Kravslister

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

22.2 Objektorienteret analyse

Analysen skal beskrive, hvad det er for ting og begreber, programmet handler om. Analysefasens 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), knyttet til tingen.

22.2.2 Brugsscenarier - Hvem Hvad Hvor

Brugsscenarier (eller brugsmønstre, eng.: Use Case) beskriver en samling af aktører og hvilke situationer de deltager i. Man starter helt overordnet og går mere og mere i detaljer omkring hvert scenarie. Herunder to brugsscenarier. Til venstre ses et meget overordnet, der beskriver to spillere og lageret som aktører. Til højre ses brugsscenariet for en tur.


I stedet for diagrammer kan man også blot beskrive scenariet 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 brugsscenariet forekommer

Slutsituation

Resultatet af at brugsscenariet 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 stilling 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:

Brugsscenariet "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

  1. Bruger trykker på "kast terninger"

  2. Terninger, der ikke er holdt får en ny tilfældig værdi

  3. Bruger vælger terninger der skal holdes

  4. (punkt 1-3 gentages maks. 3 gange)

  5. Systemet viser en liste af mulige felter i blokken

  6. Bruger vælger et felt

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 brugsscenarier. Her er et mere realistisk eksempel på en scenarium for et kurvetegningsprogram:

Brugsscenariet "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

  1. Brugeren aktiverer tegning af graf

  2. Programmet åbner dialog og beder om mindste og største x-værdi

  3. Bruger angiver start- og slutværdier og trykker OK

  4. Programmet lukker dialog og beregner 50 funktionsværdien i 50 støttepunkter og bestemmer mindste og største funktionsværdi

  5. Programmet tegner grafen som rette linjer mellem støttepunkterne

Afvigelser

3a: Brugeren afbryder indtastning

    1. Programmet sletter eventuelle indtastninger og lukker dialog

3b: Brugeren har indtastet andet end tal i startværdi eller slutværdi
3c: Brugerens startværdi er mindre end slutværdien

    1. Programmet kommer med en fejlmeddelelse og sletter indtastningerne

Åbne spørgsmål

Hvordan tegnes uendelig? F.eks. 1/x ?

Skal man kunne se flere grafer samtidig?

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 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 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.

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:

  • 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.

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 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.

Engelsk-dansk ordliste

access

adgang, tilgang

applet

applet
miniprogram der kan køre i en browser, f.eks. Firefox

array

tabel, række, array

assignment

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

backslash

omvendt skråstreg ( \ - angives som "\\" i en streng i kildeteksten)

backspace

bak-tegnet ('\b')

block (statement)

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

boolean

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

bytecode

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

cast

eksplicit 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

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 af et program 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, ildeset

digit

ciffer

encapsulation

indkapsling

enumeration

opremsning (af nogle elementer)

event

hændelse

event driven

hændelses-styret

exception

undtagelse i programudførslen

expression

udtryk
f.eks (a*5)/7

file

fil

floating-point number

kommatal
i Java er kommatalstyperne float og double.

graphical user interface, GUI

grafisk brugergrænseflade

host

værtsmaskine

increment

optælling

indentation

indrykning

inheritance

nedarvning

instance

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

integer

helt tal
i Java er heltalstyperne int, long, short og byte.

interface

grænseflade

interpreter

fortolker

label

etikette

library

bibliotek

listener

lytter (efter hændelser)

loop

løkke

memory

lager, RAM

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

navnesammenfald af metoder (samme navn, forskellige parametre)

override

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

package

pakke

parse

analysere, fortolke

pointer

reference til et objekt et sted i lageret (adresse i RAM-lageret)

polymorphism

polymorfi

real

kommatal

i Java er kommatalstyperne float og double.

reference

reference til et objekt

scope

virkefelt

service

tjeneste

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

exception uden tvungen håndtering

variable

variabel

visibility

synlighed

whitespace

blanktegn
mellemrum, tabulatortegn og linjeskift er blanktegn

Stikordsregister

STYLE="background: transparent; column-count: 2">

A

abstract 296

abstrakte klasser 251, 296

ActionListener 228, 230

actionPerformed() 198, 228, 230

adaptere 232

add() 79, 91

adgang til metoder/variabler 156

adgangskontrol 156

AffineTransform 185

afkrydsningsfelter 200

afledt klasse 127

after() 90

aktivitetsdiagrammer 311

aktør 309

alternativudtryk 61

analyse 309

AND 55

anførelsestegn 89

animationer 183

annotation 126

anonyme klasser 232, 302

antialias 184

apostrof 89

append() 92

argumenter 69

ArithmeticException 235

aritmetiske operatorer 54

array 168

array versus ArrayList 171, 174

ArrayIndexOutOfBoundsException 168, 234

ArrayList 79, 91, 142, 171, 174

arv 126, 222

associative afbildninger 95

AudioClip 191

auto-commit 292

autoboxing 91, 94

B

backslash 89

baggrundsfarve 180, 200

bak 89

bankkonto 124

BasicStroke 185

basisklasse 127

before() 90

beregning af formel 164

beregningsudtryk 32

betinget udførelse 37

binær læsning og skrivning 250

binære talsystem 248

binært til tegnbaseret 253

blok 40, 119

BlueJ 24, 121

Boks 98, 101, 103, 110, 143, 158, 244

boolean 53

boolesk variabel 36

booleske udtryk 38

BorderLayout 206

break 62

browser 190

brugergrænseflade 196

brugsmønstre 309

brugsscenarier 309

buffer 250

BufferedReader 247, 253

byte 53

ByteArrayInputStream 253

bytekode 22, 30

C

CallableStatement 293

catch 235, 241

char 53

Character.isDigit() 159

Character.isLetter() 160

Character.isLowerCase() 160

CharArrayReader 253

Checked-filtreringsklasser 253

checksum 253

ClassCastException 133, 235

ClassNotFoundException 237

CLASSPATH 153

clone() 282

close() 246, 255

CODEBASE 191, 194

commit 292

Comparator 218

ComponentListener 230

Connection 288

containere 204

continue 62

cosinus 35

createStatement() 288

Cursor 180

D

database 288

databasedriver 288

DatabaseMetaData 294

datakompression 254

datastrømme 246, 251

Date 83, 90

design af klasser 312

design-fane 196

destroy() 192

dialog-boks 204

division 33

do-while-løkken 62

double 33, 53

Double.parseDouble() 159, 248

drawImage 178

drawImage() 177

drawLine() 177

drawString 176

drawString() 177

drejninger 185

drevbogstaver 258

DriverManager 288

E

Eclipse 25

egenskaber 200

eksekverbare jar-filer 155

eksplicit typekonvertering 46, 54, 142

eksponentiel notation 248

elementtype 91

enumeration 64

equals() 75, 93, 141

er-en-relation 126, 135, 147, 313

Error 243

esperanto-dansk-ordbog 96

etiket 200

Event 224

eventyrfortælling 81

Exception 242

executeQuery() 289

extends 126

F

FalskTerning 126, 128

fange undtagelser 237

farve 177

fejl 48

fejlmeddelelse 49

Felt (matadorspil) 134, 135, 297

felter 98, 158

File 257

FilenameFilter 302

FileNotFoundException 237

FileReader 247, 252

FileSystem.listRoots() 258

FileWriter 246

filhåndtering 257

filtrering af filnavne 302

filtreringsklasser 253

final 150, 297

finally 244

fjerninterface 284

flerdimensionale arrays 173

flertrådet programmering 270

float 53

FlowLayout 203, 206

flueben 200

flush() 260

FocusListener 230

Font 178

for-løkken 43, 81

forberedt SQL 293

forbinde til en port 260

foreach 81, 169, 171

forgrundsfarve 180, 200

formateringsstreng 57

formelberegning 164

formen af en klasse 119

forpligtende SQL 292

forældreklasse 127

fraktaler 166

FTP 264, 265

G

Gade (matadorspil) 137, 146

GeneralPath 185

getConnection() 288

getTime() 90

grafisk brugergrænseflade 196, 224

grafiske komponenter 196

Graphics 177

Graphics2D 184

GridBagConstraints 208

GridBagLayout 207

Grund (matadorspil) 145

grupper af klasser 152

GUI 196

GZIP-filtreringsklasser 254

H

har-relation 107, 113, 124, 136, 147, 313

HashMap 95

header 261

Helle (matadorspil) 135

heltal 31, 53

heltalsdivision 54

hexadecimale talsystem 248

hjem 258

hjemmesider 190

HTML-dokument 190

HTTP-tjeneste 260

hændelser 224

I

if 38

if-else 39

Image 178

implementere interface 214, 221

implicit typekonvertering 47, 53

import 152

import af klasser 70

indexOf() 75

indkapsling 101, 289, 299

indlejrede løkker 44

indlæsning fra tastatur 238

Indlæsning fra tastaturet 38, 238, 248

indre klasser 299

indrykning 40

indtastningsfelt 201

init() 192

initComponents() 197

initialisering uden for konstruktør 149

InputStream 251

InputStreamReader 253

insert() 92

Insets 208

instruktioner 29

int 31, 53

Integer.parseInt() 159, 248

interaktive programmer 198

interface 214

InterruptedException 271

IOException 237

isEmpty() 91

ItemListener 230

J

JApplet 191

jar-filer 154

Java Web Start 194

Java-arkiver 154

java.awt 70, 152, 176, 179

java.io 152, 251

java.lang 152

java.net 152, 261

java.rmi 152, 284

java.sql 152, 288

java.text 152

java.util 80, 152

Java2D 184

javac 30

javadokumentationen 85

javax.swing 152, 176, 178, 179, 185

jbInit() 197

JButton 200, 229

JCheckBox 200

JComboBox 201

JDBC 288

JDeveloper 24

JDialog 204

JDK 26

JFrame 180, 204

JLabel 200

JList 202

JMenuBar 209

JPanel 204

JRadioButton 200

JTable 211

JTextArea 201

JTextField 201

JTree 211

JWindow 204

K

kaste exceptions 243

KeyListener 229, 230

kildetekst 29

klassediagram 113, 134, 147, 314

klassemetode 58

klasser 66, 85, 118

klassevariabler og -metoder 158, 162

klipning 177

kollaborationsdiagrammer 313

kommandolinie-parametre 170

kommatal 33, 53

kommentarer 28, 51

komponenter 196

komprimering 254

konstruktør 103

konstruktør i underklasse 143, 145

konstruktører 70, 118, 150

Konto 124

konvertere mellem arrays og lister 174

koordinater 176

kopiere en fil 250

Kurvetegning 179

kvadratrod 35

køretidsfejl 49

L

layout 196

layout-manager 205

length() 75

LineNumber-filtreringsklasser 253

lineær transformation 185

linieskift 89

Linjelytter 232

Linjetegning 225, 227

LinjetegningAnonym 303

LinjetegningIndre 300

liste af objekter 79

logisk variabel 36

logiske fejl 48

logiske udtryk 38, 55, 60

lokale klasser 301

lokale variabler 99, 158, 160

long 53

lukke vindue 231

LukProgram 231

lytte på en port 262

lytter 224

læsLinje() 238

læsTal() 238

løkker 41

M

main()-metoden 29, 99, 160, 170

manifest-fil 155

matadorspil 134

matematiske funktioner 35

mellemvariabel 73

memappe 258

metadata 261, 294

metodehovede 99, 120

metodekald 36, 68, 69

metodekrop 100

metoder 36, 66, 71, 118, 162

metoder i vinduer 180

metoders returtype 72

Microsoft 22

modal 204

MouseAdapter 232

mouseClicked() 231

mouseDragged() 227, 231

MouseListener 224, 231

MouseMotionListener 227, 231

mouseMoved() 227, 231

mousePressed() 231

mouseReleased() 224, 231

multipel arv 222

multiplikation 33

Muselytter 224

musens udseende 180

MySQL 288

N

navngivne løkker 63

navngivningsregler 53

nedarvning 126, 222

nedtælling 61

NetBeans 23

new-operatoren 67

next() 289

NOT 55

notify() 276

NotSerializableException 279

NSidetTerning 111

null 70, 137, 235

null-layout 206

NullPointerException 235

nøgle 95

nøgleindekserede tabeller 95

nøgleordet static 158

nøgleordet super 128, 143

nøgleordet this 110

O

Object (stamklasse) 141

ObjectOutputStream 253, 278

objekter 66, 85

objektorienteret analyse 309

objektorienteret design 312

objektreferencer 161

objektrelationer 107, 124

objektvariabler 68, 98, 119, 158, 162

ODBC 288

omvendt skråstreg 89

OOAD 308

open source 26

operatorer 54

opremsning 64

oprette objekt 67

optimering 93, 250, 292

optælling 61

OR 55

Oracle 24

OutputStream 251

OutputStreamWriter 253

override 127

oversætte 30

oversætterfejl 48

P

paintComponent() 176

pakker 70, 152

parametervariabler 160

parametre 69, 85, 120, 160

pause 138

Person 113

Piped-filtreringsklasser 253

platformuafhængig 21, 30

platformuafhængige filnavne 258

Point 67, 86

Polygon 178

polymorfe variabler 130

polymorfi 131, 134, 140, 171, 218

prepareCall() 293

PreparedStatement 293

prepareStatement() 293

primtal 58

printf() 57

printStackTrace() 236

PrintWriter 246

prioritet 276

private 101, 156

protected 150, 156

public 101, 156

Pushback-filtreringsklasser 253

R

radioknapper 200

RandomAccessFile 258

readLine() 261

readObject() 278, 282

Rectangle 70, 87

Rederi (matadorspil) 136, 146

reference-typekonvertering 133

referencer 161

regneark 211

regneudtryk 32

rekursion 163, 257

relationer mellem objekter 107, 124

Remote 284

remove() 91

repaint() 180, 183

replace () 75

restdivision 54

ResultSet 289, 294

ResultSetMetaData 294

return 100, 118

returtype 72, 85, 99, 120

reverse() 92

RMI 284

rmiregistry 285

rollback() 292

rotation 185

run() 270

Runnable 270

række af data 168

S

sammenligning af strenge 78

sammenligningsoperatorer 38, 55

sammensætte strenge 32

Scanner 38, 248, 249

semaforer 276

serialisering 278, 284

Serializable 279

ServerSocket 262

service 260

Shape 184

short 53

sikkerhed 194

simple typer 53

sinus 35

size() 79, 91

skaleringer 185

skilletegn 160

skjule variabler/metoder 101

skrifttype 180, 200

skrive til en tekstfil 246

sleep() 271

SnakkesagligPerson 270

Socket 260

SocketException 237

sortering 218

specialtegn i strenge 89

Spiller (matadorspil) 135

sprogfejl 48

SQL 288

SQLException 237, 288

stakspor 236

stamklasse 127

stamklassen Object 141

standardbiblioteket 85, 152, 159

standardkonstruktør 104, 118, 144

standardp 152

Start (matadorspil) 136

start() 192, 270

Statement 288

static 158

statistik 169, 249

statusfelt 191

sti-separatortegn 258

stifinder 211

stop() 192

stoppe programudførelsen 160

strenge 75

String 75, 88

StringBuilder 92

StringReader 252

subklasse 127

subrutiner 160

substring() 75

super 128, 143, 146

superklasse 127

switch 63, 64

synchronized 275

synlighed af metoder/variabler 156

syntaksfejl 48

System.exit() 160

System.out 159, 248

T

tabulator 89

talsystem 248

Tastatur 38, 238

tastetryk 229

Tegnbar 214

tegne grafik 177

tekstdata 252

tekststrenge 75

Terning 105

TextListener 231

this 110, 124, 150

Thread 270

Thread.sleep() 271

throw 243

Throwable 243

throws 238

tildeling 31

tilsidesætte 127

tilsidesætte variabler 150

titel på vindue 180

tjeneste 260

toLowerCase() 75

toString() 141

toUpperCase() 75

transaktion 292

transformation 185

transient 279

trappeudjævning 184

trim() 88

trinvis gennemgang 45

try-catch-blok 235, 241

tråde 270, 304

typekonvertering 46, 53, 133, 142

tællevariabel 42

U

udbygge en klasse 126

udjævnede farveovergange 184

uendelige løkker 45

uforanderlig 76

UML-notationen 67

UML-udviklingsværktøj 314

underklasse 127

undtagelser 49, 234

Unified Modelling Language 67

Unified Process 309

Unified Process" 308

unikode 89

UnknownHostException 237

unreported exception 237

URL 191

URL-klassen 263

user.dir 258

user.home 258

V

valglister 201

vandfaldsmodellen 308

variabel-overskygning 150

variabler 31

variabler i interface 222

vente 138

virkefelt 160

virtuel maskine 22

vognretur 89

void 85, 118

vridninger 185

værditypekonvertering 46, 53

værtsmaskine 260

W

wait() 276

webserver 262, 272

while-løkken 41

WindowListener 231

wrapper-klasse 91

writeObject() 278, 282

Y

Yatzyspil 309

ydre klasse 299

Z

Zip-filtreringsklasser 253

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.

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

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