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) Lambda'er (kodestumper, der kan bruges som parametre i et metodekald) Streams (sekvenser af data / strømme af data) Brug af assignments erstattes af evaluering af komplekse funktioner De fem algoritmeskabeloner implementeret ved hjælp af streams og lambda'er Sortering ved hjælp af lambda'er Forskellige typer objektsamlinger (Kapitel 6) List (lister) kendt fra ArrayList Set (mængder) Map (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 public int addone(int n) { return n+1; Funktion (metode) der lægger 1 til parameteren Standard ML (funktionelt sprog) fun addone(n) = n+1; Man behøver ikke at angive typerne Dem deducerer compileren selv fn(n) => n+1; Lambda calculus Anonym funktion (uden navn) Kan bruges som parameter til en anden funktion int int n.n+1 Datalogistuderende 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 (fordi der er flere ting) 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 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", der implementerer en funktion Kan bruges i et metodekald (som værdi for en parameter) Den kaldte metode kan så udføre funktionen ("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 er en metode i ArrayList klassen (og andre collections) Tager en lambda som parameter Bruger lambda'en på alle elementerne Lambda 7

8 Java syntaks for Lambda'er Den generelle syntax er som følger (P p, Q q, ) -> { code; Simplifikationer Vi kan (som regel) udelade typerne på parametrene, idet compileren selv kan deducere dem Hvis kroppen kun har én sætning kan vi udelade { og semikolonnet Hvis der kun er én parameter (uden typeangivelse) kan vi udelade ( ) (p, q, ) -> code p -> code Eksemplet fra før sightings.foreach( s -> System.out.println(s)); Lambda 8

9 Streams i Java, Interfacet Stream<T> En stream er sekvens af data, f.eks. Elementerne i en collection (f.eks. en arrayliste) Data der "strømmer" ind via et netværk Tekstlinjer fra en tekstfil Tegn (char værdier) fra en tekststreng (String) Karakteristika for streams Elementer tilgås ikke via et index (men i rækkefølge) Streams 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 potentielt 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 stream indeholdende de elementer fra den gamle, som opfylder en given betingelse Stream med observationer af en given dyreart map funktionen Gennemløber en stream og skaber en ny stream 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 stream'en sammen) 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 Lambda: int * int -> int Java (pseudokode) for reduce funktionen I vores eksempel summeres elementerne result = startværdi; for(hvert element elem i stream) { 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 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.maptoint( s -> s.getcount() ).sum(); 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 maptoint producerer en IntStream ud fra en Stream (ved hjælp af en brugerspecificeret lambda) sum returnerer summen af elementerne i en IntStream i stedet for at bruge reduce direkte.map( s -> s.getcount() ).reduce( 0, (result, elem) -> result + elem ); 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()); collect er en metode i Stream klassen tolist er en klassemetode i Collectors klassen Returner de fundne elementer som en objektsamling af typen List List er et interface som ArrayList, og andre lister, implementerer) 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 (returnerer en int) 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 Lambda'en specificerer, hvilken feltvariabel, der skal sorteres efter public Optional<Dog> youngestofbreed(string breed){ return dogs.stream().filter(d -> d.getbreed().equals(breed)).min( Comparator.comparing (d -> d.getage()) ); For at bruge de funktionelle algoritmeskabeloner, skal man importere: Collections, Comparator, og Optional via import java.util.*; (som også importerer ArrayList) Collectors via import java.util.stream.collectors; Klassemetode Lambda'en "udpeger" den feltvariabel, hvis værdier skal sammenlignes (ved hjælp af den naturlige ordning) 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())); Ved køreprøven skal de to sidste opgaver (11-12) løses ved hjælp af funktionel programmering, dvs. Streams, lambda'er og de funktionelle algoritmeskabeloner 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 Udskrift af den sorterede arrayliste 22

23 Funktionel sortering Som vi har set, har Comparator interfacet en klassemetode, der gør det let at definere ordninger uden selv at skrive en compare metode For Persons kan dette anvendes, som vist nedenfor Vi vil sortere efter navn, og hvis navnet er det samme efter alder public void printpersons() { Collections.sort(persons, Comparator.comparing(p -> p.getage())); Collections.sort(persons, Comparator.comparing(p -> p.getname())); persons.foreach(p -> System.out.println(p)); Udskrift af den sorterede arrayliste Sortering via to Comparator klasser (der anvender den naturlige ordning) Bemærk, at vi starter med det mindst betydende kriterie og slutter med det mest betydende Hvis man vil have de ældste først sætter man et minus på lambda'ens højre side 23

24 Funktionel sortering version 2 Man kan nøjes med en enkelt sortering Nu bruger vi én Comparator klasse, der først sorterer efter navn og dernæst efter alder Før brugte vi to forskellige Comparator klasser, hvor den ene sorterede efter navn og den anden efter alder Nu er det nødvendigt at hjælpe compileren ved at angive p's type public void printpersons() { Collections.sort(persons, Comparator.comparing(( Person p) -> p.getname()).thencomparing (p -> p.getage())); persons.foreach(p -> System.out.println(p)); Metode i Comparator interfacet Nu starter vi med det mindst betydende kriterie og slutter med det mest betydende (hvilket gør koden lettere at forstå) 24

25 Funktionel sortering version 3 I stedet for at sortere arraylisten kan vi sortere en stream public void printpersons() { persons.stream().sorted(comparator.comparing((person p) -> p.getname()).thencomparing( p -> p.getage())).foreach(p -> System.out.println(p)); public void printperons() { persons.stream().sorted(comparator.comparing( Person::getName ) Metode i Stream klassen (fungerer analogt til sort metoden i ArrayList klassen) Bemærk at arraylisten ikke ændres. Det er kun stream'en vi sorterer Derudover kan vi erstatte de tre lambda'er med metode referencer Forkortelse for lambda'en (Person p) -> p.getname().thencomparing ( Person::getAge )).foreach( System.out::println ); Metode referencer er beskrevet på side i BlueJ bogen De kan også bruges i findbest algoritmeskabelonen Forkortelse for lambda'en p -> System.out.println(p) reversed() returnerer en comparotor med omvendt sortering Forkortelse for lambda'en (Person p) -> p.getage() 25

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

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

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

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

30 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 Object klassen (som alle klasser er underklasser af) har en equals metode Dette sikrer at alle klasser har en equals metode 30

31 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; Næste linje fra reader 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" for-each løkke, hvor arrayets elementer et for et kopieres over i mængden "peter" "besøgte" "" "" "hans" "peter" "peter" "besøgte" "" "hans" 31

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

33 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<>(); Variablen persons er polymorf, fordi den kan pege på værdier af forskellig type 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) 33

34 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 Skift fra Source code til Documentation view (i BlueJ editoren) for at kontrollere, at jeres dokumentation ser fornuftig ud 34

35 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 Køreprøven 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 Opgave 1-10 skal løses ved hjælp imperativ programmering, man må altså ikke bruge streams og lambda'er Opgave skal løses ved hjælp af funktionel programmering, dvs. streams, lambda'er og de funktionelle algoritmeskabeloner) 35

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

37 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 (imperativ programmering) Biker og Film (funktionel programmering) Uge 7: Ingen afleveringsopgaver Vi har desværre pt ikke videoer for de funktionelle algoritmeskabeloner 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 Løs Biker og Film (ved hjælp af funktionel programmering) Brug testprogrammerne (findes under "Opgaver") 37

38 Uge 7 Løs tidligere opgavesæt Et stort udvalg (ca. 50 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 Husk at bruge Test af køreprøveopgaver Deltag i prøvekøreprøve 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 Held og lykke ved køreprøven 38

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

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) 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 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 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 (i mandags) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?

Læs mere

Forelæsning Uge 4 Torsdag

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

Læs mere

Forelæsning Uge 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 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 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

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

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

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

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

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

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

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

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

Læs mere

DM507 Algoritmer og datastrukturer

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

Læs mere

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

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 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Forelæsning Uge 3 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

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

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

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 3

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

Læs mere

Forelæsning Uge 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

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

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

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

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

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

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

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

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

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

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

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

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

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

Læs mere

Forelæsning Uge 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Klasser og objekter. (Afsnit i manualen)

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

Læs mere

Forelæsning Uge 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

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

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

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

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

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

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

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

Sekvenser af længde mellem 1 og 4 ord repræsenteres ved en klasse Segment, som uden grundlæggende ser således ud:

Sekvenser af længde mellem 1 og 4 ord repræsenteres ved en klasse Segment, som uden grundlæggende ser således ud: Besvarelse af opgave til formuleret til øvelserne 10. september 2002 Datastrukturer og algoritmer Henning Christiansen 22/9-2002 Følgende er ikke en eksakt besvarelse af opgaven, idet den benytter hashtabeller

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

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

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

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

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

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

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1 Spørgsmål 1 Grundlæggende objektorienterede begreber o Klasse (class) o Objekt (object) o Metode (method), herunder return type og parametre o Instansvariable (instance variables) & egenskaber (properties),

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

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

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11 DM503 Forelæsning 11 Generics Pakker Exceptions Indhold Generics Nedarvning og Generics Generics Nedarvning og Generics Husk Box fra sidst Generics public class Box {! private T object;! public void

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

Kapitel 4 Løkker i C#

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

Læs mere

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

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

Virkefeltsregler i Java

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

Læs mere

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

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