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.

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

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 Brugssituationer - Hvem Hvad Hvor

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

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

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

CELLPADDING=4 CELLSPACING=0>

access

adgang, tilgang

applet

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

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

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 (79% af værket).

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