Forelæsning Uge 10. Opremsningstyper. Forskellige teknikker til test og debugging. Afleveringsopgave: Debugging + Test.

Størrelse: px
Starte visningen fra side:

Download "Forelæsning Uge 10. Opremsningstyper. Forskellige teknikker til test og debugging. Afleveringsopgave: Debugging + Test."

Transkript

1 Forelæsning Uge 10 Opremsningstyper Enumerated types Forskellige teknikker til test og debugging Når man tester undersøger man, om opførslen (semantikken) er den ønskede Når man debugger (afluser), forsøger man at finde ud af, hvorfor opførslen ikke er, som man ønskede og forventede Afleveringsopgave: Debugging + Test Deltag i træningen i mundtlig præsentation Den er uhyre vigtig for jeres succes ved mundtlig eksamen Eneste gang under jeres studier I får systematisk træning heri Træning gør mester de timer I bruger på det, er godt givet ud Se videoerne om den "perfekte" eksamenspræstation og hør jeres medstuderendes præsentationer det lærer I også af

2 Opremsningstyper (enumerated types) Type, hvor programmøren eksplicit angiver de mulige værdier Nedenstående type har 8 mulige værdier Bemærk at værdierne ikke er tekststrenge, men objekter af typen Weekday Man bruger værdierne ved f.eks. at skrive Weekday.TUESDAY public enum Weekday { // A value for each weekday, // plus one for unrecognised days. MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY, UNKNOWN 8 værdier Alternativt kunne man repræsentere ugedagene ved hjælp af heltal [1,7] eller ved hjælp af tekststrenge Heltal ville være sværere at forstå, og hvad betyder det, hvis man har en illegal værdi som 17 eller -3 Tekststrenge kan let indeholde stavefejl (f.eks. "Tusday") Det kan de selvfølgelig også, når vi bruger en enumereret type Men dem vil compileren fange 2

3 Mere komplekse enumerations Opremsningstyper kan også indeholde feltvariabler og metoder Man bruger stadig værdierne ved f.eks. at skrive Weekday.TUESDAY public enum Weekday { MONDAY("Monday"), TUESDAY("Tuesday"), WEDNESDAY("Wednesday"), THURSDAY("Thursday"), FRIDAY("Friday"), SATURDAY("Saturday"), SUNDAY("Sunday"), UNKNOWN("?"); private String weekday; Weekday(String weekday) { this.weekday = weekday; public String tostring() { return weekday; Feltvariabel af type String Konstruktør Altid private (som udelades) Man kan ikke tilføje nye værdier Initialiserer feltvariablen ud fra parmeteren De 8 mulige værdier skabes ved at kalde konstruktøren 8 gange tostring metode returnerer værdien af feltvariablen weekday Hvis man f.eks. vil ændre sproget til Tysk skal man kun ændre erklæringen af enumeration typen Tekststrengene i enumeration typen ændres til Montag, Dienstag, Mittwoch, Donnerstag,. Værdierne i enumeration typen er uændrede: MONDAY, TUESDAY, WEDNESDAY,. 3

4 Eksempel på brug Erklæring af tre lokale variabler af typen Weekday Udskrift public static void test() { Weekday day2 = Weekday.TUESDAY; Weekday day6 = Weekday.SATURDAY; Weekday dayx = Weekday.UNKNOWN; print(day2); print(day6); print(dayx); private static void print(weekday day) { String daystring; Lokal String variabel switch( day) { case MONDAY: case TUESDAY: case WEDNESDAY: case THURSDAY: case FRIDAY: daystring = " is a workday"; break; case SATURDAY: case SUNDAY: daystring = " is a day off"; break; default: daystring = " is an invalid day"; break; System.out.println( day + daystring ); Switch sætning (med variabel fra opremsningstype) Bemærk, at vi ikke behøver at skrive Weekday.TUESDAY, men kan nøjes med TUESDAY Værdi fra Weekday typen (tostring metoden i Weekday) Tekststreng fra switch sætning 4

5 World of zuul I world-of-zuul projektet kunne vi med fordel have defineret de mulige exists ved hjælp af en enumeration type Nu vil oversætteren protestere, hvis vi (i vores kode) staver en exit forkert public enum Exit { NORTH("north"), EAST("east"), SOUTH("south"), WEST("west"); private String exit; Exit(String exit) { this.exit = exit; public String tostring() { return exit; private Map<Exit, Room> exits; 5

6 Test og debugging Test af program Vi undersøger om programmet fungerer korrekt Logisk korrekt: Producerer programmet de resultater, som vi forventer Effektivitet: Er programmet hurtigt nok til at kunne håndtere store datamængder og mange brugere (performance analyse) Brugervenligt: Er programmet let at forstå og let betjene I det følgende vil vi koncentrere os om logisk korrekthed Debugging af program Når et program indeholder fejl, bruger vi debugging til at lokalisere fejlene, dvs. finde ud af, hvor fejlen er og hvad, der skal rettes for at få programmet til at fungere korrekt Bug betyder lus/insekt (slang for fejl i et program) Debugging betyder aflusning (dvs. man fjerner fejl i programmet) 6

7 Systemudviklingsfaser Udvikling af et program foregår i en række faser Analyse, hvor man udarbejder en kravspecifikation (dvs. en beskrivelse af, hvordan programmet skal fungere) Design, hvor man fastlægger programmets arkitektur (dvs. hvilke klasser/metoder det skal have og hvordan de interagerer) Implementation, hvor man programmerer klasser/metoder Test, hvor man tester om klasser/metoder er korrekte Debugging, hvor man retter de fejl, som man har fundet Iterationer I praksis, må man ofte gå tilbage til tidligere faser Hvis man finder fejl, kan det være nødvendigt at ændre programmets arkitektur eller dele af kravspecifikationen Når man har rettet fejl, skal det rettede program igen testes/debugges Versioner Man kan med fordel opdele udviklingen af et større program i en række trin, hvor man hen af vejen udvikler, tester og debugger mere komplekse versioner Når programmet er taget i brug, vil der ofte opstå behov nye versioner, f.eks. på grund af nye regler eller nye ønsker til programmet 7

8 Unit tests Test af en afgrænset programenhed, f. eks. Klasse Metode / konstruktør Unit = enhed Simple unit tests kan foretages ved hjælp af BlueJ's inspektorer Viser værdien af feltvariabler (og klassevariabler) 8

9 Positive og negative tests En positivt test undersøger, om programenheden opfører sig som forventet ved "normal brug" Bliver en persons navn opdateret til den tekststreng, som vi angiver i kaldet af setname metoden? Husk at teste omkring diverse grænseværdier hvor der ofte er fejl F.eks. bør en metode, der finder teenagere, testes på personer, der har alderen 12, 13, 14, 18, 19, 20 år En negativt test undersøger, om programenheden opfører sig fornuftigt i "uventede situationer" Hvad sker der, hvis vi forsøger at sætte navnet til den tomme streng eller alderen til noget negativt eller meget stort? Håndterer metoden det fornuftigt eller får man en inkonsistent tilstand? Begge typer tests er vigtige Man er ofte tilbøjelig til at glemme (eller nedprioritere) de negative tests Lad være med det 9

10 Regressions tests Regressions tests Når man ændrer i en klasse, bør man efterfølgende tjekke, at alting stadig fungerer korrekt (dvs. opfylder passende positive og negative tests) Har man ved et uheld fået ødelagt noget, som tidligere fungerede? (regression tilbageslag / forværring) Det er tidskrævende og kedeligt at lave regressions tests manuelt Regression tests bliver derfor ofte udeladt Det kan koste enorme mængder af tid, når man senere finder en mærkelig fejl og ikke aner, hvordan og hvornår den er opstået Løsningen er at lave automatiske tests, der let kan gentages Man definerer en mængde af positive og negative tests Hvilke operationer skal udføres? Hvad skal resultatet være? Derefter er det op til test systemet (i vores tilfælde BlueJ) at gennemføre testene og tjekke om de giver de forventede resultater Det kan gøres på få millisekunder uden programmørens aktive medvirken Med automatiske tests er det langt mere overkommeligt at lave systematiske regression tests hver gang programmet ændres 10

11 Automatiske tests i BlueJ BlueJ indeholder et test system ved navn JUnit Nemt at bruge Anvendes i mange andre programmeringsomgivelser for Java testadddays Ny klasse Skal indeholde vores tests for Date klassen Er "bundet fast" til Date klassen og flytter sig sammen med denne Knapper til optagelse og afspilning af tests Den røde plet viser, at vi er i gang med en optagelse Test systemet husker de metodekald, som vi laver Gøres synlige ved at trykke på den lille trekantede knap 11

12 Optagelse af test 3. Kald tostring metoden på date1 objektet Ny del, hvor vi kan definere en assertion, dvs. en betingelse som vi vil have systemet til at tjekke " " 4. Når vi ikke ønsker at udføre mere, afsluttes optagelsen 10 Værdierne af feltvariablerne opdateres 1. Lav et Date objekt 2. Kald adddays metoden på date1 objektet 12

13 Den optagne testmetode I DateTest klassen er der tilføjet en ny metode testadddays Markeret Indeholder Java kode, der udfører de tre ting vi gjorde under optagelsen Lav et Date objekt ( ) Kald adddays metoden med parameteren 10 assertequals metoden gør følgende: Udfører det metodekald, der står i anden parameteren Tjekker, at resultatet er equal med første parameteren Hvis det ikke er tilfældet rejses en assertion error 13

14 Kørsel af testmetode Vi kan nu køre test metoden, ved at trykke på Run tests knappen eller ved at kalde TestAll operationen for klassen DateTest Alt Noget var gik som galt forventet Assertion statementet evaluerede til til true Testene tog 54 ms Hvis vi vil ændre i den optagne metode kan vi Lave en helt ny optagelse Modificere Java koden i klassen DateTest " " Stadig OK " " ERROR 14

15 Beskrivelse af hvad der gik galt Viser den assertion, der fejlede Når man har lavet nogle få optagelser af test metoder og set, hvordan de ser ud, er det langt hurtigere at skrive test metoderne selv i stedet for at optage dem public void adddays(int d) { for(int i = 0; i<d; i++) { settonextdate(); Hvis parameteren er negativ udføres kroppen af for løkken slet ikke Kan evt. ændres, så man for negative værdier kalder settopreviousdate et antal gange 15

16 Assertions Assertions kan skrives på flere forskellige måder Nedenstående fire sætninger er ækvivalente Men den første giver den bedste fejlmeddelelse assertequals(true, person.isteenager()); assertequals(person.isteenager(), true); asserttrue(person.isteenager()); assertfalse(!person.isteenager()); expected:<true> but was:<false> expected:<false> but was:<true> no exception message no exception message Undlad at bruge assert sætninger (med det reserverede ord assert), idet disse kan give lidt tekniske komplikationer assertequals bruger (som navnet antyder) equals metoden til at sammenligne de to værdier (af en Objekt type) Bemærk at knappen Run Tests kun tester metoderne i de test klasser, der allerede er succesfuldt oversat (compileret) Når man skriver eller ændrer en test metode, skal man derfor huske at oversætte / genoversætte den pågældende test klasse 16

17 Regressions tests Forberedelser For hver af klassens metoder laves en testmetode Disse kan enten optages, eller man kan kode dem direkte i Java, hvilket er let, hvis testmetoden ligner en tidligere Den enkelte testmetode kan indeholde mange assertions og dermed teste flere forskellige ting Man bruger ofte de samme objekter i mange testmetoder Man kan så (en gang for alle) lave en såkaldt test fixture, der indeholder de pågældende objekter Fixture betyder "fast inventar" detaljer er forklaret i afsnit Test fixturen genetableres inden hver test metode Hver gang man ændrer en eller flere af klassens metoder Kører man alle testmetoderne ved ét enkelt tryk på Run Tests / TestAll Man kan på få millisekunder se, om alt stadig fungerer som forventet Hvis der er fejl, skal man overveje, om det er den fejlende metode, der skal ændres, eller det er den angivne assertion, der er forkert Det sidste vil f.eks. være tilfældet, hvis man har ændret adddays til at kunne håndtere negative værdier 17

18 Kan regressions tests betale sig? Ulemper Det tager tid at lave de mange testmetoder Fordele Fejl introduceret på grund af koderettelser findes langt hurtigere og med langt større sandsynlighed Senere kan sådanne fejl være virkelig svære at finde, idet fejlen måske er opstået da man rettede "noget helt andet" Man slipper for kedelige manuelle tests Konklusion Brug tid på (helt fra start) at udvikle test metoder, der kan bruges til automatiske regression tests Det betaler sig i det lange løb også for metoder, der tilsyneladende er forholdsvis simple 18

19 Debugging (aflusning, fjernelse af fejl) BlueJ bogen introducerer tre teknikker til debugging Manual gennemgang af koden Brug af BlueJ's debugger Indsættelse af print sætninger Ideen i de tre er teknikker er den samme Under udførslen af koden, inspicerer man værdierne af udvalgte variabler hvordan metoderne kalder hinanden Forskelle mellem teknikkerne Ved en manual gennemgang klarer man alle beregninger selv Det tager lang tid og man kan let lave fejl BlueJ's debugger holder styr på variablernes værdier og hvilke metoder der kalder hinanden Det sker lynhurtigt og debuggeren laver aldrig fejl Men det kræver lidt tid og kræfter at lære at bruge debuggeren Print sætninger er en mellemting. Tingene beregnes automatisk, men hvis man vil se værdierne af nye variabler, må man manuelt ind og tilføje nye print sætninger Derudover er det besværligt at indsætte (og fjerne) print sætninger 19

20 BlueJ's debugger (kort repetition) Nyttig når man skal tjekke den detaljerede opførsel af kørende Java kode Breakpoints indsættes (og fjernes) ved at klikke i venstre margin af editoren Under programudførelsen vil debuggeren stoppe, når et breakpoint nås, og vise positionen med en grøn pil (samt grøn farve) Herefter kan man steppe gennem koden sætning for sætning Mellem skridtene kan man inspicere systemets tilstand, dvs. værdierne af feltvariabler, lokale variabler, osv. 20

21 Metodekald Når næste sætning er et metodekald, har man to muligheder: Udfører hele metodekaldet uden at man ser detaljerne Starter metode-kaldet, men stopper ved første sætning i den kaldte metode 21

22 Metodekald Parat til at udføre første sætning i den kaldte metode Andre knapper: Fortsætter kørslen frem til næste breakpoint Stopper kørslen Nødstop (uendelig while løkke eller lignende) 22

23 Undervejs kan man inspicere tilstanden Igangværende metodekald Værdier for klassevariabler Værdier for feltvariabler Knapper med de forskellige valgmuligheder Værdier for lokale variabler (herunder parametre) 23

24 Eksempel på debugging via print sætninger Klassemetoden sort sorterer en liste metoden er rekursiv public static void sort(arraylist<integer> list) { if(list.size() > 1) { int head = list.get(0); list.remove(0); sort(list); // Rekursivt kald på tail insert(head, list); // Indsæt head på rette sted i list list head tail 1. Vi starter med en usorteret liste [6, 8, 3, 5] 2. Hvis listen har 0 eller 1 elementer er den allerede sorteret 3. Udtag head (første element) 6 [8, 3, 5] 4. Sorter tail (rekursivt kald) 6 [3, 5, 8] 5. Indsæt head på rette plads i tail [3, 5, 6, 8] Dette gøres ved hjælp af klassemetoden insert (som vi nu vil kigge på) 24

25 insert metoden Klassemetoden insert indsætter et elem på rette sted i en allerede sorteret list metoden er rekursiv public static void insert(int elem, ArrayList<Integer> list) { if(list.size() == 0) { list.add(elem); else { int head = list.get(0); if(elem <= head) { list.add(0, elem); //Indsæt elem forrest i list else { list.remove(0); // Fjern head insert(elem, list); // Rekursivt kald på tail list.add(head); // Genindsæt head 1. Vi starter med et element og en sorteret liste 6 [3, 5, 8] 2. Hvis listen er tom indsættes elem blot i listen, som så er sorteret 3. Hvis elem <= head indsættes elem forrest i listen, som så er sorteret 4. Ellers udtages head af listen 6 3 [5, 8] 5. Indsæt elem på rette plads i tail 3 [5, 6, 8] 6. Genindsæt head forrest i listen [3, 5, 6, 8] 25

26 Testklasse Metoden testsort tester sort metoden Den bruger en hjælpemetode, createarraylist som konstruerer en arrayliste ud fra et heltal [4, 8, 5, 7, 2] Blev også brugt i en Raflebæger 3, opgave 5 public void testsort(int digits) { ArrayList<Integer> list = createarraylist(digits); Sorting.sort(list); System.out.println("sort " + digits + " --> " + list); Udskriv input og resultat Kørsler af testsort viser at sort metoden fejler Det er de rigtige elementer vi har i listen Men rækkefølgen er ofte forkert For at lokalisere fejlen vil vi indsætte udskrifter i sort og insert metoderne 26

27 Husk input ved at lave en ny arrayliste med de samme elementer som i list Kunne man i stedet blot skrive ArrayList<Integer> origlist = list? Udskriv input og resultat Husk input Udskrifterne kommer i den rækkefølge, som metodekaldene afsluttes Man skal læse nede fra og opad for at få kaldssekvensen Begge metoder fejler Vi prøver sommetider at indsætte i usorteret liste Vi ser først på insert metoden hvorfor? Udskriv input og resultat public static void sort(arraylist<integer> list) { ArrayList<Integer> origlist = new ArrayList(list); if(list.size() > 1) { int head = list.get(0); list.remove(0); sort(list); insert(head, list); System.out.println("sort " + origlist + " --> " + list); public static void insert(int elem, ArrayList<Integer> list) { ArrayList<Integer> origlist = new ArrayList(list); if(list.size() == 0) { list.add(elem); else { int head = list.get(0); if(elem <= head) { list.add(0,elem); else { list.remove(0); insert(elem, list); list.add(head); System.out.println("insert " + elem + " in " + origlist + " --> " + list); 27

28 insert metoden har tre cases Indsæt i tom liste elem <= head elem > head public static void insert(...) { if( list.size() == 0 ) {... else { int head = list.get(0); if( elem <= head ) {... else {... Fejlen ser ud til at ligge i denne del Lad os undersøge, hvilke af disse der fejler Det ser ud som om det kun er det sidste Tom liste elem <= head elem > head I praksis bør man selvfølgelig lave nogle flere tests af de tre cases 28

29 Nu ved vi, hvor vi skal lede efter fejlen Fejlen ser ud til at ligge i denne del Hvad er der galt? public static void insert(int elem, ArrayList<Integer> list) { ArrayList<Integer> origlist = new ArrayList(list); if(list.size() == 0) { list.add(elem); else { int head = list.get(0); if(elem <= head) { list.add(0,elem); else { list.remove(0); insert(elem, list); // Fjern head // Rekursivt kald på tail // Gendindsæt head list.add(head); list.add(0, head); System.out.println("insert " + elem + " in " + origlist + " --> " + list); elem skal genindsættes først i listen Vi har genindsat det sidst i listen 29

30 Gentag testene Nu ser insert ud til at fungere korrekt I praksis bør man selvfølgelig lave nogle flere tests Tom liste elem <= head head < elem Det samme er tilfældet for sort 30

31 Hvad har vi gjort? Ved at gå systematisk frem lokaliserede vi hurtigt fejlen Både insert og sort fejlede sort kalder insert (men ikke omvendt) Vi startede derfor med at kigge på insert i det håb, at sort er ok og kun fejlede fordi insert var forkert insert metoden har tre cases Vi testede hver af disse og fandt ud af at fejlen lå i den sidste (elem > head) Den pågældende case bestod af tre sætninger Ved inspektion af disse lokaliserede vi fejlen (som bestod i, at vi genindsatte head sidst i listen, hvor det skulle have været placeret først) Den systematiske tilgang bevirkede, at vi hurtigt kunne koncentrere os om tre linjers kode (i stedet for de ca. 20 linjer, der er i de to metoder) Herefter var det forholdsvis let at finde fejlen 31

32 Videnskabelig fremgangsmåde Naturvidenskab (f.eks. fysik og astronomi) 1. Observér systemet 2. Opstil en hypotese, som er konsistent med observationerne 3. Lav et eksperiment, som bekræfter/afkræfter hypotesen 4. Modificér hypotesen ud fra eksperimentets resultater 5. Når eksperimentet bekræfter hypotesen, har vi en teori, som beskriver de fænomener vi kan observere Scientific debugging (science = naturvidenskab) 1. Observér og dokumentér en fejl i programmet 2. Opstil en hypotese om, hvor fejlenligger / hvad den skyldes 3. Lav et eksperiment, som bekræfter/afkræfter hypotesen 4. Modificér hypotesen ud fra eksperimentets resultater 5. Når eksperimentet bekræfter vores hypotese om, hvor fejlen ligger / hvad den skyldes, rettes fejlen og vi tester at fejlen er forsvundet 6. Ovenstående gentages så længe, der er fejl i programmet 32

33 Eksempel på scientific debugging Sorterings metode (lavet ud fra noget gammelt C uden kommentarer) public static void shellsort(arraylist<integer> list, int size) { int i, j; int h = 1; do { h = h * 3 + 1; while(h <= size); do { h /= 3; for(i = h; i < size; i++) { int v = list.get(i); for(j = i; j >= h && list.get(j-h) > v; j -= h) { list.set(j,list.get(j-h)); if(i!= j) { list.set(j,v); while(h!= 1); Kompleks kode Svært at forstå Bør testes [4, 8, 5, 7, 2] Brugervenlig metode (indlæser heltal, skaber arrayliste, kalder shellsort, printer resultatet) public static void sortdigits(int digits) { ArrayList<Integer> list = createarraylist(digits); Sorting.shellSort(list, Integer.toString(digits).length()-1); System.out.println("sort " + digits + " --> " + list); 33

34 Test af sorteringsmetoderne sortdigits metoden returnere ikke altid det rigtige resultat Det er de rigtige elementer vi har i listen Men rækkefølgen er ofte forkert For at lokalisere fejlen vil vi anvende scientific debugging 34

35 Lokalisering af fejlen Vi har observeret at sortdigits bl.a. fejler for parameterværdien 312 Fejlen kan lige flere steder createarraylist metoden Parameterværdierne til shellsort metoden shellsort metoden Parameterværdien i det afsluttende print statement public static void sortdigits(int digits) { ArrayList<Integer> list = createarraylist(digits); Sorting.shellSort( list, Integer.toString(digits).length()-1 ); System.out.println( "sort " + digits + " --> " + list ); Hypotese 1: Fejlen ligger i createarraylist Experiment: Lav et kald af metoden med parameteren 312 Kræver at vi midlertidigt ændrer private til public Resultat: Metoden returnerer den korrekte arrayliste [3, 1, 2] Hypotesen er forkert 35

36 Lokalisering af fejlen (fortsat) Fejlen kan ligge flere steder createarraylist metoden? Parameterværdierne til shellsort metoden? shellsort metoden? Parameterværdien i det afsluttende print statement public static void sortdigits(int digits) { ArrayList<Integer> list = createarraylist(digits); Sorting.shellSort(list, Integer.toString(digits).length()-1); System.out.println("sort " + digits + " --> " + list); Hypotese 2: Fejlen ligger i parameterværdierne til shellsort Analyse: Metodens dokumentation siger, at anden parameteren skal angive længden af listen i første parameteren Experiment: Kald shellsort med parametrene [3,1,2] og 3 Resultat: Metoden returnerer nu det forventede resultat: [1, 2, 3] Hypotesen er korrekt 36

37 Fejlen er lokaliseret og kan rettes Fejlen ligger i anden parameteren til shellsort Integer.toString(digits).length()-1-1 skal fjernes eller hele udtrykket erstattes af list.size() Faktisk er anden parameteren til shellsort helt overflødig i et Java program Metoden kan selv beregne længden ud fra første parameteren Anden parameteren er en rest fra det gamle C program, hvor man selv er ansvarlig for at håndtere længden af arrays korrekt Ved at gå systematisk frem sparede vi en masse tid Vi nåede slet ikke at se på shellsort metoden, som er kompleks og vanskelig at forstå Fra det kan vi lære, at det lønner sig at tjekke de simple fejlmuligheder, før man giver sig i kast med de mere komplekse 37

38 Gode råd omkring test og debugging Alle programmer indeholder fejl Anvendelse af gode software udviklingsteknikker (herunder indkapsling, sammenhæng og løs kobling) reducerer antallet af fejl Test bør blive en vane Automatiser test så meget som muligt Husk regression tests, når I modificerer kode Øv jer i at bruge forskellige teknikker til debugging BlueJ's debugger er et fortrinligt værktøj Den kan I med fordel bruge i nogle af de kommende afleveringsopgaver Lav en labrapport / dagbog med de ting, der skal huskes De foretagne design valg (inklusiv begrundelser) Aftestning og debugging Mangler, idéer til forbedringer, osv. Værdien af skriftlighed kan ikke overvurderes Vores hukommelse er forbavsende dårlig Man gentager ofte sine fejl 38

39 Debugging af funktionel kode Lambda'er og streams kan debugges som al anden kode peek metoden gør det nemt at lave print sætninger Intermediate metode, hvor output stream er mage til input stream Undervejs kan vi f.eks. udskrive elementerne public long findsumofageofteenagers() { return persons.stream().peek(.filter( elem elem -> -> print("start: (13 <= elem.getage())) " + )).filter( elem -> (13 (elem.getage() <= elem.getage())) <= 19)).peek(.mapToInt( elem elem -> print("13 -> elem.getage()) <=: " + elem)).filter(.sum(); elem -> (elem.getage() <= 19)).peek( elem -> print("19 >=: " + elem)).maptoint( elem -> elem.getage()).peek( elem -> print("maptoint: " + elem)).sum(); Elementerne færdigbehandles et af gang Rækkefølgen er determinstisk (ens hver gang) private void print(object o) { System.out.println(o); 39

40 Parallel processering af streams Hvis vi erstatter stream metoden med parallelstream åbner vi op for multi-core processering De enkelte kerner (CPU'er) kan behandle forskellige stream elementer parallelt (samtidigt) Potentiel stor effektivitetsgevinst uden ekstra programmeringsindsats public long findsumofageofteenagers() { return persons.parallelstream()().peek( elem -> print("start: " + elem )).filter( elem -> (13 <= elem.getage())).peek( elem -> print("13 <=: " + elem)).filter( elem -> (elem.getage() <= 19)).peek( elem -> print("19 >=: " + elem)).maptoint( elem -> elem.getage()).peek( elem -> print("maptoint: " + elem)).sum(); Nu er rækkefølgen non-determinístik (forskellige fra gang til) I den viste kørsel behandles 18 og 47 parallelt (samtidigt) 40

41 Afleveringsopgave: Debugging + Test I denne opgave skal I træne debugging og konstruktion af automatiske tests, dvs. brug af de teknikker, som er beskrevet i denne forelæsning Den metode, som i arbejder på, er så simpel, at I sagtens kan finde fejlen ved blot at kigge på koden Lad være med det Brug i stedet de beskrevne debugging teknikker, således at I bliver fortrolige med dem 41

42 Opsummering Opremsningstyper Enumerated types Forskellige teknikker til test og debugging Når man tester undersøger man, om programmet opfører sig korrekt Når man debugger (afluser), forsøger man at finde ud af, hvorfor opførslen ikke er korrekt Afleveringsopgave: Debugging + Test 42

43 Det var alt for nu.. spørgsmål 43

Forelæsning Uge 10. Opremsningstyper. Forskellige teknikker til test og debugging. Afleveringsopgave: Debugging + Test.

Forelæsning Uge 10. Opremsningstyper. Forskellige teknikker til test og debugging. Afleveringsopgave: Debugging + Test. Forelæsning Uge 10 Opremsningstyper Enumerated types Forskellige teknikker til test og debugging Når man tester undersøger man, om opførslen (semantikken) er den ønskede Når man debugger (afluser), forsøger

Læs mere

Forelæsning Uge 10 Mandag

Forelæsning Uge 10 Mandag Forelæsning Uge 10 Mandag Opremsningstyper Enumerated types Forskellige teknikker til test og debugging Når man tester undersøger man, om opførslen (semantikken) er den ønskede Når man debugger (afluser),

Læs mere

Forelæsning Uge 10 Torsdag

Forelæsning Uge 10 Torsdag Forelæsning Uge 10 Torsdag Opremsningstyper Enumerated types Forskellige teknikker til test og debugging Når man tester undersøger man, om opførslen (semantikken) er den ønskede Når man debugger (afluser),

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser Klassevariabler og klassemetoder Variabler og metoder der et tilknyttet klassen (i stedet for at være tilknyttet

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser Klassevariabler og klassemetoder Variabler og metoder der et tilknyttet klassen (i stedet for at være tilknyttet

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser Klassevariabler og klassemetoder Variabler og metoder der et tilknyttet klassen (i stedet for at være tilknyttet

Læs mere

DRONNINGER (QUEENS) Opgave 1

DRONNINGER (QUEENS) Opgave 1 DRONNINGER (QUEENS) I denne opgave vil vi beskæftige os med det såkaldte 8-dronningeproblem, hvor man skal placerede 8 dronninger på et 8 x 8 skakbræt, således at ingen af dronningerne kan slå hinanden.

Læs mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgave:

Læs mere

Forelæsning Uge 5 Mandag

Forelæsning Uge 5 Mandag Forelæsning Uge 5 Mandag Algoritmeskabeloner findone, findall, findnoof, findsumof (sidste mandag) findbest Brug af klassen Collections og interfacet Comparable BlueJ s Debugger Nyttig til at inspicere

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3 DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (i mandags) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (sidste mandag) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?

Læs mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgave:

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Java syntax og style guide Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Brug

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Klassevariabler og klassemetoder Levetid for variabler og parametre Virkefeltsregler Projektopgave Kaninjagt Lommeregner (for MAT studerende) Klassevariabler og klassemetoder

Læs mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgaver

Læs mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgaver

Læs mere

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag Forelæsning Uge 3 Torsdag Billedredigering (bl.a. brug af for-løkker) Gråtonebilleder (som er lidt simplere end farvebilleder) Arrays Kan "opbevare" et antal objekter (som ArrayList) Fast (på forhånd kendt)

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner findone, findall, findnoof, findsumof Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder strenge) Opfølgning på Skildpadde

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2 DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld

Læs mere

Virkefeltsregler i Java

Virkefeltsregler i Java Virkefeltsregler i Java int i; int k; Sequence s; int j; What s in a name? Brian spillede blændende i søndags! Skolen ligger i Viby Ring til Kirsten og sig at... Et navn fortolkes i en kontekst og konteksten

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder

Læs mere

Ugeseddel 4 1. marts - 8. marts

Ugeseddel 4 1. marts - 8. marts Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,

Læs mere

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser ArrayList Collection med variabelt antal elementer Der er mange andre Collection typer (se Collection interfacet

Læs mere

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag Forelæsning Uge 3 Torsdag Billedredigering Gråtonebilleder (som er lidt simplere end farvebilleder) Arrays Kan "opbevare" et antal objekter (som ArrayList) Fast (på forhånd kendt) antal elementer Afleveringsopgave:

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4 DM502 Forelæsning 4 Flere kontrolstrukturer for-løkke switch-case Metoder Indhold Arrays og sortering af arrays String-funktioner for-løkke Ofte har man brug for at udføre det samme kode, for en sekvens

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag ArrayList klassen Gør det let at lave en objektsamling (collection) med et variabelt antal elementer Der er mange andre slags objektsamlinger (se Collection interfacet i JavaDoc)

Læs mere

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen. Indledning...2 Variabler...13 Eksempel: 1...13 Eksempel 2:...13 Eksempel 3:...15 Eksempel 4:...16 Metoder...17 Metode (intet ind og intet ud)...17 Metode (tekst ind)...18 Metode (tekst ind og tekst ud)...19

Læs mere

DANMARKS TEKNISKE UNIVERSITET

DANMARKS TEKNISKE UNIVERSITET DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler

Læs mere

Forelæsning Uge 5 Mandag

Forelæsning Uge 5 Mandag Forelæsning Uge 5 Mandag Sortering ved hjælp af klassen Collections Ved hjælp af interfacet Comparable Ved hjælp af interfacet Comparator findbest som sorteringsproblem Køreprøven i uge 7 Form Forberedelse

Læs mere

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag ArrayList Collection med variabelt antal elementer Der er mange andre Collection typer (se Collection interfacet i JavaDoc) MusicOrganizer projektet Eksempel på brug af ArrayList

Læs mere

COMPUTERSPIL 1. Opgave 1. Opgave 2

COMPUTERSPIL 1. Opgave 1. Opgave 2 COMPUTERSPIL 1 I løbet af de kommende fem uger skal I programmere et computerspil, hvor spillerne rejser rundt mellem byer i forskellige lande og indsamler point. Der er en delaflevering hver uge, hvor

Læs mere

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag ArrayList Collection (samling af objekter) med variabelt antal elementer Der er mange andre Collection typer (se Collection interfacet i JavaDoc) MusicOrganizer projektet Eksempel

Læs mere

Kontrol-strukturer i PHP

Kontrol-strukturer i PHP Denne guide er oprindeligt udgivet på Eksperten.dk Kontrol-strukturer i PHP Denne artikel gennemgår kontrolstrukturer i PHP. 'if', 'switch', 'while' og 'for' bliver gennemgået. Den forudsætter lidt grundlæggende

Læs mere

Forelæsning Uge 5 Mandag

Forelæsning Uge 5 Mandag Forelæsning Uge 5 Mandag Sortering ved hjælp af klassen Collections Ved hjælp af interfacet Comparable Ved hjælp af interfacet Comparator findbest som sorteringsproblem Information om køreprøven i uge

Læs mere

Forelæsning Uge 1 Torsdag

Forelæsning Uge 1 Torsdag Forelæsning Uge 1 Torsdag Objekters tilstand og opførsel Java og BlueJ Skabelse af objekter (via new-operatoren) Iteration (gentagelser) og parametrisering Java's for løkke Parametre i metoder Forskellige

Læs mere

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag Forelæsning Uge 3 Torsdag Billedredigering Gråtonebilleder (som er lidt simplere end farvebilleder) Rekursive metoder Metoder der kalder sig selv Giver ofte meget elegante og simple løsninger på komplekse

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter side 1 af 11 sider Skriftlig eksamen i Datalogi Modul 1 Sommer 2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 10% Opgave 2 10%

Læs mere

Forelæsning Uge 6 Mandag

Forelæsning Uge 6 Mandag Forelæsning Uge 6 Mandag Tingene i denne forelæsning er ikke eksamenspensum Forelæsningen afrunder kurset, og forklarer nogle af de begreber, som I har mødt under kurset uden at få detaljeret forklaring

Læs mere

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter 2006. Abstract

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter 2006. Abstract Sproget Six Til brug i rapportopgaven på kurset Oversættere Vinter 2006 Abstract Six er baseret på det sprog, der vises i figur 6.2 og 6.4 i Basics of Compiler Design. Den herværende tekst beskriver basissproget

Læs mere

SWC eksamens-spørgsmål. Oversigt

SWC eksamens-spørgsmål. Oversigt SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition

Læs mere

DM536. Rapport og debug

DM536. Rapport og debug DM536 Rapport og debug Kilder Vigtig.it (Felix Palludan Hargreaves) http://vigtig.it/dm502/howto_report.pdf http://vigtig.it/blog/teaching/#toc-relevant-tips Peter Schneider-Kamp http://imada.sdu.dk/~petersk/dm536/project2.pdf

Læs mere

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

//Udskriver System.out.println(Hej  + ditfornavn +   + ditefternavn + .); System.out.println(Du er  + dinalder +  aar gammel! Denne guide er oprindeligt udgivet på Eksperten.dk Brugerinput i Java Denne her artikel gennemgår diverse ting ved brug af brugerinput i Java. Den starter med det simple og fortæller derefter skridt for

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 29. februar, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner

Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner Forelæsning 4.1 Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner finden findalle Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder strenge) Afleveringsopgave

Læs mere

COMPUTERSPIL 1. Opgave 1

COMPUTERSPIL 1. Opgave 1 COMPUTERSPIL 1 I løbet af de kommende fem uger skal I programmere et computerspil, hvor spillerne rejser rundt mellem byer i forskellige lande og indsamler point. Der er en delaflevering hver uge, hvor

Læs mere

Indholdsfortegnelse If-sætningen... 3 Opgaver... 4 OR, AND sammen med if-sætningen... 5 Rand() funktion... 5 Opgave... 5 Include() funktionen...

Indholdsfortegnelse If-sætningen... 3 Opgaver... 4 OR, AND sammen med if-sætningen... 5 Rand() funktion... 5 Opgave... 5 Include() funktionen... Modul 2 Indholdsfortegnelse If-sætningen... 3 Opgaver... 4 OR, AND sammen med if-sætningen... 5 Rand() funktion... 5 Opgave... 5 Include() funktionen... 6 Opgave... 6 POST/GET og formular... 6 Opgaver...

Læs mere

Forelæsning Uge 1 Torsdag

Forelæsning Uge 1 Torsdag Forelæsning Uge 1 Torsdag Objekters tilstand og opførsel Java og BlueJ Skabelse af objekter (via new-operatoren) Iteration (gentagelser) og parametrisering Java's for løkke Parametre i metoder Forskellige

Læs mere

Programmering for begyndere Lektion 2. Opsamling mm

Programmering for begyndere Lektion 2. Opsamling mm Lektion 2 Opsamling mm God tone Der er indlagt spørge sessioner Lektion 2 - Agenda Programmering for Lidt ændringer til teknikken, herunder hvordan du genser en lektion Lidt generelle tilbagemeldinger

Læs mere

DM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11

DM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11 DM01 DM01 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk D12, Elias 18/3-2003 Side 1 af 11 DM01 Indholdsfortegnelse: BILAG:...2 1 FORMÅL:...3 2 KLASSER:...4 2.1 DILEMMA:...4 2.1.1 METODER:...4

Læs mere

Abstrakte datatyper C#-version

Abstrakte datatyper C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype

Læs mere

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne. Exercise 1: Opgave 9.1 på CodeJudge. a) Lav klasserne Cirkel, Rektangel og Kvadrat, som implementerer vedhæftede interface From.java (se CodeJudge). Lav Rektangel før du laver Kvadrat. Kan du bruge nedarvning

Læs mere

Forelæsning Uge 5 Mandag

Forelæsning Uge 5 Mandag Forelæsning Uge 5 Mandag Sortering ved hjælp af klassen Collections Ved hjælp af interfacet Comparable Ved hjælp af interfacet Comparator findbest som sorteringsproblem Information om køreprøven i uge

Læs mere

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen Studiepraktik Thomas Bøgholm boegholm@cs.aau.dk Mikkel Hansen mhan@cs.aau.dk Jacob Elefsen jelefs12@student.aau.dk 1 Studiepraktik -- program Program onsdag 10.00 10.15 Registrering af fremmøde og gennemgang

Læs mere

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4 dintprog Manual Revision: 1241 August 24, 2010 Indhold I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4 3 Grundbegreber om modellering 4 III Sprogkonstruktioner 5 4 Klasser

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 27. februar, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Exceptions i Delphi. Try except

Exceptions i Delphi. Try except Exceptions i Delphi Exceptions er en teknik til at fange fejl under programafviklingen. Ikke programmeringsfejl, men fejl der opstår i forskellige situationer, f.eks. en fil der mangler en fil der er skrivebeskyttet,

Læs mere

Kursusarbejde 3 Grundlæggende Programmering

Kursusarbejde 3 Grundlæggende Programmering Kursusarbejde 3 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 21. november 2003 Indhold 1. Kode 2 1.1. forestillinger.h............................................. 2 1.2. forestillinger.cc.............................................

Læs mere

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger

Læs mere

Forelæsning Uge 6 Mandag

Forelæsning Uge 6 Mandag Forelæsning Uge 6 Mandag Funktionel programmering i Java (Kapitel 5) Forskellen på imperative og funktionelle programmeringssprog Lambda'er (kodestumper, der kan bruges som parametre i et metodekald) Streams

Læs mere

Start på Arduino og programmering

Start på Arduino og programmering Programmering for begyndere Brug af Arduino Start på Arduino og programmering EDR Hillerød Knud Krogsgaard Jensen / OZ1QK 1 Start på Arduino og programmering Sidste gang (Introduktion) Programmeringssproget

Læs mere

Klasser og objekter. (Afsnit i manualen)

Klasser og objekter. (Afsnit i manualen) Klasser og objekter (Afsnit 4 + 5 i manualen) Grundbegreber Klasser og objekter beskrivelse oprettelse Attributter og metoder tilstand opførsel Indkapsling afskærmning datarepræsentationsuafhængighed Klasser

Læs mere

Forelæsning Uge 9 Mandag

Forelæsning Uge 9 Mandag Forelæsning Uge 9 Mandag Arrays Objektsamlinger med et fast (på forhånd kendt) antal elementer Velkendt fra mange andre programmeringssprog Principper for design af klasser Undgå f.eks. at have den samme

Læs mere

Løsning af møntproblemet

Løsning af møntproblemet Løsning af møntproblemet Keld Helsgaun RUC, oktober 1999 Antag at tilstandene i problemet (stillingerne) er repræsenteret ved objekter af klassen State. Vi kan da finde en kortest mulig løsning af problemet

Læs mere

Greenfoot En kort introduktion til Programmering og Objekt-Orientering

Greenfoot En kort introduktion til Programmering og Objekt-Orientering Greenfoot En kort introduktion til Programmering og Objekt-Orientering Greenfoot er et computer-program, som kan benyttes til at skrive andre computer-programmer, i et programmeringssprog kaldet Java.

Læs mere

Hvad er Objekter - Programmering

Hvad er Objekter - Programmering Denne guide er oprindeligt udgivet på Eksperten.dk Hvad er Objekter - Programmering En rigtig god gennemgang af hvad objekter er! Hvordan de oprettes og anvendes! Det er helt klart til nybegyndere, som

Læs mere

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning Datalogi OB, Efterår 2002 OH er, forelæsning 10/9-2002 Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Eftermiddagens opgave:

Læs mere

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

PHP 3 UGERS FORLØB PHP, MYSQL & SQL PHP 3 UGERS FORLØB PHP, MYSQL & SQL Uge 1 & 2 Det basale: Det primære mål efter uge 1 og 2, er at få forståelse for hvordan AMP miljøet fungerer i praksis, og hvordan man bruger PHP kodesproget til at

Læs mere

Noter til C# Programmering Iteration

Noter til C# Programmering Iteration Noter til C# Programmering Iteration Programflow Programmer udfører det meste af deres arbejde vha. forgrening og løkker. Løkker Mange programmeringsproblemer kan løses ved at gentage en handling på de

Læs mere

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden.

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden. Programmering 1999 Forelæsning 5, tirsdag 14. september 1999 Oversigt Mere om klasser og objekter Klassefelter: static Konstante felter: final Indkapsling og synlighed: private og public Overlæsning af

Læs mere

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1. Programmering 1999 Forelæsning 4, fredag 10. september 1999 Klasser og objekter Felter, konstruktorer, this Eksempler på klasser: Time, Appointment Eksempler på metoder i Time og Appointment Klassefelter:

Læs mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Objekters tilstand og opførsel BlueJ og Greenfoot Java Skabelse af objekter (via new-operatoren) Iteration (gentagelser) og parametrisering Forskellige slags variabler Afleveringsopgave:

Læs mere

Forelæsning Uge 6 Mandag

Forelæsning Uge 6 Mandag Forelæsning Uge 6 Mandag Funktionel programmering i Java (Kapitel 5) Forskellen på imperative og funktionelle programmeringssprog Lambda'er (kodestumper, der kan bruges som parametre i et metodekald) Streams

Læs mere

DM502. Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/

DM502. Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/ DM502 Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/ 1 DM502 Bog, ugesedler og noter De første øvelser Let for nogen, svært for andre Kom til øvelserne! Lav opgaverne!

Læs mere

Der er fejl i programmer. Ikke-trivielle programmer er næsten altid fejlbehæftede.

Der er fejl i programmer. Ikke-trivielle programmer er næsten altid fejlbehæftede. Udvidet Programmering 1999 Forelæsning 22, tirsdag 23. november 1999 Indkøring versus afprøvning af programmer Intern afprøvning Ekstern afprøvning Programkommentarer og dokumentation Programmering 1999

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter side 1 af 9 sider Skriftlig eksamen i Datalogi Modul 1 Vinter 1999/2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 5% Opgave 2

Læs mere

Forelæsning Uge 12 Torsdag

Forelæsning Uge 12 Torsdag Forelæsning Uge 12 Torsdag Protected access Alternativ til public og private Abstrakte klasser og interfaces En abstrakt klasse er en klasse, som man ikke kan lave instanser (objekter) af En abstrakt klasse

Læs mere

BILLEDREDIGERING (IMAGES)

BILLEDREDIGERING (IMAGES) BILLEDREDIGERING (IMAGES) I dette projekt skal I redigere gråtonebilleder ved hjælp af nogle af de teknikker, der blev beskrevet i en forelæsning. Hent BlueJ-projektet Image (zip) og husk at pakke det

Læs mere

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag Forelæsning Uge 3 Torsdag Billedredigering Gråtonebilleder (som er lidt simplere end farvebilleder) Rekursive metoder Metoder der kalder sig selv Giver ofte meget elegante og simple løsninger på komplekse

Læs mere

Kapitel 4 Løkker i C#

Kapitel 4 Løkker i C# Kapitel 4 Løkker i C# Løkker en vigtig del af alle programmeringssprog, og C# er ikke andeles. En løkke er en måde at udføre en del af koden gentagne gange. Ideen er at du fortsætter med at udføre en opgave

Læs mere

Test af It-komponent

Test af It-komponent Test af It-komponent I programmeringssproget Java Programmet Login service Elev: Mads Funch Klasse 2.4 Mat, It, Programmering Skole: Roskilde Tekniske Gymnasium HTX Underviser: Karl Dato: 31-08-2016 Side

Læs mere

DM01 DM01. 4. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 13/5-2003. Side 1 af 7

DM01 DM01. 4. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 13/5-2003. Side 1 af 7 DM01 DM01 4. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk D12, Elias 13/5-2003 Side 1 af 7 DM01 Indholdsfortegnelse: BILAG:...2 1 FORMÅL:...3 2 KLASSER:...4 2.1 DNA2:...4 2.1.1 METODER:...4

Læs mere

Introduktion til ActionScript

Introduktion til ActionScript Introduktion til ActionScript Kaspar Rosengreen Nielsen kaspar@interactivespaces.net i n t e r a c t i v e s p a c e s. n e t Kaspar Nielsen, kaspar@interactivespaces.net 1 Dagens program Opsamling på

Læs mere

DANSK SKOLEDATA APS. Tlf. 86 44 80 99 E-mail DSD@skoledata.dk DSA-Ventelisten

DANSK SKOLEDATA APS. Tlf. 86 44 80 99 E-mail DSD@skoledata.dk DSA-Ventelisten Indholdsfortegnelse Overordnet beskrivelse af programmets funktioner... 2 Log på... 2 Manuel oprettelse af elev.... 3 Optagelse af elever... 3 1 Gruppering og sortering af elever... 3 2 Udvælg aspiranter...

Læs mere

Forelæsning Uge 12 Mandag

Forelæsning Uge 12 Mandag Forelæsning Uge 12 Mandag Protected access Alternativ til public og private Abstrakte klasser og interfaces En abstrakt klasse er en klasse, som man ikke kan lave instanser (objekter) af En abstrakt klasse

Læs mere

Syntaks og syntaksgenkendelse, særligt regulære udtryk og tilstandsmaskiner og lidt om anvendelser i bioinformatik

Syntaks og syntaksgenkendelse, særligt regulære udtryk og tilstandsmaskiner og lidt om anvendelser i bioinformatik Datalogi C, RUC Forelæsning 22. november 2004 Henning Christiansen Syntaks og syntaksgenkendelse, særligt regulære udtryk og tilstandsmaskiner og lidt om anvendelser i bioinformatik Dagens program Hvad

Læs mere

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) int wmid, wmevent; PAINTSTRUCT Introduktion ps; til HDC hdc; programmering med switch (message) case WM_COMMAND: wmid = LOWORD(wParam);

Læs mere

Eksamens spørgsmål Software Construction. Objekter. Spørgsmål 1: Januar Giv en beskrivelse af Objekt-begrebet og deres brug

Eksamens spørgsmål Software Construction. Objekter. Spørgsmål 1: Januar Giv en beskrivelse af Objekt-begrebet og deres brug Spørgsmål 1: Objekter Giv en beskrivelse af Objekt-begrebet og deres brug Under eksaminationen forventes du at forklare: Hvad er en type og en variabel? Hvordan erklæres en variabel? Hvad forstås ved en

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del III Institut for matematik og datalogi Syddansk Universitet 10. april, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Sekvensafstand DM34 - Eksamensopgave. Jacob Aae Mikkelsen

Sekvensafstand DM34 - Eksamensopgave. Jacob Aae Mikkelsen Sekvensafstand DM34 - Eksamensopgave Jacob Aae Mikkelsen 19 10 76 kokken@grydeske.dk 27. maj 2005 Resumé Rapporten her beskriver tre forskellige rekursive metoder til at sammenligne tekst strenge med.

Læs mere

Sproget Rascal (v. 2)

Sproget Rascal (v. 2) Sproget Rascal (v. 2) Til brug i K1 på kurset Oversættere Opdateret 29/11 2004 Abstract Rascal er et simpelt Pascal-lignende imperativt sprog. Dette dokument beskriver uformelt Rascals syntaks og semantik

Læs mere

Integer.parseInt(args[0]) konverterer tegnstreng (f.eks. "10") til heltal (10). if (udtryk) else

Integer.parseInt(args[0]) konverterer tegnstreng (f.eks. 10) til heltal (10). if (udtryk) else Programmering 1999 Forelæsning 2, fredag 3. september 1999 Betingede ordrer: if-, if Indlejrede betingede ordrer Løkker med begrænset iteration: for Løkker med ubegrænset iteration: while Betingede ordrer,

Læs mere

Programmering i C. Lektion september 2009

Programmering i C. Lektion september 2009 Programmering i C Lektion 2 14. september 2009 Kontrolstrukturer Udvælgelse Gentagelse Eksempler Kommentarer Format - scanf og printf 2 / 27 Fra sidst 1 Kontrolstrukturer 2 Udvælgelse 3 Gentagelse 4 Eksempler

Læs mere

Grundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering

Grundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering Skriftlig eksamen i Grundlæggende Programmering ITU, 20. januar 2000 Alle hjælpemidler tilladt, dog ikke datamat. Eksamen er skriftlig, fire timer, og bedømmes efter 13-skalaen. Opgavesættet består af

Læs mere

Afstande, skæringer og vinkler i rummet

Afstande, skæringer og vinkler i rummet Afstande, skæringer og vinkler i rummet Frank Nasser 9. april 20 c 2008-20. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her.

Læs mere

Mircobit Kursus Lektion 1

Mircobit Kursus Lektion 1 Mircobit Kursus Lektion 1 I denne lektie skal vi se nærmere på den lille mini computer kaldt microbit. Egentlig kræver det at man har en fysisk microbit men man kan også næsten lave det samme med den simulator

Læs mere

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999 sammenligninger, hvor Programmering 1999 Forelæsning 17, tirsdag 2 november 1999 Søgning efter en given værdi i en tabel Lineær søgning og binær søgning Effektivitet: maskinuafhængig vurdering af køretid

Læs mere