Objektsamlinger med et fast (på forhånd kendt) antal elementer Velkendt fra mange andre programmeringssprog

Størrelse: px
Starte visningen fra side:

Download "Objektsamlinger med et fast (på forhånd kendt) antal elementer Velkendt fra mange andre programmeringssprog"

Transkript

1 Forelæsning Uge 9 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 kode stående flere steder Mundtlig præsentation Kan som alt andet trænes De næste uger vil vi gøre det systematisk Vi vil fokusere på mundtlig eksamen Men det i lærer, vil også være nyttigt i mange andre situationer Afleveringsopgave: Dronninger (Queens)

2 Arrays Arrays har et fast (på forhånd kendt) antal elementer Ligner Collections, men er bygget direkte ind i Java sproget med egen specialtilpasset syntax Skal ikke importeres 1. Erklæring (som feltvariabler) private String[] texts; private int[] hourcounts; 2. Initialisering (ofte i konstruktør) hourcounts = new int[24]; Eksempler på brug count = hourtcounts[hour]; hourtcounts[hour] = value; hourcounts[hour]++; De firkantede parenteser angiver, at det er et array Kan også bruges på primitive typer Udtrykket i [ ] skal evaluere til et ikke negativt heltal, som angiver størrelsen Udtrykkene i [ ] skal evaluere til et heltal i intervallet [0,23] (ellers runtime fejl) Antal elementer i { } bestemmer størrelsen Oprettelse og initialisering med værdier kan slås sammen private int[] monthlength = new int[]{31,28,31,30,,30,31}; 2

3 To metoder, der bruger et array Indlæser data fra logfil og opdaterer hourcounts med det antal events, der er indtruffet i den pågældende klokketime public void analyzehourlydata() { while(reader.hasmoreentries()) { LogEntry entry = reader.nextentry(); int hour = entry.gethour(); hourcounts[hour]++; } } Opdatering af arrayet Udskriver antal events indtruffet i hver klokketime Collection:.size() Array:.length Længden af arrayet Variabel (ingen parenteser bagefter) Arrayets index'er nummereres fra 0 til length-1 public void printhourlycounts() { System.out.println("Hr: Count"); for(int hour = 0; hour < hourcounts.length; hour++) { System.out.println(hour + ": " + hourcounts[hour]); } } Opslag i arrayet 3

4 for løkker brugt på arrays Javas for-each løkke kan også bruges på arrays private String[] urls; for(string url : urls) { System.out.println(url); } for løkken giver adgang til at bruge indexet for(int hour=0; hour < hourcounts.length; hour++) { System.out.println( hour + ": " + hourcounts[hour]); } Det gør for-each løkken ikke for(int value : hourcounts) { System.out.println(???? + ": " + value); } 4

5 Forskelle på arrays og arraylister Arrays har et fast (på forhånd kendt) antal elementer Kan anvendes på primitive typer (uden brug af wrapper klasse) Simplere syntax Erklæring Initialisering Kald private int[] hourcounts; private ArrayList<Integer> hourcounts; hourcounts = new int[24]; hourcounts = new ArrayList<>(); hourcounts[13]; hourcounts.get(13); Velegnet til at håndtere flerdimensionele strukturer minutecounts = new int[24][60]; secondcounts = new int[24][60][60]; Indbygget i Java sproget Giver mere effektiv implementering hurtigere kode og simplere syntax Kendt fra mange andre programmeringssprog Ikke en del af Collection frameworket Men man kan alligevel bruge for-each løkker på dem Array objekter har ikke metoder (i stedet kan man bruge klassemetoder fra forskellige klasser bl.a. java.util.arrays) 5

6 Eksempler på brug af arrays En arrayliste er en liste af objekter implementeret ved hjælp af et array Der er ubrugte elementer i arrayet, således at man kan indsætte nye elementer i arraylisten Når alle elementer er brugt, udskiftes arrayet med et nyt (og større) En tekststreng (objekt af typen String) er en liste af tegn (char) implementeret ved hjælp af et array 6

7 Adressebog med personer String objektet er implementeret via et char array Arraylisten er implementeret via et Object array 7

8 Billedrepræsentation via arrays 0 0 j width-1 Gråtoneværdi: Pixel (x,y) [0..255] hvor 0 ~ sort og 255 ~ hvid i To dimensionelt array private int[][] pixels = new int[width][height]; height-1 Elementtypen er int Størrelsen er width x height 8

9 Skab et billede public class Image // Feltvariabler private int width, height; private String title; private int[][] pixels; 2-dimensionelt array... // Konstruktør public Image(int width, int height, String title){ this.width = width; j this.height = height; 0 0 this.title = title; pixels = new int[width][height]; // Lav alle pixels hvide for(int i=0; i < height; i++) { for(int j=0; j < width; j++) { i pixels[i][j] = 255; } }... } Hvid } height width 9

10 Afbildning via arrays En afbildning Map<Integer, V> kan erstattes af et array V[ ] Forudsætter at vi på forhånd ved, hvilket interval af heltal nøglerne befinder sig i At der ikke er for store "huller" imellem nøglerne Hvis de brugte nøgler ligger i intervallet [min, max] repræsenteres afbildningen ved et array V[max min+1], og nøgler konverteres til indices ved at subtrahere min : Map<integer,String> 2 "Peter" 4 "Ole" 9 "Ida" 8 "Ole" : String[] String "Peter" String "Ole" String "Ida" De fire andre array indgange er lig null 10

11 Nyttige metoder Konvertering fra lister til arrays ArrayList og andre List klasser indeholder metoden toarray, der konverterer listen til et array Klassen java.util.arrays indeholder nogle nyttige klassemetoder til manipulation af arrays, heriblandt stream returnerer en Stream med elementerne i et array equals tester om to arrays er ens (samme elementer i samme rækkefølge) tostring tekstrepræsentation af et array og dets elementer [e 0, e 1,...,e last ] fill opdaterer alle elementer i et array til en specificeret værdi copyof kopierer arrayet og ændrer længden sort sortering af elementerne i et array binarysearch søgning i et array aslist returnerer en (fixed-size) List implementeret via et array List<String> names = Arrays.asList("Peter", "Anna", "Sofus", "Ida"); int[] array = new int[height]; Arrays.fill(array, 255); Arrays.fill(elems, array); List<T> aslist( T... a) Metoden har et variabelt antal parametre, som alle er af typen T 11

12 Polymorfi Arrays klassen har næsten 200 metoder De fleste metoder findes i 9 versioner (en for hver primitive type og en for objekt typer) Det slipper vi for ved Collections (idet de kun arbejder på objekt typer) 12

13 Mini-quiz om arraylister og arrays Hvor mange af nedenstående erklæringer er ulovlige? FEJL OK OK FEJL OK OK OK FEJL private ArrayList<int> hourcounts; private ArrayList<String> texts; private ArrayList<Integer> hourcounts; private ArrayList<Integer><Integer> mincounts; private boolean[] bits; private String[] texts; private double[][][] numbers; private Integer[[]] hourcounts; ArrayList kan kun bruges på objekt typer Skal i stedet skrives ArrayList<ArrayList<Integer>> Parenteserne kan ikke være inde i hinanden 13

14 Principper for design af klasser Software er ikke er ikke noget, der laves på kort tid for derefter at forblive uændret i al sin levetid Software vedligeholdes (rettes, udvides, tilpasses, porteres, ) Mange forskellige mennesker er involveret med en tidsmæssig udstrækning på flere årtier Software overlever kun, hvis det kan vedligeholdes ellers har det kort levetid (og dårlig økonomi) Principper for design af klasser så de bliver lette(re) at læse, vedligeholde og genbruge Undgå dublering af kode (code duplication) Løs kobling mellem klasserne (loose coupling) Sammenhængende klasser og metoder (cohesion) Responsibility-driven design Tænk fremad (think ahead) Regelmæssig omstrukturering (refactoring) 14

15 Undgå dublering af kode Vi vil gerne undgå at samme kode (sekvens af sætninger) forekommer flere steder Sparer tid både for dem, der skriver koden, og for dem, der skal læse og forstå koden Gør koden meget lettere at vedligeholde, idet man kun skal rette et sted Man undgår inkonsistente versioner, hvor en rettelse er foretaget nogle steder, men glemt andre steder Midler til at undgå dublering af kode Indpakning i hjælpemetode (private or public) God parametrisering af metoder, så man kan nøjes med én metode, i stedet for at have flere, der ligner hinanden I kapitel 10 skal vi se, at subklasser (med nedarvning) er fortrinlige til at undgå dublering af feltvariabler og deres tilhørende accessor og mutator metoder 15

16 Løs kobling mellem klasserne Klasser interagerer med hinanden via deres metoder og konstruktører Vi vil gerne kunne ændre implementationen af en klasse, uden at skulle ændre implementationen af alle de klasser, der bruger den Klasser der opfylder dette siges at være løst koblede Feltvariabler skal være private, således at de kan ændres uden at genere andre klasser Når feltvariabler er private, kan andre klasser kun tilgå dem via deres accessor og mutator metoder Disse metoder er lette at lokalisere og modificere, når implementationen ændres, idet de befinder sig i samme klasse som feltvariablerne Det er vigtigt, at signaturerne for metoder og konstruktører er så velvalgte og generelle, at man ikke behøver at ændre disse undervejs På et BlueJ klassediagram er mængden af pile en god indikation for koblingsgraden mellem klasserne Jo færre pile jo bedre 16

17 Sammenhængende (cohesion) Hver klasse skal være en sammenhængende enhed Det betyder at klassen skal håndtere ét problemkompleks, og alle de data og metoder, der hører til denne Hvis en klasse håndterer to eller flere forskellige problemkomplekser, kan klassen med fordel opdeles i to eller flere klasser Opdelingen gør det nemmere for brugeren at finde de rigtige metoder, og nemmere for programmøren at lokalisere de steder, som skal ændres, når der laves en opdatering Metoder skal også være sammenhængende En metode, der konstruerer en tekststreng, og udskriver den på terminalen, kan med fordel ændres til at returnere den konstruerede tekststreng Det er så op til klassen, der kalder metoden, at beslutte, hvad tekststrengen skal bruges til. Den kan udskrives, lægges ind i en HashMap, analyseres eller noget helt fjerde Metoder, der kun gør én ting, har langt større sandsynlighed for at kunne bruges i mange forskellige sammenhænge 17

18 Responsibility-driven design Hver klasse bør være ansvarlig for håndtering af egne data Klassen bør f.eks. have en (eller flere) metoder der returnerer en tekststreng, som beskriver objektets tilstand (eller dele heraf) Andre klasser kunne selv gøre det ved at få den nødvendige information via accessor metoder og stykke den sammen til en tekststreng Men det ville betyde, at disse klasser skal tilpasses, hver gang der tilføjes/fjernes feltvariabler Når de metoder, der skal ændres, er i samme klasse som feltvariablerne, er det langt mere sandsynligt, at man husker at ændre dem, og det er langt hurtigere at lokalisere de steder, hvor ændringerne skal foretages 18

19 Tænk fremad Prøv at forudse fremtidige ændringer/tilføjelser Eksempel: Når man designer de første versioner af et computerspil, vil det være nærliggende, at interaktionen med brugere på et tidspunkt skal ske via et grafisk interface i stedet for tekstbaseret input/output via terminalen Hvis man fra start forsøger at samle de ting, der har med burgerinteraktionen at gøre, i en enkelt klasse, bliver det sidenhen meget lettere at ændre interaktion fra at være tekstbaseret til at være grafisk Hvis man i begyndelsen bruger lidt tid på at forudse mulige fremtidige ændringer/tilføjelser og forberede disse kan man senere spare enorme mængder af tid og kræfter 19

20 De fem C'er for godt design af klasser Cohesion (sammenhængende) Klassen håndterer ét problemkompleks Turtle klassen kan producere 2D stregtegninger (og intet andet) Completeness (komplet) Der er metoder til alt det, der er nødvendigt indenfor problemkomplekset Når pennen har en farve, bør der være metoder til at ændre/aflæse denne Convenience (bekvem) Almindelige ting kan gøres let og hurtigt Turtle klassen bliver mere bekvem efter tilføjelsen af jump og jumpto Når man skal tegne cirkler, er circle mere bekvem end polygon Clarity (transparens) Metoderne skal gøre det, man forventer af dem og kun det Det vil være forvirrende, hvis jump og jumpto også drejer skildpadden Consistency (konsistent) Metoderne skal fungere på "samme måde" Turtle klassen angiver alle afstande og vinkler som en double 20

21 Regelmæssig omstrukturering (refactoring) Når man er i gang med et større (eller mindre) projekt får man fra tid til anden behov for at omstrukturere sin kode Man kan f.eks. ønske at opdele en klasse, der er blevet stor og gør mange forskellige ting, i to eller flere klasser, som er nemmere at overskue Begreber, der indtil nu er repræsenteret ved hjælp af en simpel tekststreng, vil man måske fremover modellere via en dedikeret klasse med feltvariabler, der kan give en mere fyldestgørende beskrivelse af objekternes tilstand (jvf. Track klassen fra afsnit 4.11 i BlueJ bogen) Omstrukturering af software kaldes også refaktorering (refactoring) Principper for refaktorering Start med at lave den ønskede omstrukturering uden at tilføje ny funktionalitet Test at det ændrede program opfører sig som det gamle (vi vender tilbage til testteknikker i kapitel 9) Først når man er overbevist om, at det ændrede program er korrekt (dvs. opfører sig som det gamle) tilføjes ny funktionalitet Ved at iagttage denne tidsmæssige opdeling i refaktorering og tilføjelse af ny funktionalitet kan man spare masser af tid og kræfter 21

22 Mundtlig præsentation Det er vigtigt for it-folk at kunne præsentere tekniske problemstillinger for fagfæller og lægfolk Det er en essentiel del af vores faglige kompetencer, og I kommer alle til at gøre det i jeres daglige arbejde Mundtlig eksamen tester, at I kan jeres stof, og at I er i stand til at fremlægge det for andre (eksaminator og censor) Det sidste er slet ikke så let, som det lyder Mange eksaminander kan stoffet, men er dårlige til at præsentere det, hvilket medfører en for lav karakter i forhold til deres reelle viden 22

23 Mundtlig eksamen Ved den mundtlige eksamen forventer vi, at I demonstrerer Kendskab til de vigtigste begreber inden for det trukne emneområde Evne til at programmere i Java ved at præsentere små velvalgte programstumper indenfor emneområdet Evne til at svare på spørgsmål inden for emneområdet, herunder relatere kursets afleveringsopgaver til emneområdet Der gives karakter efter 12-skalaen Pointene fra køreprøven og computerspilsopgaven tæller med i fastlæggelsen af den endelig karakter for kurset Høje point kan trække en karakter op, mens lave point kan trække en karakter ned Uanset pointtal kan man dumpe, hvis den mundtlige præstation er uacceptabel 23

24 Forløbet af eksamen Ved eksaminationens start trækker i et spørgsmål (ud af 9 mulige) Mens den foregående eksaminand er oppe, har I ca. 15 minutter til at genopfriske detaljerne i det trukne spørgsmål I kan ikke nå at lære tingene, hvis I ikke kan dem i forvejen Under forberedelsen må I gerne kigge i noter, slides, lærebogen og andet materiale Præsentationen (ca. 15 min) De første 3-4 minutter får I lov til at skrive jeres disposition på tavlen og snakke uforstyrret (indtil den værste nervøsitet har lagt sig) Derefter vil eksaminator/censor afbryde med forskellige spørgsmål for at hjælpe jer med at rette eventuelle småfejl / uklarheder at få dækket de vigtigste ting indenfor emneområdet Jo bedre I har forberedt jer og jo mere initiativ I udviser jo bedre har I styr på, hvor I "kommer hen" under eksamen (f.eks. hvilke programmeringseksempler I skal gennemgå) Votering mv De næste 3-5 minutter bruges til votering, meddelelse og forklaring af jeres karakter samt skift til næste eksaminand 24

25 Træning gør mester Evnen til at lave gode mundtlige præsentationer kan forbedres kraftigt ved intensiv træning Vi vil derfor i kursets anden halvdel bruge den anden af de to ugentlige øvelsesgange på systematisk træning i mundtlig præsentation Det er obligatorisk at lave mindst 2 præsentationer af eksamensspørgsmål (som godkendes af instruktoren) I begyndelsen er det svært, men efterhånden bliver det lettere Husk på hvor gode, hurtige og sikre I blev til at programmere, da I trænede i ugerne op til køreprøven Det samme vil ske med jeres evne til at lave en god mundtlig præsentation Det vil hjælpe jer til eksamen i dette og efterfølgende kurser Nervøsitet Man kan træne sig op til at kunne håndtere nervøsitet og det er en stor hjælp at vide, at man godt kan Søg eventuel hjælp via universitets studievejledning Link 25

26 Organisering af træningen I uge bliver holdet ved ugens sidste øvelsesgang delt i to Den ene halvdel har øvelser på det normale øvelsestidspunkt Den anden halvdel har øvelser på et andet tidspunkt (se "Vigtig meddelelse") Ved hver øvelsesgang trænes 1-2 af de 9 eksamensspørgsmål Hvert spørgsmål præsenteres af 2-4 studenter (efter hinanden) Instruktoren fungerer som eksaminator Efter hver præsentation diskuteres, hvordan den kan forbedres Der er 6 uger med 4-6 præsentationer på hvert af de 2 delhold, dvs. ca. 60 præsentationer og dermed 2-3 til hver student En af de mest effektive måder at træne til eksamen, er at høre andre studerende (og lære af deres gode og dårlige ting) Vi opfordrer derfor kraftigt til, at I deltager i alle øvelsesgangene også de gange, hvor I ikke selv skal præsentere Vi opfordrer også til, at I under den rigtige eksamen går ind og hører nogle af jeres medstuderende Nogle synes, at det er "upassende" men faktisk vil det for langt de fleste eksaminander være betryggende, at der er "neutrale" tilhørere tilstede under eksaminationen 26

27 Forberedelse til mundtlig eksamen Disposition For hvert af de 9 spørgsmål laves en kort velgennemtænkt disposition A4-ark med ord (ingen figurer, formler, programstumper, eller lignende) Opremser de begreber og eksempler, som I vil præsentere Til eksamen starter I med at skrive dispositionen op i et hjørne af tavlen Dulmer ofte den værste nervøsitet Herefter lægges dispositionen helt væk (eller med bagsiden opad) I får ikke point for at kunne læse op af dispositionen Derfor skal den være kort og præcis Den er en huskeliste over, hvad I vil præsentere og i hvilken rækkefølge Valg af eksempler Det er vigtigt, at I på forhånd, for hvert af de 9 spørgsmål, har valgt nogle gode eksempler på Java kode, som I vil præsentere De skal være korte og tydeligt vise de ting, som I vil illustrere med dem Eksemplerne kan "stjæles" fra lærebogen, mine slides eller nogle af de opgaver, som I har lavet på kurset Brug tid på at finde gode eksempler, og tid på at træne i at præsentere dem Hvis I ikke selv præsenterer små velvalgte Java eksempler, finder vi nogle, som I skal præsentere og det gør ikke opgaven lettere 27

28 Træning gør mester Hvert spørgsmål bør trænes mindst 5 gange Træningen skal være så realistisk som overhovedet muligt Det er ikke nok at tænke på, hvad I vil sige og skrive I skal formulere sætningerne og sige dem højt I skal skrive tingene på et whiteboard eller et stykke papir I skal gennemgå alle de ting, som I har på jeres disposition Eksamen er ikke en test i skønskrift men det er oplagt en fordel at eksaminator og censor kan læse det, som I skriver Det er forbavsende svært at skrive læseligt på et whiteboard (øv jer i det) Hold fornuftig tavleorden I må gerne forkorte lange navne og lignende og bruge gentagelsestegn/ streger (øv jer I at gøre det på en god måde) Visk ikke noget ud (bortset fra smårettelser) Eksaminator og censor tæller alt det med, som I har skrevet og sagt Hold jer til dispositionen Lad være med at improvisere undervejs Opfind ikke nye eksempler, som I ikke har gennemtænkt Under de sidste træninger bør I ved hjælp af et ur tjekke, at I har stof nok til 10 minutter hverken mere eller mindre De sidste 5 minutter (af de 15 minutter som eksaminationen varer) bruges til at besvare spørgsmål fra eksaminator og censor 28

29 Gode råd omkring eksamen Det er tilladt at lave sine egne eksempler eller finde dem på nettet Dette anbefales dog ikke. Dels skal I bruge længere tid på at forklare dem (da eksaminator og censor ikke kender dem i forvejen) Dels kan I ikke så godt få hjælp (fra eksaminator og censor), hvis der opstår problemer under præsentationen Men I må gerne tilpasse eksempler fra lærebog og slides, f.eks. ved at fjerne nogle af feltvariablerne og udelad andre dele, som I ikke anvender Husk at præsentere de overordnede begreber inden du kaster dig ud i detaljeret Java kode Fx vil det for spørgsmålet om grafiske brugergrænseflader være rimeligt at starte med at snakke om AWT, Swing og JavaFX, og at man vil bruge en kombination af de to første Analogt vil det for exceptions være en god ide at opridse figuren, der viser forskellige exception typer, og bruge figuren til at beskrive, hvordan compileren skelner Error mellem checked og unchecked exceptions. Throwable Exception sta us MyCheckedException RuntimeException MyUncheckedException 29

30 Gode råd omkring eksamen (fortsat) Vis at du forstår, hvad der ligger bag de navne vi bruger i bogen / på kurset Sig fx, at det er compileren, der tjekker en checked exception, og at det den tjekker er, at man på kaldsstedet håndterer den rejste exception (enten ved at placere metodekaldet i en try-catch statement eller ved at propagere den rejste exception til omgivelserne ved at tilføje throws i metodens header) Analogt bør man sige, at regression tests er automatiske tests, der let kan gentages når man har ændret sin kode for at undersøge om der skulle være sket regression (tilbageslag/forringelse) i form af, at man har introduceret nye fejl under ændringerne Man må gerne inddrage relevante ting fra andre spørgsmål Fx vil det være helt relevant at nævne, at brug af en subklasser er fortrinlig til at undgå kodeduplikering Analogt kan man, når man snakker om ArrayList og HashMap, bruge List og Map som de statiske typer for sine variable, og fortælle at dette gør det lettere at skifte mellem forskellige implementationer af de to interfaces (ArrayList, LinkedList, HashMap, TreeMap, osv.) 30

31 Gode råd omkring eksamen (fortsat) Brug ikke for megen tid på ting, der primært hører til andre spørgsmål Fx er det faktum, at man i en subklasses konstruktør, som det allerførste skal kalde superklassen konstruktør noget, der er generelt for nedarvning mellem klasser Det hører derfor naturligt til spørgsmålet om nedarvning, mens det er mindre relevant, hvis det præsenteres under spørgsmålet om abstrakte klasser og interfaces Her vil det være bedre at have lidt tid til at snakke om funktionelle interfaces (hvad de er og hvordan I har brugt dem) samt at snakke om, hvordan interfaces og abstrakte klasser bruges i Collection hierarkiet. 31

32 Videoer om mundtlig eksamen Vi har produceret to videoer, som viser eksemplariske eksamenspræsentationer Det er en rigtig god ide at gennemse disse videoer gerne flere gange Videoerne giver en masse gode råd om, hvad man bør gøre og hvad man bør undgå Video 1: Arrays Videoen findes under Uge 9, og kan ses, så snart I har læst kapitel 7 i BlueJ bogen Nikolaj Schwartzbach (kursets administrative instruktor) har hovedrollen som eksaminand Video 2: Graphical User Interfaces Videoen findes under Uge 13, og kan ses, så snart I har læst kapitel 13 i BlueJ bogen Malene Engebjerg (en gymnasielærer fra Ålborg) har hovedrollen som eksaminand 32

33 Afleveringsopgave: Dronninger (Queens) I skal skrive et rekursivt program, der ved hjælp af backtracking finder alle løsninger til det såkaldte 8-dronningeproblem I skal placerede 8 dronninger på et 8 x 8 skakbræt, således at ingen af dronningerne kan slå hinanden Den enkelte dronning må ikke have andre dronninger i den række, søjle og de to diagonaler, som går igennem dens position Mere generelt skal I løse n-dronningeproblemet I skal placerede n dronninger på et n x n skakbræt, således at ingen af dronningerne kan slå hinanden (for n 1). Repræsentation af dronningernes position på skakbrættet 2-dimensionelt array boolean[n][n], hvor den boolske værdi angiver, om der står en dronning på feltet eller ej Men vi ved, at der højst kan være en dronning i hver række 1-dimensionelt array int[n], hvor heltallet angiver, den position som dronningen i den pågældende række har queens[3] == 5 betyder, at dronningen i række 3 står i søjle 5 Som sædvanlig starter vi nummereringen med 0, dvs. række 0 og søjle 0 33

34 positionqueens metoden (rekursiv metode) Den centrale metode i programmet hedder positionqueens og fungerer som følger Et kald med parameterværdien 0 placerer en dronning i række 0, for derefter at kalde metoden med parameterværdien 1, hvilket placerer en dronning i række 1, for derefter at kalde metoden med parameterværdien 2, hvilket placerer en dronning i række 2, for derefter at kalde metoden med parameterværdien 3, osv. Undervejs kan det være nødvendigt at back-tracke Et kald, hvor parameterværdien er lig med antallet af dronninger, betyder, at vi har fået alle dronninger placeret Vi udskriver den fundne løsning Derefter returnerer kaldet, og vi fortsætter med at finde de øvrige løsninger Når vi har afprøvet alle muligheder stopper vi 34

35 Hvordan fungerer positionqueens? Kald (7) Række 7 Kald (6) Kald (5) Kald (4) Kald (3) Og så videre.. Alle muligheder prøvet For 8 dronninger findes første løsning Rekursive efter kald returnerer 876 Række Alle positioneringer muligheder 4 prøvet 114 Rekursive rekursive kald returnerer Godt vi ikke skal gøre det manuelt Kald (2) Række 2 Kald (1) Kald (0) Problemet vokser meget hurtigt, når vi øger antallet af dronninger Dronninger Løsninger Rekursive Række kald 0 Tid 8 92 Godt 2 tusinde 1 millisekund Knap 1 million Under 1 sekund Søjle 0 Søjle 2 Søjle 16 4 Knap 15 millioner Søjle Godt 7 1 milliard Nogle få minutter 35

36 legal metoden Skal tjekke om det er legalt at placere en dronning på et givet felt (0,0) Kan vi placere en dronning her? Vi skal tjekke søjlen og de to diagonaler Vi behøver ikke at tjekke opad (der har vi endnu ikke placeret dronninger) Det gør ikke noget, at vi kommer uden for brættet (der er vi helt sikre på ikke at finde en dronning) Det er vigtigt at denne metoder er effektiv For 8 dronninger kaldes den godt 15 tusinde gange For 12 dronninger kaldes den godt 10 millioner gange For 16 dronninger kaldes den godt 18 milliarder gange Metoden bruger godt halvdelen af den samlede beregningstid 36

37 Udskrift legal metoden (fortsat) Det er selvfølgelig også vigtigt at legal metode er korrekt Lav en grundig aftestning, før I forsøger at bruge den i positionqueens Det kan f.eks. gøres som vist nedenfor public void testlegal(int n, int... pos) { noofqueens = n; Initialiser feltvariabler queens = Arrays.copyOf(pos, n); System.out.print(n + "x" + n + " with queens in: " + Arrays.toString(pos) + " => Legal positions: "); for(int i=0; i < n; i++) { if( legal(pos.length,i) ) { System.out.print(i + " ") }; } System.out.println(); } testlegal(8,4,6,3,5); (0,0) 37

38 convert metoden Skal konvertere fra (row,col) notation til den sædvanlige skaknotation, hvor f.eks. (5,3) skrives som d6 Søjle før række Rækken: [0,7] [1,8] Søjlen: [0,7] [a,h] Nyttigt trick Bogstaverne har successive heltalsværdier a ~ 97, b ~ 98, c ~ 99, d ~ 100, e ~ 101, osv. 5 (char)('a' + 2) (char)(97 + 2) (char)(99) 'c' 'a' forfremmes til heltallet begrænses til 'c' 3 Alternativt kan man lave et char array med alle bogstaverne og så slå op i det Begge løsninger fungerer kun godt for col < 26 Husk at afteste convert metoden, før I bruger den 38

39 Udskrift af tabeller Når man skal udskrive tabeller som nedenstående, kan det være hensigtsmæssigt at bruge format metoden (i stedet for println) System.out.format(" %3d %,12d %,8d %,8d %n", noofqueens, noofsolutions, duration, noofsolutions/duration); Format metoden tager et variabelt antal parametre Første parameter angiver formatet af den tekststreng, der skal udskrives, men de øvrige parametre angiver værdier, der skal indsættes i tekststrengen Format parameteren indeholder nogle format specifiers F.eks. angiver %,12d, at der på dette sted, skal udskrives et heltal, der skal fylde 12 tegn med et komma indsat for hver tredje %n angiver linjeskift (new line) Der er tilsvarende format specifiers for reelle tal, datoer og tidspunkter Detaljer kan ses på: Link 39

40 Opsummering Arrays Objektsamlinger med et fast (på forhånd kendt) antal elementer Velkendt fra mange andre programmeringssprog Principper for design af klasser Undgå dublering af kode (code duplication) Løs kobling mellem klasserne (loose coupling) Sammenhængende klasser og metoder (cohesion) Ansvarsfuldt design (responsibility-driven design) Tænk fremad (think ahead) Regelmæssig omstrukturering (refaktorering) Mundtlig præsentation Kan som alt andet trænes De næste uger vil vi gøre det systematisk Vi vil fokusere på mundtlig eksamen Men det i lærer, vil også være nyttigt i mange andre situationer Afleveringsopgave: Dronninger (Queens) 40

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

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

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

Objektsamlinger med et fast (på forhånd kendt) antal elementer Velkendt fra mange andre programmeringssprog

Objektsamlinger med et fast (på forhånd kendt) antal elementer Velkendt fra mange andre programmeringssprog Forelæsning Uge 9 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 kode

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

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

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

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

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

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

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

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

Forelæsning Uge 15. Design af applikationer Designmønstre Computerspil 5 Exceptions og filhåndtering

Forelæsning Uge 15. Design af applikationer Designmønstre Computerspil 5 Exceptions og filhåndtering Forelæsning Uge 15 Design af applikationer Designmønstre Computerspil 5 Exceptions og filhåndtering Mundtlig eksamen Kursusevaluering Fraktaler og Mandelbrotmængden Smukke computergenererede billeder Design

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Software Construction 1 semester (SWC) Spørgsmål 1

Software Construction 1 semester (SWC) Spørgsmål 1 Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /

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

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

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

Forelæsning Uge 11. Nedarvning. Object klassen. Projektopgave om computerspil

Forelæsning Uge 11. Nedarvning. Object klassen. Projektopgave om computerspil Forelæsning Uge 11 Nedarvning En klasse kan være en subklasse af en anden Det betyder at subklassen arver superklassens feltvariabler og metoder Object klassen Superklasse for alle klasser Indeholder en

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

Tree klassen fra sidste forelæsning

Tree klassen fra sidste forelæsning Programmering 1999 Forelæsning 12, fredag 8. oktober 1999 Oversigt Abstrakte klasser. Grænseflader. Programmering 1999 KVL Side 12-1 Tree klassen fra sidste forelæsning class Tree { int age; // in years

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

Kursus navn: Indledende programmering Kursus nr. 02101

Kursus navn: Indledende programmering Kursus nr. 02101 Danmarks Tekniske Universitet Side 1 af 8 sider Skriftlig prøve, den 15. december 2007 Kursus navn: Indledende programmering Kursus nr. 02101 Tilladte hjælpemidler: Alle skriftlige hjælpemidler Vægtning

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

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

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

DM507 Algoritmer og datastrukturer

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

Læs mere

Har kun én enkelt abstract metode De steder, hvor man skal bruge et objekt, hvis type er et funktionelt interface, kan man i stedet bruge en lambda

Har kun én enkelt abstract metode De steder, hvor man skal bruge et objekt, hvis type er et funktionelt interface, kan man i stedet bruge en lambda Forelæsning Uge 12 Abstrakte klasser og interfaces En abstrakt klasse er en klasse, som man ikke kan lave instanser af En abstrakt klasse kan indeholde abstrakte metoder, hvor kun hovedet er angivet, mens

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

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

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

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree.

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree. Programmering 1999 Forelæsning 11, tirsdag 5. oktober 1999 Oversigt Klasse-hierarkier: superklasser og subklasser Nedarvning Polymorfi Programmering 1999 KVL Side 11-1 Hierarkier En klasse repræsenterer

Læs mere

Programmering 2. dprog2 E2012. http://www.cs.au.dk/dprog2/

Programmering 2. dprog2 E2012. http://www.cs.au.dk/dprog2/ Programmering 2 dprog2 E2012 http://www.cs.au.dk/dprog2/ Læringsmål Deltagerne skal ved afslutningen af kurset kunne: forklare og anvende både basale og videregående elementer af et moderne programmeringssprog,

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

Programmering 2. dprog2 E2013. http://www.cs.au.dk/dprog2/

Programmering 2. dprog2 E2013. http://www.cs.au.dk/dprog2/ Programmering 2 dprog2 E2013 http://www.cs.au.dk/dprog2/ Læringsmål Deltagerne skal ved afslutningen af kurset kunne: forklare og anvende både basale og videregående elementer af et moderne programmeringssprog,

Læs mere

DM507 Algoritmer og datastrukturer

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

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

Forelæsning Uge 15 Mandag

Forelæsning Uge 15 Mandag Forelæsning Uge 15 Mandag Design af applikationer Design mønstre Mundtlig eksamen Kursusevaluering Fraktaler og Mandelbrotmængden smukke computergenererede billeder Design af applikationer I dette kursus

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter Skriftlig eksamen i Datalogi Modul 1 Vinter 1998/99 Opgavesættet består af 5 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 16% Opgave 2 12% Opgave 3 10% Opgave

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

Klasser og nedarvning

Klasser og nedarvning Datalogi C, Efterår 2004 OH er, forelæsning 21/9-2004 Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Opgaven til senere: Generalisere

Læs mere

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

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

Eksempel: Skat i år 2000

Eksempel: Skat i år 2000 Kursus 02199: Programmering afsnit 2.1-2.7 Anne Haxthausen IMM, DTU 1. Værdier og typer (bl.a. char, boolean, int, double) (afsnit 2.4) 2. Variable og konstanter (afsnit 2.3) 3. Sætninger (bl.a. assignments)

Læs mere

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt. Merging og hashing Mål Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt. Dette emne er et uddrag af kurset DM507 Algoritmer og datastrukturer (2. semester). Mål

Læs mere

Spørgetime Redigeret 15/ Først gennemgår jeg slagets gang, derefter tjekker vi tidsplanen, og så må I spørge om elektronik mm.

Spørgetime Redigeret 15/ Først gennemgår jeg slagets gang, derefter tjekker vi tidsplanen, og så må I spørge om elektronik mm. Dagsorden for spørgetime: Først gennemgår jeg slagets gang, derefter tjekker vi tidsplanen, og så må I spørge om elektronik mm. Til slut sætter I jeres produkter op så de er klar til at blive præsenteret.

Læs mere

Forelæsning Uge 11. Nedarvning. Object klassen. Projektopgave om computerspil

Forelæsning Uge 11. Nedarvning. Object klassen. Projektopgave om computerspil Forelæsning Uge 11 Nedarvning En klasse kan være en subklasse af en anden Det betyder at subklassen arver superklassens feltvariabler og metoder Object klassen Superklasse for alle klasser Indeholder en

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2013 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 5. marts, 2013 Dette projekt udleveres i to 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

Om at gå til mundtlig eksamen en manual for studerende

Om at gå til mundtlig eksamen en manual for studerende Om at gå til mundtlig eksamen en manual for studerende Hans Hüttel 14. juni 2005 Folk ytrer tit en meget forståelig utryghed ved det at gå til mundtlig eksamen. Eksamen er en unormal situation og som eksaminand

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

Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations

Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations Tabelbegrebet Klassediagrammer (III) Tabeller og qualified associations originally by Michael R. Hansen modified/extended by Anne E. Haxthausen Informatics and Mathematical Modelling Technical University

Læs mere

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Finn Nordbjerg 1/9 Indledning I det følgende introduceres et par abstrakte

Læs mere

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til fjj@noea.dk. Besvarelsen skal

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2015 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 3. marts, 2015 Dette projekt udleveres i to dele. Hver del har sin deadline, således

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

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

dintprog Manual Revision: 731 September 30, 2009 1 Introduktion 3 1.1 Notation... 3 I Begreber 4 2 Grundbegreber om programmering 4

dintprog Manual Revision: 731 September 30, 2009 1 Introduktion 3 1.1 Notation... 3 I Begreber 4 2 Grundbegreber om programmering 4 dintprog Manual Revision: 731 September 30, 2009 Indhold 1 Introduktion 3 1.1 Notation................................. 3 I Begreber 4 2 Grundbegreber om programmering 4 3 Grundbegreber om modellering

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

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion Polymorfi Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type Coercion Tvangskonvertering (forfremmelse og begrænsning) Oversigt Abstrakt klasse abstrakt

Læs mere

Databaseadgang fra Java

Databaseadgang fra Java Databaseadgang fra Java Grundlæggende Programmering med Projekt Peter Sestoft Fredag 2007-11-23 Relationsdatabasesystemer Der er mange databaseservere Microsoft Access del af Microsoft Office MySQL god,

Læs mere

Forelæsning Uge 14 Mandag

Forelæsning Uge 14 Mandag Forelæsning Uge 14 Mandag Defensiv programmering Metoder og konstruktører bør tjekke de parameterværdier, som de kaldes med Derved kan man ofte undgå ulovlige handlinger, såsom at dividere med nul eller

Læs mere