Forelæsning Uge 6 Mandag

Størrelse: px
Starte visningen fra side:

Download "Forelæsning Uge 6 Mandag"

Transkript

1 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 (sekvenser af data / strømme af data) De fem algoritmeskabeloner implementeret ved hjælp af streams og lambda'er Sortering ved hjælp af lambda'er Forskellige typer objektsamlinger (Kapitel 6) Lister (kendt fra ArrayList) Sæt (mængder) Maps (afbildninger) Polymorfe variabler Dokumentation af jeres egne klasser

2 Imperative og funktionelle sprog De dele af Java, som I har set indtil nu, er imperative En udførsel af et program forstås som en række operationer, der ændrer systems tilstand, f.eks. via assignments til feltvariabler Objekt-orienterede sprog (og de fleste andre programmeringssprog) er (primært) imperative Eksempler: Java, C#, C og C++ Funktionelle programmeringssprog fungerer anderledes En udførsel af et program forstås som en evaluering af et matematisk udtryk (uden brug af assignments) Kan være sværere at lære/bruge, men gør ofte programmer kortere, mere letlæselige og nemmere at bevise korrekte Eksempler: Standard ML, OCaml, F#, Lisp, Haskell og Erlang Moderne sprog er ofte både imperative og funktionelle Java indeholder lambda'er (som I skal lære om i denne forelæsning) OCaml indeholder mutable data (som kan ændres med assignments) 2

3 Lambda calculus Funktionelle programmeringssprog bygger på lambda calculus Formalisme til beskrivelse af beregninger (introduceret i 1930) Java (imperativt sprog) public int f(int n) { return n+1; Funktion (metode) der lægger 1 til parameteren Standard ML (funktionelt sprog) fun f(n) = n+1; fn(n) => n+1; Anonym funktion Man angiver ikke typerne Dem regner compileren selv ud int int Lambda calculus n.n+1 I vil lære meget mere om -calculus i senere kurser 3

4 Funktionelle aspekter i Java Java er (primært) et imperativt programmeringssprog Men de nyere versioner af Java (fra og med version 8 i 2014) indeholder også aspekter fra funktionelle programmeringssprog Det gør sproget mere kompliceret at lære Til gengæld kan man (som I snart skal se) udtrykke visse ting simplere, mere elegant og mere læseligt De funktionelle dele af Java vinder hurtigt indpas og er dermed et "must" for alle kompetente Java programmører De er bl.a. yderst velegnede til processering (gennemsøgning) af collections (objektsamlinger) F.eks. skal vi om lidt se, at vi kan omskrive vores fem algoritmeskabeloner, så de bliver langt mere kompakte og letlæselige 4

5 Observationer af dyr (eksempel) public class Sighting { private final String animal; // Which animal private final int spotter; // Who saw it private final int count; // How many private final int area; // Where private final int period; // When public Sighting(String animal, int spotter, int count, int area, int period) { this.animal = animal; this.spotter = spotter;... public String tostring() { return animal + ", count = " + count + ", area = " + area + ", spotter = " + spotter + ", period = " + period;... Elephant, count = 24, area = 2, spotter = 3, period = 2 BlueJ bogen kalder metoden for getdetails Som vi skal se om et øjeblik, er det bedre at kalde den tostring 5

6 AnimalMonitor klassen import java.util.arraylist; public class AnimalMonitor { private ArrayList<Sighting> sightings; public AnimalMonitor() { this.sightings = new ArrayList<>(); // Add sightings from file public void addsightings(string filename) { SightingReader reader = new SightingReader(); sightings.addall( reader.getsightings(filename) ); public void printlist() { for(sighting s : sightings) { System.out.println( s );... Returnerer en ArrayList<Sighting> println metoden kalder automatisk tostring på s Elephant, count = 24, area = 2, spotter = 3, period = 2 6

7 Lambda'er i Java En lambda er en "kodestump" Kan bruges i et metodekald (som værdi for en parameter) Den kaldte metode kan så udføre kodestumpen Skellet mellem kode og data forsvinder Imperativ kode public void printlist() { for(sighting s : sightings) { System.out.println(s); For-each løkke Bruger kroppen på alle elementer Funktionel kode public void printlist() { sightings.foreach( s -> System.out.println(s)); foreach metode (i ArrayList) Tager en lambda som parameter Bruger lambda'en på alle elementerne 7

8 Java syntaks for Lambda'er Den generelle syntax er som følger (parameters) -> { code; Simplifikationer Hvis der kun er én parameter kan vi udelade ( ) Hvis kroppen kun har én sætning kan vi udelade { og semikolonnet parameter -> code Eksemplet fra før s -> System.out.println(s) 8

9 Streams i Java En stream er sekvens af data, f.eks. Elementerne i en collection (såsom en arrayliste) Data der "strømmer" ind via et netværk Tekstlinjer fra en tekstfil Tegn (char) fra en tekststreng (String) Karakteristika for streams Elementer tilgås ikke via et index (men i rækkefølge) De er immutable (rækkefølgen og elementer kan ikke ændres), men man kan lave en ny stream ud fra den gamle Streams kan være uendelige Elementer i en stream kan behandles parallelt på en multicore maskine Potentiel stor effektivitetsgevinst uden ekstra programmeringsindsats En arrayliste er ikke en stream Men ArrayList klassen har en metode, som skaber en stream ud fra arraylistens elementer (analogt for andre collections) 9

10 Streams har tre vigtige metoder (funktioner) filter funktionen Gennemløber en stream og skaber en ny indeholdende de elementer fra den gamle, som opfylder en given betingelse map funktionen Gennemløber en stream og skaber en ny ved at bruge en lambda på hvert element i den gamle stream reduce funktion Gennemløber en stream og returnerer en enkelt værdi (f.eks. ved at lægge alle værdierne i den gamle stream sammen) Stream med observationer af en given dyreart Stream med antal dyr, der er observeret i de enkelte observationer Total antal observationer 10

11 Pipelines (sammensætning af funktioner) Stream funktioner kan sættes sammen til en pipeline Nedenstående pipeline beregner hvor mange elefanter der er observeret Java (pseudokode) sightings.filter(animal == elephant).map(count).reduce(sum); For at få eksekverbar Java kode mangler vi to ting Arraylisten sightings skal "omdannes" til en stream Parametrene til filter, map og reduce funktionerne skal formaliseres 11

12 Opbygning af pipelines Pipelines er opbygget af en source (kilde) et antal intermediate (mellemliggende) operationer en terminal (afsluttende) operation, som producerer en værdi (eller har resultattypen void) Hver intermediate operation producerer en ny stream Eksemplet fra før sightings er kilden filter og map er intermediate reduce er terminal Man kan nemt lave andre beregninger Hvad gør denne pipeline? sightings.filter(animal == Elephant).map(count).reduce(sum); sightings.filter(spotter == spotterid).filter(period == dayid).map(count).reduce(sum); 12

13 Filter funktionen Gennemløber en stream og skaber en ny indeholdende de elementer fra den gamle, som opfylder en given betingelse Intermediate operation Udvælgelsen sker via et prædikat (predicate), dvs. en lambda med returtype boolean Input stream ændres ikke (streams er immutable) Skaber en stream ud fra arraylisten (metode i ArrayList) Prædikat, der bruger equals metoden fra String klassen til at afgøre, om det var elefanter, der blev observeret sightings.stream().filter( s -> s.getanimal().equals("elephant")).map(count).reduce(sum); Sighting -> boolean Vi specificerer ikke typen for variablen s Compileren ved at sourcen leverer Sighting objekter 13

14 Map funktionen Gennemløber en stream og skaber en ny ved at bruge en lambda på hvert element i den gamle stream Intermediate operation Mapningen sker ved hjælp af en lambda Input stream ændres ikke (streams er immutable) sightings.stream().filter( s -> s.getanimal().equals("elephant")).map( s -> s.getcount() ).reduce(sum); Sighting -> int Vi specificerer ikke typen for variablen s Compileren ved at sourcen, og dermed filter metoden, leverer Sighting objekter 14

15 Reduce funktionen Gennemløber en stream og returnerer én værdi Terminal operation Metoden har to parametre Første parameter er en startværdi Anden parameter er en lambda med to parametre Input stream ændres ikke (streams er immutable) sightings.stream().filter( s -> s.getanimal().equals("elephant")).map( s -> s.getcount() ).reduce( 0, (result, elem) -> result + elem ); Startværdi Java (pseudokode) for reduce funktionen int * int -> int result = startværdi; for (hvert element elem i stream) do { result = lambda(result, elem); return result; 15

16 Færdig metode (med streams og lambda'er) /** * Return the number of sightings of the specified animal. animal Type of animal. Count of sightings of the given animal. */ public int getcount(string animal) { return sightings.stream().filter( s -> s.getanimal().equals(animal)).map( s -> s.getcount() ).reduce( 0, (result, elem) -> result + elem ); Vores pipeline (med parameteren animal indsat i stedet for konstanten "Elephant") 16

17 Andre Stream metoder Stream klassen har ca. 40 forskellige metoder, hvoraf vi i det følgende vil bruge nedenstående count returnerer antallet af elementer i en Stream maptoint producerer en IntStream ud fra en Stream (ved hjælp af en brugerspecificeret lambda) sum returnerer summen af elementerne i en IntStream findfirst returnerer første element i en stream af typen Stream<T> som et objekt af typen Optional<T> Indeholder et objekt af type T ispresent() returnerer true get returnerer elementet To muligheder Alternativ til at bruge null til at angive, at man ikke har et objekt Er tomt ispresent() returnerer false Kald af get giver runtime fejl Ved at bruge maptoint og sum kan de sidste to linjer i return statementet på forrige slide simplificeres.map( s -> s.getcount() ).reduce( 0, (result, elem) -> result + elem );.maptoint( s -> s.getcount() ).sum(); I stedet for at skrive vores egen reduce funktion, har vi brugt sum fra IntStream klassen 17

18 Algoritmeskabelonerne, findone + findall Vores fem algoritmeskabeloner kan implementeres via streams og lambda'er public Optional<TYPE> findone( PARAM ) { return LISTE.stream().filter( elem -> TEST(elem, PARAM)).findFirst(); Lav en stream ud fra Arraylisten Returner det første af disse (som en Optional) Find de elementer, der opfylder TEST public List<TYPE> findall( PARAM ) { return LISTE.stream().filter( elem -> TEST(elem, PARAM)).collect(Collectors.toList()); Returner de fundne elementer som en objektsamling af typen List List og Collectors introduceres i afsnit

19 findnoof og findsumof public long findnoof( PARAM ) { return LISTE.stream().filter( elem -> TEST(elem, PARAM)).count(); Lav en stream ud fra Arraylisten Tæl hvor mange der er (returnerer en long) Find de elementer, der opfylder TEST public int findsumof( PARAM ) { return LISTE.stream().filter( elem -> TEST(elem, PARAM)).mapToInt( elem -> VALUE(elem, PARAM)).sum(); Læg elementerne sammen Lav en IntStream 19

20 findbest Find de elementer der opfylder TEST public Optional<TYPE> findbest( PARAM ) { return LISTE.stream().filter( elem -> TEST(elem, PARAM)).max(new BEST()); Lav en stream ud fra Arraylisten Returner bedste element (som en Optional) Ordningen bestemmes ved hjælp af en klasse BEST, der implementerer Comparator interfacet Comparator har en klassemetode comparing Tager en lambda som parameter og returnerer en Comparator klasse Parameteren specificerer, hvilken feltvariabel, der skal anvendes under sammenligningen public Optional<Dog> youngestofbreed (String breed){ return dogs.stream().filter(d -> d.getbreed().equals(breed)).min( Comparator.comparing (d -> d.getage()) ); Klassemetode Lambda'en udpeger den feltvariabel, der skal sammenlignes 20

21 Sammenligning af algoritmeskabelonerne De funktionelle er mere kompakte og letlæselige end de imperative Alle funktionelle algoritmeskabeloner starter på samme måde public returtype find XXX( PARAM ) { return LISTE.stream().filter( elem -> TEST(elem, PARAM)).??? De to første linjer i kroppen er ens Kun sidste linje er forskellig findone.findfirst(); Optional<TYPE> findall findnoof.collect(collectors.tolist());.count(); long List<TYPE> findsumof findbest.maptoint( elem -> VALUE(elem, PARAM)).sum(); int.max( Comparator.comparing(d -> d.getfield())); Optional<TYPE> 21

22 Sortering Indtil nu har vi sorteret ved at skrive en compareto metode For Phone opgavesættet ser dette ud, som vist nedenfor Vi sorterer efter pris, og hvis prisen er den samme efter brand public int compareto(phone other){ if(price!= other.getprice()) { return price other.price; return brand.compareto(other.getbrand()); Fastlæggelse af ordning via compareto metode public void printwebshop(){ System.out.println(name); Collections.sort(phones); for(phone p : phones { System.out.println(p); Udskrift af webshoppens navn Sortering Pæn udskrift af den sorterede arrayliste 22

23 Funktionel sortering (version 1) Som vi har set, har Comparator interfacet en klassemetode, der gør det let at definere ordninger For Phone opgavesættet kan dette anvendes, som vist nedenfor Vi sorterer efter pris, og hvis prisen er den samme efter brand public void printwebshop(){ Udskrift af webshoppens navn System.out.println(name); Collections.sort(phones, Comparator.comparing(p -> p.getbrand()) ); Collections.sort(phones, Comparator.comparing(p -> p.getprice()) ); for(phone p : phones) { System.out.println(p); Pæn udskrift af den sorterede arrayliste Sortering (inklusiv fastlæggelse af ordning) Vi slipper for at skrive compareto metoden Vi starter med det mindst betydende sorteringskriterie sort metoden er stabil (stable) og bytter ikke om på "ens" elementer 23

24 Funktionel sortering (version 2) Vi lavede to sorteringer efter hinanden Collections.sort(phones, Comparator.comparing(p -> p.getbrand()) ); Collections.sort(phones, Comparator.comparing(p -> p.getprice()) ); Man kan også nøjes med en enkelt sortering Collections.sort(phones, Comparator.comparing( (Phone p) -> p.getprice()).thencomparing (p -> p.getbrand()) ); Metode i Comparator klassen Nu er det nødvendigt at hjælpe compileren ved at angive p's type Vi starter med det mest betydende sorteringskriterie Hvis man vil have dyreste først sætter man et minus på lambda'ens højre side (Phone p) -> - p.getprice()) Ved køreprøven skal opgaverne løses ved hjælp af imperativ programmering Det er forbudt at bruge Streams og lambda'er 24

25 Map (afbildning) Afbildning fra en type ind i en anden Der er mange forskellige maps på samme måder som der er forskellige lister Her vil vi se på HashMap<K,V> klassen Parametriseret klasse K angiver keys (nøgler) den type der afbildes fra V angiver values (værdier) den type der afbildes til Et Map objekt indeholder par på formen (k,v), hvor k er af typen K og v af typen V Hvis man kender nøglen k kan man slå værdien v op (ved hjælp af Map objektet) En værdi v kan være knyttet til flere nøgler (afbildningen behøver ikke være injektiv) Omvendt har en nøgle højst én tilknyttet værdi (ellers ville det være en relation og ikke en afbildning) 25

26 Telefonliste En telefonliste er et typisk eksempel på brug af Map K er personer, mens V er deres telefonnumre Begge repræsenteres som tekststrenge (String) contacts : HashMap<String, String> "Peter Andersen" " " "Ida Thomasen" " " "Ole Rasmussen" "hemmeligt" Alternativt kan man bruge HashMap<String, Integer> Nu er værdierne heltal (og man må finde en anden måde at angive, at et nummer er hemmeligt) 26

27 Implementation af telefonliste // Oprettelse af kontaktliste HashMap<String, String> contacts = new HashMap<>(); // Operettelse af kontakter contacts.put("peter Andersen", " "); contacts.put("ida Thomasen", " "; contacts.put("ole Rasmussen", "hemmeligt"); // Opslag i kontaktlisten String number = contacts.get("ida Thomasen"); System.out.println(number); " " get metoden laver opslag Returnerer den værdi der er knyttet til den anvendte nøgle (null hvis nøglen ikke er i brug) put metoden indsætter nye par Hvis nøglen allerede er i brug glemmes det gamle par Andre metoder i HashMap size metoden fortæller, hvor mange par, der er i afbildningen keyset metoden returnerer en mængde indeholdende alle de nøgler (keys), der er i brug I alt er der ca. 20 metoder. Studér disse i Java API'en 27

28 Set (mængde) Matematisk mængde Et element kan højst forekomme én gang i mængden Indsætter man elementet en gang til, har det ingen effekt Der er mange forskellige mængder på samme måde, som der er forskellige lister og maps Her vil vi se på HashSet<E> klassen En mængde af personnavne kan modelleres via HashSet<String> persons : HashSet<String> "Peter Andersen" "Ida Thomasen" "Ole Rasmussen" 28

29 Implementation af mængde af personer // Oprettelse af mængde HashSet<String> persons = new HashSet<>(); // Indsættelse af personnavne persons.add("peter Andersen"); persons.add("ida Thomasen"); persons.add("ole Rasmussen"); System.out.println(persons.size()); add metoden indsætter elementer 3 returnerer true, hvis mængden ændres size metoden fortæller, hvor mange elementer der er i mængden // Indsæt et navn, der allerede er i mængden persons.add("ida Thomasen"); System.out.println(persons.size()); 3 add metoden returnerer false, hvis mængden ikke ændres Det er equals metoden (for element typen E), der bruges til at afgøre, om elementet allerede forekommer i mængden 29

30 Eksempel: Indlæsning af kommandoer Returnerer en mængde af tekststrenge Metodens navn Prompt bruger for input Array (Kap. 7) Ligner arraylister, men har et fast (på forhånd kendt) antal elementer Lokal variabel (initaliseres til at være den tomme mængde) Returner den konstruerede mængde public HashSet<String> getinput() { System.out.print("> "); String inputline = reader.nextline().trim().tolowercase(); Fjern blanke fra enderne og konverter til små bogstaver String[] wordarray = inputline.split(" "); HashSet<String> words = new HashSet<>(); for( String word : wordarray ) { words.add(word); return words; for-each løkke, hvor arrayets elementer et for et kopieres over i mængden Næste linje fra reader " Hans Peter " "hans peter" Metode i String klassen Opdeler strengen de steder, hvor der er blanke tegn (parameteren) Returnerer "stumperne" i et array > peter besøgte hans peter "peter" "besøgte" "hans" "peter" "peter" "besøgte" "hans" 30

31 Collections (objektsamlinger) Forskellige måder at gruppere objekter ArrayList, LinkedList, (lister) HashMap, TreeMap, LinkedHashMap, (maps) HashSet, TreeSet, LinkedHashSet, (mængder) Sidste del af navnet angiver om det er en liste, map eller mængde (set) Første del af navnet angiver implementationsmetoden Alle collections er parametriserede typer Parametrene skal være objekt typer For de primitive typer bruges de tilsvarende wrapper typer Alle collections har de samme navne på metoder F.eks. size, clear og isempty Bemærk dog, at man i lister og mængder indsætter via add metoden, mens man i maps indsætter via put metoden 31

32 Polymorfe variabler Når vi skriver et program, behøver vi ikke fra start at fastlægge, hvilken type objektsamling vi vil anvende I stedet for at erklære en variabel til at referere til en arrayliste ArrayList<Person> persons; kan man med stor fordel nøjes med at angive at den refererer til en liste List<Person> persons; Man kan så senere let udskifte en type liste med en anden Det eneste sted man skal ændre i koden er der, hvor listen oprettes. Her angiver man hvilken type liste, man vil bruge persons = new ArrayList<>(); persons = new LinkedList<>(); Tilsvarende kan vi definere polymorfe variabler for mængder og maps Set<Person> persons; Map<Person,Person> farthers; List, Set og Map er interfaces (som vi skal kigge nærmere på i Kap. 12) 32

33 Dokumentation Når I (fremover) konstruerer en klasse skal den dokumenteres lige så godt som klasserne i Javas API Ellers får I genaflevering For klassen skal I angive En kommentar der beskriver klassens overordnede formål og virkemåde (se eksempler i Javas API) Et versions nummer (som bør indeholde datoen) Forfatterens For hver konstruktør/metode skal I angive En kommentar der beskriver virkemåden Beskrivelse af de enkelte parametre Beskrivelse af den returnerede værdi /** * Comment Kurt Jensen /** * Comment animal Type of animal. Første sætning bruges i List of all sightings. Hele kommentaren bruges i "Details"-delen 33

34 Opsummering Funktionel programmering i Java (Kapitel 5) Forskellen på imperative og funktionelle programmeringssprog Lambda'er (kodestumper, der kan bruges som parametre i et metodekald) Streams (sekvenser af data / strømme af data) De fem algoritmeskabeloner implementeret ved hjælp af streams og lambda'er Ved køreprøven skal opgaverne løses ved hjælp af imperativ programmering Sortering ved hjælp af lambda'er Forskellige typer objektsamlinger (Kapitel 6) Lister (kendt fra ArrayList) Sæt (mængder) Maps (afbildninger) Polymorfe variabler Dokumentation af jeres egne klasser Det er forbudt at bruge Streams og lambda'er

35 Resten af kapitel 6 i BlueJ bogen Kapitel 6 er forholdsvis langt, men det indeholder mange ting, som I allerede er stødt på her i kurset, og derfor vil have let ved at læse Læsning og skrivning af Java dokumentation Brug af klassen Random til at generere tilfældige tal Import af klasser og pakker fra Javas klassebibliotek Automatisk konvertering af værdier mellem primitive typer og de tilhørende wrapper klasser Brug af nøgleordene public og private Klassevariabler og klassemetoder (static) Konstanter (final) Læs kapitlet grundigt uden at springe afsnit over Det er nyttig repetition og tilføjer nye detaljer 35

36 De næste uger (uge 6) Forelæsning Dagens forelæsning er den sidste før efterårsferien Husk at se videoerne om køreprøveopgaverne Uge 5: Videoer om opgavesættene Phone og Pirate Uge 6: Videoer om opgavesættene Car og Turtle Opgaver Uge 6: Dog, Boat, Biker og Film (hvoraf to afleveres) Uge 7: Ingen afleveringsopgaver Anbefalet rækkefølge (i uge 6) Se videoerne om Car Prøv selv at løse opgaverne i Car Se videoerne om Turtle Prøv selv at løse opgaverne i Turtle Løs Dog, Boat, Biker og Film Brug testprogrammerne (findes under "Indholdsfortegnelser") 36

37 De næste uger (uge 7) Løs tidligere opgavesæt Et stort udvalg (ca. 40 stk) kan findes nederst på Uge 1-7 websiden Tag tid, så du kan se, hvor lang tid du er om at løse et opgavesæt Det er ikke unormalt, at det i begyndelsen tager ca. 1 time at løse et opgavesæt men øvelse gør mester Deltag i prøveeksamen ved den første øvelsesgang i uge 7 Læs materiale Læs BlueJ bogen, slides og anden dokumentation efter behov, mens I øver jer på opgavesættene Ca. 95% af de fremmødte består Ca. 75% afleverer fuld besvarelse 37

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

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

Forelæsning Uge 6 Mandag

Forelæsning Uge 6 Mandag Forelæsning Uge 6 Mandag Funktionel programmering i Java (Kapitel 5) Lambda'er (kodestumper, der kan bruges som parametre i et metodekald) Streams (sekvenser af data / strømme af data) Brug af assignments

Læs mere

Forelæsning Uge 6 Mandag

Forelæsning Uge 6 Mandag Forelæsning Uge 6 Mandag Funktionel programmering i Java (Kapitel 5) Lambda'er (kodestumper, der kan bruges som parametre i et metodekald) Streams (sekvenser af data / strømme af data) Brug af assignments

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

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

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

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

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

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

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 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

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

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

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

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

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

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

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 6 torsdag repetition

Forelæsning Uge 6 torsdag repetition Forelæsning Uge 6 torsdag repetition Java style guide Niveauer af programbeskrivelser Arraylister (én-til-mange relation) For-løkker (almindelig og udvidet) Primitive typer (forfremmelse og begrænsning)

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

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

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

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

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

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

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 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 6 torsdag repetition

Forelæsning Uge 6 torsdag repetition Forelæsning Uge 6 torsdag repetition Java style guide Niveauer af programbeskrivelser Arraylister (én-til-mange relation) For-løkker (almindelig og udvidet) Primitive typer (forfremmelse og begrænsning)

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

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

Programmering og Problemløsning, 2017

Programmering og Problemløsning, 2017 Programmering og Problemløsning, 2017 Martin Elsman Department of Computer Science University of Copenhagen DIKU September 27, 2017 Martin Elsman (DIKU) Programmering og Problemløsning, 2017 September

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

BRP 6.9.2006 Kursusintroduktion og Java-oversigt

BRP 6.9.2006 Kursusintroduktion og Java-oversigt BRP 6.9.2006 Kursusintroduktion og Java-oversigt 1. Kursusintroduktion 2. Java-oversigt (A): Opgave P4.4 3. Java-oversigt (B): Ny omvendings -opgave 4. Introduktion til næste kursusgang Kursusintroduktion:

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

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

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

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

Quiz Uge 5 mandag første time

Quiz Uge 5 mandag første time Quiz Uge 5 mandag første time Hvilke erklæringer refereres der til? 1 2 3 4 5 public class Scope { private int i = 0; private int n = 0; public Scope ( int n ) { this.n = n + i ; System.out.println("a"

Læs mere

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004 Overvågningssystem Beskrivelse Bagagesorteringssystemet består af et antal skranker (check-in) til modtagelse og registrering af bagage, et automatiseret sorteringsanlæg samt et antal terminaler (gates),

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

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

DM507 Algoritmer og datastrukturer

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

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

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

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

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

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

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

Hashing og hashtabeller

Hashing og hashtabeller Datastrukturer & Algoritmer, Datalogi C Forelæsning 12/11-2002 Hashing og hashtabeller Teknik til at repræsentere mængder Konstant tid for finde og indsætte men ingen sortering af elementerne Specielt

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

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

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

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

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

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

Algoritmedesign med internetanvendelser ved Keld Helsgaun

Algoritmedesign med internetanvendelser ved Keld Helsgaun Algoritmedesign med internetanvendelser ved Keld Helsgaun 1 Analyse af algoritmer Input Algoritme Output En algoritme er en trinvis metode til løsning af et problem i endelig tid 2 Algoritmebegrebet D.

Læs mere

Python programmering. Per Tøfting. MacFest

Python programmering. Per Tøfting. MacFest Python programmering MacFest 2005 Per Tøfting http://pertoefting.dk/macfest/ Indhold Måder at afvikle Python program på Variabler Data typer Tal Sekvenser Strenge Tupler Lister Dictionaries Kontrolstrukturer

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

Programmering i C. Lektion september 2009

Programmering i C. Lektion september 2009 Programmering i C Lektion 1 8. september 2009 Målgruppe Motivation Indhold Form Materiale 2 / 47 Kursusintroduktion 1 Målgruppe 2 Motivation 3 Indhold 4 Form 5 Materiale Målgruppe Motivation Indhold Form

Læs mere

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater Design by Contract Bertrand Meyer 1986 Design and Programming by Contract Michael R. Hansen & Anne Haxthausen mrh@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark Design

Læs mere