Iteration og parametrisering Modeller, objekter og opførsel
Nye begreber Repetition (iteration) Parametrisering gentagelse af opførsel Parametrisering generalisering af kode dIntProg, E12
Model Position: (x,y) Vinkel: v Farve: color World Pen status: up/down (0,0) Position: (x,y) Vinkel: v Farve: color Pen status: up/down 270 World 0 (360) 180 90 (800,600) ... En turtels tilstand: - (position, vinkel, farve, bredde, ...) - starttilstand: ((x, y), 0, “black”, up) dIntProg, E12
Model Turtle SkilledTurtle … move(int d) moveTo(int x, int y) turn(double a) turnTo(double a) penUp() penDown() erase() SkilledTurtle … square(int length) spiral(...) ... dIntProg, E12
SkilledTurtle public class SkilledTurtle extends Turtle { public void square100() { move(100); turn(90); } ... dIntProg, E12
Syntax for for-løkker findes i manualen (afsnit 6.2.3) Gentagelser //tegn en firkant move(100); turn(90); //tegn en tolvkant ... (suk!) //tegn en firkant for ( int i= 0; i<4; i++ ) { move(100); turn(90); } //tegn en tolvkant for ( int i= 0; i<12; i++ ) { move(100); turn(30); } Syntax for for-løkker findes i manualen (afsnit 6.2.3) dIntProg, E12
Tegneprogram med løkke public class SkilledTurtle extends Turtle { public void square100() { for ( int i= 0; i<4; i++ ) { move(100); turn(90); } ... dIntProg, E12
Øvelse 1 Hvordan tegner man en ligesidet trekant? Hvordan tegner man en cirkel? dIntProg, E12
Parametrisering (specifikation) Det ville være smartere at lave en metode der kan tegne kvadrater af vilkårlig størrelse. public class SkilledTurtle extends Turtle { /** tegner et kvadrat med sidelængde length */ public void square(int length) { } ? dIntProg, E12
Parametrisering (implementation) Det ville være smartere at lave en metode der kan tegne kvadrater af vilkårlig størrelse. public class SkilledTurtle extends Turtle { /** tegner et kvadrat med sidelængde length */ public void square(int length) { for (int i= 0; i < 4; i++) { move(length); turn(90); } dIntProg, E12
Parametrisering (implementation) Det ville være smartere at lave en metode der kan tegne kvadrater af vilkårlig størrelse. Parameter public class SkilledTurtle extends Turtle { /** tegner et kvadrat med sidelængde length */ public void square(int length) { for (int i= 0; i < 4; i++) { move(length); turn(90); } Argument dIntProg, E12
Øvelse 2 Skriv en metode der tegner en polygon. Lad antal sider og sidelængden være parametre til metoden. public class SkilledTurtle extends Turtle { ... /** * tegner en d-kant med sidelængde length */ public void polygon(int d, int length) { } dIntProg, E12
Øvelse 3 Benyt metoden polygon til at konstruere metoder der kan tegne et kvadrat henholdsvis en ligesidet trekant. class SkilledTurtle extends Turtle{ ... public void polygon(int d, int length) { ... } /** tegner et kvadrat med sidelængde length */ public void square(int length) { } /** tegner en ligesidet trekant med * sidelængde length */ public void triangle(int length) { dIntProg, E12
Pointer (1) Det kan betale sig at lave gode generelle operationer som kan genbruges i mange situationer. Parametrisering er nøglen til at lave generelle operationer. Det er svært at ‘opfinde’ de gode generelle operationer (konkret generelt), men opsøg dem! dIntProg, E12
Pointer (2) Når man skal benytte en metode er det vigtigt med forståelse af hvad operationen gør. Når man skal programmere en metode, skal man tage stilling til hvordan denne skal realiseres (implementeres). dIntProg, E12
Pointer (3) Typisk er man både anvender og implementør af en metode, men det er vigtigt at skelne skarpt mellem de to syn. Når man anvender en metode skal man ikke tænke på hvordan denne er realiseret. Når man implementerer en metode skal man ikke tænke på hvad denne skal bruges til. Efterlevelse af dette enkle princip er en af nøglerne til at kunne lave gode programmer. dIntProg, E12