Forelæsning Uge 5 – Mandag

Slides:



Advertisements
Lignende præsentationer
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Advertisements

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.
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.
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
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.
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;
 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)
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.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.
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.
Det afsluttende AT-projekt udarbejdes i 2 fag. Der vælges blandt alle fag eleven har eller har haft. Faget indgår på det højeste niveau. Man kan ikke kombinere.
Forelæsning Uge 5 – Mandag
Lektion 7 Formål med denne lektion er at arbejde videre med klassekulturen, følge op på surveyen og at afrunde lektionsforløbet i Netwerk. Alle rettigheder.
Forelæsning Uge 6 – Mandag
● Forelæsning Uge 6 – Mandag
Sammen vil vi lære En uddannelse handler om at blive klogere og dygtige, så I bliver parate til jeres drømmejob. Forestil jer, at vores klasse er verdens.
Forelæsning Uge 3 – Torsdag
Forelæsning Uge 3 – Torsdag
Alle rettigheder forbeholdes
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 – torsdag – første time
Forelæsning Uge 3 – Mandag
Quiz Uge 2 – mandag.
WebApi service x.
”Avanceret” Programmering
Quiz – Uge 4 – torsdag – første time
Forelæsning Uge 6 – Mandag
Quiz – Uge 3 – torsdag – første time
Dokumentation.
Forelæsning Uge 4 – Mandag
Historien om Ib Madsen er skrevet af: Mette Eike Neerlin
Forelæsning Uge 3 – Mandag
● Forelæsning Uge 6 – Mandag
Forelæsning Uge 5 – Mandag
Forelæsning Uge 5 – Mandag
Dokumentation.
Programmering.
Forelæsning Uge 12 Protected access Abstrakte klasser og interfaces
Forelæsning Uge 12 – Mandag
Forelæsning Uge 4 – Mandag
Quiz – Uge 3 – mandag – første time
Quiz – Uge 4 – torsdag – første time
Sådan bruger du præsentationen
Quiz Uge 2 – mandag.
Quiz Uge 2 – mandag.
Forelæsning Uge 3 – Mandag
Parametrisering En kort introduktion.
Quiz – Uge 3 – torsdag – første time
Forelæsning Uge 3 – Mandag
Forelæsning Uge 5 – Mandag
Forelæsning Uge 4 – Mandag
Alle rettigheder forbeholdes
Quiz – Uge 4 – torsdag – første time
Forelæsning Uge 4 – Torsdag
Quiz Uge 2 – mandag.
Quiz – Uge 3 – mandag – første time
Præsentationens transcript:

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

● 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<>(); 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 Lokal variable Tom arrayliste Tilføj 5 elementer til arraylisten toString metoden Hjælpemetode

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

Clicker Quiz Hvad gik galt? Metoderne min, max og sort i Collections kan kun anvendes, hvis elementerne i arraylisten har en ordning (sortering) String klassen har en indbygget ordning (alfabetisk sortering) Derfor kunne vi bruge min, max og sort på ArrayList<String> Eksempel fra sidste forelæsning public Person findFirstContaining(String q) { ... if( result == null || p.getName(). compareTo(result.getName()) < 0 ) { result = p; } Sammenligner tekststrenge (alfabetisk sortering) 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 Clicker Quiz

Ordning kan defineres via interfacet Comparable public interface Comparable<T> { public int compareTo(T o); } Tænk på et interface som en rolle Person objekter kan spille rollen Comparable, hvis to ting er opfyldt 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 Yngste først public int compareTo(Person p) { if(this.age == p.age) { return 0; } if(this.age < p.age) { return -1; else { return +1; negativ  this < p nul  this = p positiv  p < this Simplere løsning public int compareTo(Person p) { return this.age - p.age; } Hvis to personer har samme alder, er rækkefølgen uændret

Vi kan kombinere de to sorteringskriterier 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 Køreprøven indeholder opgaver, som kan løses ved hjælp af Collections og Comparable

Klassediagram int compareTo(T o) Collections Comparable Collection 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) extends <<interface>> List … Queue Set implements implements Pixel Person … String compareTo metode Ca. 35 forskellige Collection klasser ArrayList HashSet LinkedList implements Vi skal lave compareTo metoden Resten er genbrug fra Java's API

Hvad gør vi, når vi har brug for flere ordninger? For personer kan vi for eksempel ønske at sortere efter alder, sortere efter fornavn, sortere efter efternavn, kombinere nogle af ovenstående sorteringskriterier Comparable interfaces tillader kun én ordning Specificeret via compareTo metoden Comparator interfaces tillader flere ordninger min, max og sort har en ekstra parameter, der specificerer, hvilken ordning man vil bruge Parameteren skal være et objekt i en klasse, der implementerer interfacet Comparator Dette indeholder en compare metode, der sammenligner to elementer af den type, der ønskes sorteret Pause

Brug af Comparator på ArrayList<Person> public class Driver { public static void run() { ArrayList<Person> list; list = new ArrayList<>(); 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, new ByName())); print("max: " + Collections.max(list, new ByName())); Collections.sort(list, new ByName()); print("sorteret liste: " + list); } ... Objekt fra klasse, der implementerer Comparator<Person> Klassens compare metoder bestemmer, hvilken ordning, der skal anvendes

Metode fra String klassen (sorterer alfabetisk) Sortering efter navn negativ  p1 < p2 nul  p1 = p2 positiv  p2 < p1 import java.util.Comparator; public class ByName implements Comparator<Person> { public int compare(Person p1, Person p2) { return p1.getName() . compareTo ( p2.getName() ); } Metode fra String klassen (sorterer alfabetisk) p1's navn (tekststreng) p2's navn (tekststreng)

Sortering efter alder (med yngste først) negativ  p1 < p2 nul  p1 = p2 positiv  p2 < p1 import java.util.Comparator; public class ByAge implements Comparator<Person> { public int compare(Person p1, Person p2){ return p1.getAge() - p2.getAge(); } p1's alder Subtraktion (af heltal) p2's alder

Sortering efter alder og navn import java.util.Comparator; public class ByAgeName implements Comparator<Person> { public int compare(Person p1, Person p2){ if(p1.getAge() != p2.getAge()) { return p1.getAge() - p2.getAge(); } // Alderen er identisk return p1.getName().compareTo(p2.getName());

Klassediagram for brug af Comparator Collections T min(Collection<T> c, Comparator<T> comp ) T max(Collection<T> c, Comparator<T> comp ) void sort(List<T> l, Comparator<T> comp ) ... Metoderne er parametriseret med et Comparator objekt uses uses <<interface>> Comparator int compare(T o1,T o2) <<interface>> Collection boolean add(E e) boolean contains(Object o) ... Nyttige metoder (programmeret en gang for alle) extends implements implements <<interface>> List <<interface>> Queue <<interface>> Set Pixel Person … String … compare compare compare implements implements implements Vi skal lave compare metoderne Resten er genbrug fra Java's API ArrayList LinkedList HashSet Ca. 35 forskellige Collection klasser

Comparable eller Comparator? public int compareTo(Person p) { return this.age - p.age; } Simpel compareTo metoden defineres i Person klassen, som implementerer interfacet Comparable Man kan kun have en ordning ad gangen (naturlige ordning) Comparable public Person findOldestPerson() { return Collections.max(persons); } public class ByAge implements Comparator<Person> { public int compare (Person p1, Person p2) { return p1.getAge() - p2.getAge(); } Mere kompleks compare metoden defineres i en ny klasse, som implementerer interfacet Comparator min, max og sort metoderne har en ekstra parameter Til gengæld er det nu muligt at have flere ordninger samtidigt Comparator public Person findOldestPerson() { return Collections.max(persons, new ByAge()); } public Person findFirstPerson() { return Collections.min(persons, new ByName()); } Clicker Quiz I køreprøven er det tilstrækkeligt at bruge Comparable

● 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; Algoritmeskabelon Gennemsøger LISTE med elementer af typen TYPE 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

findBest er ofte et sorteringsproblem Hvis man vil finde den ældste kvinde i en liste af personer, kan det gøres på følgende måde Definer en ordning, efter alder, på objekterne i Person klassen ved hjælp af compareTo i Comparable eller compare i Comparator Brug findAll algortimeskabelonen til at finde en delliste indeholdende alle kvinder (fra den oprindelige liste) Brug max metoden i Collections til at finde den ældste kvinde i dellisten (hvis dellisten er tom returneres null) Alternativt kan man erstatte de sidste to skridt med Brug sort metoden i Collections til at sortere Person listen efter alder (med de ældste først) Brug findOne algoritmeskabelonen til at finde den første person, som er en kvinde (i den sorterede liste) Hvilken af de to fremgangsmåder er bedst og hvorfor? I den sidste laver man en sortering, hvilket kan være dyrt I den sidste antager man, at findOne returnerer det første element, der opfylder betingelsen

● Kørepøven Køreprøven afvikles fredag den xx oktober Køreprøven er obligatorisk og skal bestås for at følge resten af kurset Du kan kun gå til køreprøven, hvis du forinden har fået godkendt alle afleveringsopgaver fra Uge 1-6 Køreprøven er en 30 minutters praktisk prøve uden forberedelse Den afvikles i hold på ca. 30 personer Du skal medbringe en bærbar computer og har selv ansvar for, at den fungerer tilfredsstillende og har netadgang, således at du kan tilgå Javas klassebibliotek Du kan bytte tidspunkt med en medstuderende, hvis I pr. e-mail orienterer forelæseren og den administrative instruktor om byttet senest onsdag den xx. oktober kl 12.00

Tjekpunkter Hver eksaminand skal individuelt løse en simpel programmeringsopgave Opgavesættet består af 10 opgaver, som skal løses i rækkefølge Hvis man f.eks. springer opgave 7 og 8 over – får man intet for de dele af opgave 9 og 10 som man måtte løse Undervejs er der fire tjekpunkter. Ved disse skal I tilkalde en instruktor (og være klar til at demonstrere jeres kode) Det er vigtigt, at I husker at få jeres kode godkendt af en instruktor – hver gang I passerer et tjekpunkt På den måde undgår I at forsætte uden at det, som I har lavet hidtil, er korrekt Derudover skal vi have registreret, at I har klaret tjekpunktet. Efter køreprøven ser vi kun på jeres kode, hvis der opstår tvivlsspørgsmål Lav jeres program så letlæseligt og velstruktureret som muligt (og overhold Java style guiden) Ved køreprøven behøver I ikke at bruge tid på at skrive kommentarer Vi anbefaler dog, at I indsætter forklarende tekst i jeres udskrifter, så I (og instruktorerne) kan se, hvad det er, I forsøger at skrive ud

Tilladt / forbudt Opgaverne skal løses ved hjælp af imperativ programmering Man må altså ikke bruge streams og lambda'er (som introduceres i næste forelæsning) Eneste tilladte hjælpemidler er JavaDoc for Javas klassebibliotek (API) samt BlueJ editoren (eller en anden Java editor) Man må ikke auto-generere kode for konstruktører og lignende Det er ikke tilladt at benytte bogen eller at tilgå andet materiale, herunder slides, noter og gamle BlueJ projekter Bliver man taget i dette, bortvises man fra prøven Til stede ved prøven vil være forelæseren og et antal instruktorer Det er tilladt at kommunikere med disse personer (opklarende spørgsmål, hjælp til at komme videre, etc.) Det er ikke tilladt at kommunikere med de øvrige eksaminander Ved prøvens afslutning afleveres jeres besvarelse på samme måde som ved de obligatoriske afleveringer i løbet af kurset

Resultat + praktiske ting Man får 5 point for hvert tjekpunkt, dvs. at fuld besvarelse giver 20 point For at bestå skal man mindst klare de to første tjekpunkter (dvs. de første 8 af de 10 opgaver) Resultatet kan ses på kursets Blackboard side i løbet af få dage Resultatet tæller med ca. 20% i den endelige karakter for kurset Hvis man ikke består køreprøven kan man komme til en ny køreprøve mandag den xx oktober Hvis denne heller ikke bestås, må man forlade kurset – og eventuelt prøve igen året efter Kom I god tid – senest 15 minutter før start I bliver lukket ind i lokalet ca. 10 minutter før start Der er et "venteværelse", hvor man kan opholde sig indtil det bliver ens tur Brug gerne ventetiden til at tjekke, at din computer fungerer og har netforbindelse Husk at medbringe studiekort

Forberedelse til køreprøven Løs tidligere opgavesæt Et stort udvalg (ca. 40 stk) kan findes nederst på ugeoversigten Videoer med løsning af fire opgavesæt kan findes under uge 5-6 på ugeoversigten Husk at det ikke er nok at se videoerne. I skal også bagefter selv prøve at løse opgaverne Tag tid, så I kan se, hvor meget I kan klare på 30 minutter 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

● Opsummering Sortering ved hjælp af klassen Collections Ved hjælp af interfacet Comparable (Naturlige ordning) Ved hjælp af interfacet Comparator (mulighed for flere ordninger) findBest som sorteringsproblem Køreprøven i uge 7 Form Forberedelse Køreprøven indeholder opgaver, som kan løses ved hjælp af Collections og Comparable

De næste uger Forelæsninger Opgaver Uge 6 Mandag: Funktionel programmering i Java + repræsentation af afbildninger og mængder De fire andre forelæsninger af aflyst Opgaver Uge 5: To opgavesæt fra 2013-2014 (begge afleveres) Uge 6: Fire opgavesæt fra 2013-2014 (hvoraf to afleveres) Alle opgaverne løses og afleveres individuelt Undervejs må I gerne snakke med jeres makker og 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 Husk at kurset har nul-tolerance overfor plagiering Man må ikke kopiere hinandens kode Hvis I bliver taget I plagiering, kommer I først til eksamen næste år

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