Forelæsning Uge 5 Mandag

Relaterede dokumenter
Forelæsning Uge 5 Mandag

Forelæsning Uge 6 Mandag

Forelæsning Uge 5 Mandag

Forelæsning Uge 5 Mandag

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag

Forelæsning Uge 6 torsdag repetition

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag

Forelæsning Uge 6 torsdag repetition

Forelæsning Uge 4 Mandag

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag

Forelæsning Uge 12 Torsdag

Forelæsning Uge 12 Mandag

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

Forelæsning Uge 6 Mandag

Forelæsning Uge 3 Mandag

Forelæsning Uge 6 Mandag

Forelæsning Uge 3 Mandag

Forelæsning Uge 2 Torsdag

Forelæsning Uge 10 Torsdag

DANMARKS TEKNISKE UNIVERSITET

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

Forelæsning Uge 3 Torsdag

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

Forelæsning Uge 6 Mandag

Forelæsning Uge 6 Mandag

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

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

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

Forelæsning Uge 3 Torsdag

Quiz Uge 5 mandag første time

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

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.

Forelæsning Uge 3 Mandag

Quiz Uge 5 mandag første time

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

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

DRONNINGER (QUEENS) Opgave 1

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

Forelæsning Uge 2 Mandag

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

Forelæsning Uge 2 Mandag

Fundamentale sprogbegreber

Forelæsning Uge 10 Mandag

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

Stakke, køer og lidt om hægtede lister - kapitel 16 og 17

COMPUTERSPIL 1. Opgave 1. Opgave 2

Forelæsning Uge 11 Torsdag

Klasser og nedarvning

Skriftlig eksamen i Datalogi

Forelæsning Uge 4 Torsdag

DM502. Peter Schneider-Kamp

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

Ugeseddel 4 1. marts - 8. marts

Om binære søgetræer i Java

Vejledende løsninger

Lektion 6. Grundlæggende programmering i VR

SWC eksamens-spørgsmål. Oversigt

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

COMPUTERSPIL 1. Opgave 1

Stakke, køer og lidt om hægtede lister

Tree klassen fra sidste forelæsning

Forelæsning Uge 2 Mandag

Forelæsning Uge 1 Torsdag

Forelæsning Uge 11 Mandag

Forelæsning Uge 3 Torsdag

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

Forelæsning Uge 1 Torsdag

Skriftlig eksamen i Datalogi

BRP Kursusintroduktion og Java-oversigt

Klasser og objekter. (Afsnit i manualen)

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

Skriftlig eksamen i Datalogi

DM507 Algoritmer og datastrukturer

Hvad er Objekter - Programmering

Serialization i Java

Virkefeltsregler i Java

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

Løsning af møntproblemet

DM507 Algoritmer og datastrukturer

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

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

Java Klasse nedarvninger

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag

DM01 DM Obl. Afl. Jacob Christiansen, , D12, Elias 18/ Side 1 af 11

Forelæsning Uge 3 Torsdag

DM507 Algoritmer og datastrukturer

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

Dag 10 Flertrådet programmering

Hanne Niels Edith Harald Carsten Jørgen Henrik.

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

Databaseadgang fra Java

Forelæsning Uge 3 Torsdag

Test af It-komponent

Transkript:

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 kørende Java kode Resten af dintprog kurset

Algoritmeskabeloner Lidt repetition fra i mandags Finder ét element med den angivne egenskab public TYPE findone( PARAM ) { for ( TYPE elem : LISTE ) { if ( TEST(elem,PARAM) ) { return elem; return null; Alle eksamenssæt indeholder opgaver, som kan løses ved hjælp af algoritmeskabeloner Finder alle elementer med den angivne egenskab, og returnerer dem i en arrayliste public ArrayList<TYPE> findall( PARAM ) { ArrayList<TYPE> result = new ArrayList<TYPE>(); for ( TYPE elem : LISTE ) { if ( TEST(elem,PARAM) ) { result.add(elem); return result; 2

Algoritmeskabeloner Finder antallet af elementer med den angivne egenskab public int findnoof( PARAM ) { int result = 0; for ( TYPE elem : LISTE ) { if ( TEST(elem,PARAM) ) { result++; return result; Finder summen af de elementer, der har den angivne egenskab public int findsumof( PARAM ) { int result = 0; for ( TYPE elem : LISTE ) { if ( TEST(elem,PARAM) ) { result += VALUE(elem, PARAM); return result; 3

findbest = finder bedste element i liste public TYPE findbest( PARAM ) { TYPE result = null; Holder hidtil bedste for ( TYPE elem : LISTE ) { Er elem bedre end hidtil bedste? if ( TEST(elem,PARAM) ) { if ( result == null BEST(elem,result,PARAM) ) { result = elem; or-operator (lazy) Dette test udføres kun, hvis result!= null Har vi et hidtil bedste? return result; Hvorfor er det vigtigt? Algoritmeskabelon Gennemsøger LISTE og returnerer det BEDSTE af de elementer, der opfylder TEST Hvis flere elementer er lige gode, returneres et vilkårligt af disse Hvis der ingen er, returneres null Hvis man undlader TEST (og fjerner den yderste if-sætning), finder man det BEDSTE blandt alle i LISTE Gentag! 4

Eksempler på findbest public Pixel findbrightestdarkpixel(int color) { Pixel result = null; for ( Pixel p : pixels ) { if ( p.getcolor() <= color ) { if ( result == null p.getcolor() > result.getcolor() ) { result = p; return result; Finder den lyseste mørke pixel public Person findfirstcontaining(string q) { Person result = null; for ( Person p : persons ) { if ( p.getname().contains(q) ) { if ( result == null p.getname().compareto(result.getname()) < 0 ){ result = p; return result; sammenligner to textstrenge Finder alfabetisk-første person, hvis navn indeholder den angivne textstreng 5

Sammenligning af algoritmeskabeloner Fælles Alle skabeloner gennemsøger en arrayliste og tjekker hvert enkelt element i listen op mod en angiven betingelse (der kan afhænge af parametre) Betingelsen involverer kun det element i listen, der pt. undersøges Forskelle findone returnerer ét element, der opfylder den angivne betingelse (og stopper så snart en sådant element er fundet) findall returnerer en arrayliste med alle elementer, der opfylder den angivne betingelse findnoof returnerer antallet af elementer, der opfylder den angivne betingelse findsumof returnerer summen af værdierne af de elementer, der opfylder den angivne betingelse findbest returnerer det bedste findall tom liste add af de elementer, der opfylder den angivne betingelse findnoof 0 += 1 Skabelon Initialisering Opdatering findsumof 0 += VALUE findbest null hidtil bedste 6

Forprogrammerede metoder i Java Library Klassen Collections indeholder en række nyttige metoder Metoderne kan bruges på forskellige typer objektsamlinger Typen skal implementere Collection interfacet Det er f.eks. tilfældet for ArrayList T min(collection<t> c) //returnerer mindste element T max(collection<t> c) //returnerer største element void sort(list<t> l) //sorterer listen void shuffle(list<t> l) //blander listen void reverse(list<t> l) //vender listen om boolean disjoint(collection<t> c1, Collection<T> c2) int frequency(collection<t> c, Object o)... Alle metoderne er static Collections.metode() 7

Brug af Collections på ArrayList<String> public class Driver { public static void run() { ArrayList<String> list; list = new ArrayList<String>(); list.add("cecilie"); list.add("erik"); list.add("adam"); list.add("bo"); list.add("dora"); print("*******************"); print("liste: " + list); print("min: " + Collections.min(list)); print("max: " + Collections.max(list)); Collections.sort(list); print("sorteret liste: " + list); private static void print(object o) { System.out.println(o); 8

Brug af Collections på ArrayList<String> public class Driver { public static void run() { ArrayList<String> list;... print("*******************"); print("liste: " + list); print("min: " + Collections.min(list)); print("max: " + Collections.max(list)); Collections.sort(list); print("sorteret liste: " + list); Collections.shuffle(list); print("blandet liste: " + list); Collections.shuffle(list); print("blandet liste: " + list); Collections.reverse(list); print("liste bagfra: " + list);... 9

Brug af Collections på ArrayList<Person> public class Driver { public static void run() { ArrayList<Person> list; list = new ArrayList<Person>(); list.add(new Person("Cecilie", 18)); list.add(new Person("Erik", 16)); list.add(new Person("Adam", 16)); list.add(new Person("Bo", 39)); list.add(new Person("Dora", 47)); print("*******************"); print("liste: " + list); Collections.shuffle(list); print("blandet liste: " + list); Collections.reverse(list); print("liste bagfra: " + list);... 10

Brug af Collections på ArrayList<Person> public class Driver { public static void run() { ArrayList<Person> list; list = new ArrayList<Person>(); list.add(new Person("Cecilie", 18)); list.add(new Person("Erik", 16)); list.add(new Person("Adam", 16)); list.add(new Person("Bo", 39)); list.add(new Person("Dora", 47)); print("*******************"); print("liste: " + list); print("min: " + Collections.min(list)); print("max: " + Collections.max(list)); Collections.sort(list); print("sorteret liste: " + list);... 11

Hvad gik galt? Metoderne min, max og sort i klassen Collections kan kun anvendes, hvis elementerne i ArrayListen har en ordning String klassen har en indbygget ordning (alfabetisk sortering) Derfor kunne vi bruge min, max og sort på ArrayList<String> Person klassen (som vi selv har lavet) har (endnu ikke) en ordning Derfor kan vi ikke bruge min, max og sort på ArrayList<Person> Men vi kan godt bruge shuffle og reverse, idet disse metoder ikke kræver en ordning 12

Ordning kan defineres via interfacet Comparable public interface Comparable<T> { /** * @returns whether this object is * smaller (negative integer) * equal (0) * or greater (positive integer) * than object o */ public int compareto(t o); Tænk på et interface som en rolle Person-objekter kan spille rollen Comparable, hvis to ting er opfyldt Person skal implementere interfacet public class Person { implements Comparable<Person> {... T = Person... public int compareto(person p) {...... T = Person Person skal implementere en compareto metode med den signatur, der er specificeret i interfacet Den ordning, som compareto definerer, kaldes den NATURLIGE ORDNING 13

compareto kan implementeres på mange måder Vi kan sortere (alfabetisk) efter personens navn Til dette formål kan vi bruge compareto metoden fra String klassen public int compareto(person p){ return name. compareto ( p.name ); Personens eget navn Metode fra String klassen (sorterer alfabetisk) Navnet på personen p 14

Vi kan sortere efter personens alder public int compareto(person p){ De yngste først if (this.age == p.age) { return 0; if (this.age < p.age) { return -1; else { return +1; public int compareto(person p){ return this.age - p.age; Simplere løsning Hvis to personer har samme alder, er rækkefølgen vilkårlig 15

Vi kan kombinere de to sorteringskriterier De yngste først Hvis to personer er lige gamle: alfabetisk efter navn public int compareto(person p){ if ( this.age!= p.age ) { return this.age - p.age; //alderen er identisk return name.compareto(p.name); Er alderen forskellig? Yngste først Alfabetisk efter navn Alle eksamenssæt indeholder opgaver, som kan løses ved hjælp af Collections og Comparable 16

Klassediagram uses <<interface>> Collection boolean add(e e) boolean contains(object o)... extends Collections T min(collection<t> c) T max(collection<t> c) void sort(list<t> l) void reverse(list<t> l) void shuffle(list<t> l)... Nyttige metoder (programmeret en gang for alle) Diagrammet er ikke eksamenspensum uses <<interface>> Comparable int compareto(t o) implements implements <<interface>> List implements <<interface>> Set implements <<interface>> Queue ArrayList HashSet LinkedList Ca. 35 forskellige Collection klasser implements Pixel Person NYT : compareto metode Resten er genbrug fra Java's API String 17

Multiple sorteringsmåder Hvad gør man, hvis vi har behov for at kunne sortere på flere forskellige måder, f.eks Sommetider sortere personer efter navn Sommetider sortere personer efter alder Sommetider sortere personer efter alder og navn Så bruger man Collections sammen med Comparator interfacet (i stedet for Comparable interfacet) Det skal vi se på næste mandag 18

BlueJ's debugger (afluser = fejlfinder) Nyttig, når man skal tjekke den detaljerede opførsel af kørende Java kode Breakpoints indsættes (og fjernes) ved at klikke i venstre margin af editoren Under programudførelsen vil debuggeren stoppe, når et breakpoint nås, og vise positionen med en sort pil (samt gul farve) Herefter kan man steppe gennem koden statement efter statement 19

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

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

Undervejs kan man inspicere Igangværende metodekald Værdier for feltvariabler Værdier for lokale variabler 22

Opsummering Algoritmeskabeloner findone, findall, findnoof, findsumof findbest Alle eksamenssæt indeholder opgaver, som kan løses ved hjælp af algoritmeskabeloner Brug af klassen Collections og interfacet Comparable Metoden compareto definerer den naturlige ordning BlueJ s Debugger Nyttigt værktøj til at finde fejl i kode Alle eksamenssæt indeholder opgaver, som kan løses ved hjælp af Collections og Comparable 23

Resten af dintprog kurset Uge 5 Torsdag: Ingen forelæsning Uge 6 Mandag Nedarvning, abstrakte klasser og interfaces Comparator ("generalisering" af Comparable sortere på flere måder) Torsdag Repetition af det stof uge 2-5 (intet nyt genbrug af slides) Uge 7 Mandag: Ingen forelæsning Torsdag Eksamen Kursusevaluering ved hjælp af clickere Præmiering af de bedste projekter fra uge 5 Mandelbrotmængden (eksempel på computer genererede billeder uden for pensum, men enormt smukke) 24

Opgaver i uge 6-7 Uge 6 2 eksamensopgaver (fra 2013-2014) Uge 7 4 eksamensopgaver (fra 2013-2014) Alle eksamensopgaver løses og afleveres individuelt Undervejs må I gerne snakke med jeres makker hjælpe hinanden Når I begge har løst en opgave, gennemgår I hinandens løsninger og diskuterer, hvordan de kan forbedres Derefter forbedrer I jeres egen løsning Hver uge afleveres to af eksamensopgaverne individuelt til instruktoren Husk at kurset har nul-tolerance overfor plagiering 25

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