MEC, DAIMIIntroJava AAU1 Crayon-objekter nu med loops og metoder
MEC, DAIMIIntroJava AAU2 Model Drawer Crayon move(int d) moveto(int x, int y) jump(int d) jumpto(int x, int y) turn(double a) turnto(double a) erase() box(int length) spirille(...)... 1
MEC, DAIMIIntroJava AAU3 Tegneprogram (eks. drawer) public class Drawer { private Crayon c = new Crayon(); public void square100() { c.move(100); c.turn(90); }... }
MEC, DAIMIIntroJava AAU4 Iteration //tegn en firkant t.move(100); t.turn(90); //tegn en tolvkant... (suk!) //tegn en firkant for ( int i=0; i<4; i++ ) { t.move(100); t.turn(90); } //tegn en tolvkant for ( int i=0; i<12; i++ ) { t.move(100); t.turn(30); }
MEC, DAIMIIntroJava AAU5 Tegneprogram med løkke import java.awt.*; // Hvis man vil benytte farver public class Drawer { private Crayon c = new Crayon(Color.red, 1); public void square100() { for ( int i=0; i<4; i++ ) { t.move(100); t.turn(90); }... }
MEC, DAIMIIntroJava AAU6 Parametrisering (specifikation) class Drawer { private Crayon c = new Crayon(); /** tegner et kvadrat med sidelængde length */ public void box(int length) { } Det ville være smartere at lave en metode der kan tegne kvadrater af vilkårlig størrelse. ?
MEC, DAIMIIntroJava AAU7 Parametrisering (implementation) class Drawer { private Crayon c = new Crayon(); /** tegner et kvadrat med sidelængde length */ public void box(int length) { for (int i = 0; i < 4; i++) { c.move(length); c.turn(90); } Det ville være smartere at lave en metode der kan tegne kvadrater af vilkårlig størrelse.
MEC, DAIMIIntroJava AAU8 Parametrisering (implementation) class Drawer { private Crayon c = new Crayon(); /** tegner et kvadrat med sidelængde length */ public void box(int length) { for (int i = 0; i < 4; i++) { c.move(length); c.turn(90); } Det ville være smartere at lave en metode der kan tegne kvadrater af vilkårlig størrelse. Argument (aktuel parameter) Parameter (formel parameter)
MEC, DAIMIIntroJava AAU9 Øvelser 1 Lav en metode, som tegner et ligesidet trekant med vilkårlig sidelængde Lav en metode, som tegner en ligesidet sekskant med vilkårlig sidelængde Kan disse tegne x-kant metoder generaliseres?
MEC, DAIMIIntroJava AAU10 Øvelser 2 class Drawer {... /** * tegner en d-kant med sidelængde length */ public void polygon(int d, int length) {... } Lav polygon-metoden:
MEC, DAIMIIntroJava AAU11 Øvelser 3 Lav square og triangle metoderne vha. polygon class Drawer {... 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) {... }
MEC, DAIMIIntroJava AAU12 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!
MEC, DAIMIIntroJava AAU13 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).
MEC, DAIMIIntroJava AAU14 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.