Forelæsning Uge 5 – Mandag

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
Advertisements

KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Array vs. ArrayList. Arrays Et array er en struktureret metode til at gemme flere værdier af den samme datatype. Data’en i et array ligger op ad hinanden.
Forelæsning 3.1 Collections Javas for-each løkke
Interfaces – brug. Overblik Tidligere: –Interfaces Comparable gør det muligt at bruge Collections metoderne –min, max, sort, … –Algoritmemønstre Find.
Lektion 7 Læsestof: Kopier fra Caranno
Forelæsning 5.1 Brug af klassen Collections og interfacet Comparable samt parametriserede typer Projektuge: Ants and Spiders / Lommeregner dIntProg,
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
Forelæsning 2.2 Tilstand og opførsel (repetition)
Fundamentale sprogbegreber
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner findEn findAlle Primitive typer (forfremmelse og begrænsning) Identitet versus lighed.
Begreber og Redskaber 11. Plan for idag Lidt afrunding: Collections Framework i Java Noget om oversættere og sprog Evaluering Sidste gang øvelser før.
Forelæsning 7.1 – repetition
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
Introduktion til programmering Repetition - ArrayList.
Checklister Comparable og Comparator. dIntProg, E08Checklister.2 Checkliste for Comparable Antagelse –vi har en liste med elementer af typen T: List lst;
Klasser og objekter. dIntProg, E08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Henrik B. Christensen, 1999Introducerende objektorienteret programmering8B.1 Interfaces En ren kontrakt.
 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt.
Indledende Programmering Uge 6 - Efterår 2006
Interfaces Afkobling af programkomponenter (eksempel: Comparable)
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
Interfaces – hvorfor, hvad og hvordan?.  Michael E. Caspersen 2003IOOPInterfaces.2 Oversigt Interfaces, hvorfor –Separering af specifikation (interface)
 Jens Bennedsen 2001Multimedie programmering10B.1 Interfaces En ren kontrakt.
Introduktion til programmering Repetition. dIntProg, F08Repetition.2 dIntProg Sidste forelæsning (12/10) –kort tilbagemelding på evaluering –repetition.
DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.
Containerklasser – klassifikation og brug.  Michael E. Caspersen, 2003IOOPContainerklasser.2 Mange objekter Containerklasser –antag at man skal repræsentere.
Quiz Uge 2 – torsdag. Hvorfor har vi clicker quizzer? Formålet med quizzerne er –at afveksle undervisningsformen – så I ikke falder i søvn –at tvinge.
Forelæsning Uge 2 – Torsdag Java syntax og style guide Sætninger –Simple sætninger (assignment, interne og eksterne metodekald) –Sammensatte sætninger.
Algoritmeskabeloner findOne, findAll, findNoOf, findSumOf Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder.
Forelæsning Uge 5 – Mandag
Forelæsning Uge 2 – Torsdag
Forelæsning Uge 6 – Mandag
● Forelæsning Uge 6 – Mandag
Forelæsning Uge 4 – Mandag
Forelæsning Uge 5 – Mandag
Forelæsning Uge 12 – Torsdag
Forelæsning Uge 4 – Mandag
Forelæsning Uge 6 – torsdag – repetition
Quiz Uge 2 – mandag.
Quiz – Uge 4 – torsdag – første time
Forelæsning Uge 6 – Mandag
Forelæsning Uge 3 – Mandag
Quiz – Uge 3 – torsdag – første time
Forelæsning Uge 4 – Mandag
Forelæsning Uge 2 – Torsdag
Dokumentation.
Forelæsning Uge 2 – Torsdag
Velkommen til B klassen
Forelæsning Uge 5 – Mandag
Forelæsning Uge 5 – Mandag
Forelæsning Uge 12 – Mandag
Forelæsning Uge 4 – Mandag
Quiz – Uge 4 – torsdag – første time
Quiz Uge 2 – mandag.
Quiz Uge 2 – mandag.
Quiz – Uge 4 – mandag – første time
Forelæsning Uge 3 – Mandag
Quiz – Uge 4 – torsdag – første time
Parametrisering En kort introduktion.
Quiz – Uge 3 – torsdag – første time
Forelæsning Uge 5 – Mandag
Forelæsning Uge 4 – Mandag
Quiz – Uge 4 – torsdag – første time
Forelæsning Uge 4 – Torsdag
Præsentationens transcript:

Forelæsning Uge 5 – Mandag Algoritmeskabeloner findOne, findAll, findNoOf, findSumOf (sidste mandag) findBest Sortering ved hjælp 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 Alle eksamenssæt indeholder opgaver, som kan løses ved hjælp af algoritmeskabeloner Finder ét element med den angivne egenskab public TYPE findOne( PARAM ) { for ( TYPE elem : LISTE ) { if ( TEST(elem,PARAM) ) { return elem; } return null; Finder alle elementer med den angivne egenskab, og returnerer dem i en arrayliste Når vi finder et element returneres det (og algoritmen standser) public ArrayList<TYPE> findAll( PARAM ) { ArrayList<TYPE> result = new ArrayList<TYPE>(); for ( TYPE elem : LISTE ) { if ( TEST(elem,PARAM) ) { result.add(elem); } return result; Når vi finder et element tilføjes det til result (som er en arrayliste)

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; Når vi finder et element tælles result op 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; Når vi finder et element adderes værdien af elementet til result

findBest = finder bedste element i liste public TYPE findBest( PARAM ) { TYPE result = null; for ( TYPE elem : LISTE ) { if ( TEST(elem,PARAM) ) { if ( result == null || BEST(elem,result,PARAM) ) { result = elem; } return result; Resultatvariabel indeholder hidtil bedste Løkke Er elem bedre end hidtil bedste? Test Når vi har fundet et element, skal vi undersøge, om det er bedre end hidtil bedste or-operator (lazy) Højresiden evalueres kun, hvis result != null result opdateres til at pege på elem Har vi et hidtil bedste? Hvorfor er det vigtigt? Når result != null kan vi referere til objektets metoder/variabler 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 ingen elementer opfylder TEST, returneres null Hvis man undlader TEST (og fjerner den yderste if-sætning), finder man det BEDSTE blandt alle i LISTE Gentag!

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

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 af de elementer, der opfylder den angivne betingelse SKOBUTIK BETINGELSEN TESTER SKOENES FARVE EN RØD SKO ALLE RØDE SKO ANTALLET AF RØDE SKO SAMLET PRIS FOR ALLE RØDE SKO Skabelon Initialisering Opdatering findAll tom liste add findNoOf += 1 findSumOf += VALUE Clicker Quiz BILLIGSTE RØDE SKO findBest null hidtil bedste

● Sortering via Collections og Comparable Klassen Collections indeholder en række nyttige metoder Metoderne kan bruges på forskellige typer objektsamlinger Typen af objektsamlingen 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()

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); Test klasse Klassemetode til aftestning toString metoden

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.reverse(list); print("liste bagfra: " + list); }

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); } ...

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); } ...

Hvad gik galt? Metoderne min, max og sort i 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> Eksempel på findBest public Person findFirstContaining(String q) { ... if ( result == null || p.getName().compareTo(result.getName()) < 0 ){ result = p; } Pause Finder alfabetisk-første person, hvis navn indeholder den angivne textstreng Sammenligner to textstrenge 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

Ordning kan defineres via interfacet Comparable Tænk på et interface som en rolle Person-objekter kan spille rollen Comparable, hvis to ting er opfyldt public interface Comparable<T> { public int compareTo(T o); } Signatur for metode 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 Metoden sammenligner to objekter af type Person, nemlig this og p negativ  this < p nul  this = p positiv  p < this Den ordning, som compareTo definerer, kaldes den NATURLIGE ORDNING Det objekt metoden kaldes på Det objekt parameteren angiver

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 this.name . compareTo ( p.name ); } Personens eget navn (this kan udelades) Metode fra String klassen (sorterer alfabetisk) Navnet på personen p

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

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

<<interface>> <<interface>> Klassediagram 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) ... uses uses <<interface>> Comparable int compareTo(T o) <<interface>> Collection boolean add(E e) boolean contains(Object o) ... Nyttige metoder (programmeret en gang for alle) Diagrammet er ikke eksamenspensum extends implements implements <<interface>> List <<interface>> Set <<interface>> Queue Pixel Person … String … compareTo metode implements implements implements Vi skal lave compareTo metoden Resten er genbrug fra Java's API ArrayList HashSet LinkedList Ca. 35 forskellige Collection klasser

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 ClickerQuiz

● 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

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 metode-kaldet, men stopper ved første instruktion i den kaldte metode

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)

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

● Opsummering Algoritmeskabeloner findOne, findAll, findNoOf, findSumOf findBest Sortering ved hjælp 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 algoritmeskabeloner Alle eksamenssæt indeholder opgaver, som kan løses ved hjælp af Collections og Comparable

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

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 På ugeoversigten kan I (under uge 7) finde 27 sæt eksamensopgaver, som I kan træne på

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