Stackar, köer, iteratorer och paket

Relevanta dokument
Länkade strukturer. (del 2)

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Föreläsning 4 Innehåll

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Länkade strukturer, parametriserade typer och undantag

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 5 Erik Nilsson, Institutionen för Datavetenskap, LiU

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition

Programmering för språkteknologer II, HT2011. Rum

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Datastrukturer. föreläsning 3. Stacks 1

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

DAT043 - föreläsning 8

Föreläsning 10. ADT:er och datastrukturer

2. Palindrom. Exempel: 1,2,3,2,1 är ett palindrom, och även 0, men inte 1,2,3,1,2,3.

Lösningsförslag till exempeltenta 2

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter

Samlingar Collection classes

Föreläsning 3. Stack

Objektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016

Övning vecka 5. Denna vecka ska vi titta pa samlingar, generics och designmönstren Decorator, Singleton och Iterator.

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

Sammansatta datatyper Generics: Parametrisk polymorfism

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

ADS : STACK ADT: STACK. Stack och Kö -Implementering - Tilllämpningar. Oftast förekommande metoder i Stack. TopOfStack

Föreläsning Datastrukturer (DAT036)

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Programmering för språkteknologer II, HT2014. Rum

Föreläsning 11. ADT:er och datastrukturer

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Seminarium 3 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

Föreläsning 12. Länkade listor

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Föreläsning 14 Innehåll

Föreläsning 3. Stack

Föreläsning 2. Länkad lista och iterator

Objektorienterad Programkonstruktion

Föreläsning 2. Länkad lista och iterator

Föreläsning 2 Datastrukturer (DAT037)

Samlingar Collection classes

Java Collections Framework. Föreläsning 2 Innehåll. Java Collections Framework interface hierarki. Java Collections Framework interface hierarki

Objektsamlingar i Java

Seminarium 2 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Programmering för språkteknologer II, HT2014. Rum

Föreläsning 3 Datastrukturer (DAT037)

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Föreläsning 2 Innehåll

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Föreläsning 8: Exempel och problemlösning

Outline. Objektorienterad Programmering (TDDC77) Laborationsserie del två. Vad händer under HT2. Introduktion HT2 UML.

Generisk klass med typparameter Inre klass - ListIterator

Objektorienterad Programmering (TDDC77)

Arrayer. results

Outline. Objektorienterad Programmering (TDDC77) Abstrakta klasser. Abstrakta metoder. Abstrakta klasser. Gränssnitt. Uppräkningar (enum) Ahmed Rezine

Föreläsning 2 Datastrukturer (DAT037)

Repetition av OOP- och Javabegrepp

725G61 - Laboration 5 Grundläggande objektorientering. Johan Falkenjack

Tentamen Programmering fortsättningskurs DIT950

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77)

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

Länkade listor, stackar och köer

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

DAT043 Objektorienterad Programmering

Repetition av OOP- och Javabegrepp

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!

Collection Classes. bjectorienterad programmering Sida 1

TDDC30 Programmering i Java, datastrukturer och algoritmer

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Collection classes. Interface, första exempel. Interface (forts) Men först

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

So far... For recursive and iterative programs. Bubble, insertion, selection, quick, merge, counting

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Laboration A Objektsamlingar

Tentamen i Algoritmer & Datastrukturer i Java

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Tentamen Objekt-orienterad programmering med Java, 1DL100 Sommarkurs och distanskurs

TDDC30 Programmering i Java, datastrukturer och algoritmer

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Föreläsning 3 Datastrukturer (DAT037)

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 5

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Föreläsning 15: Repetition DVGA02

Mål Förklaring av termer

Objektorienterad Programmering (TDDC77)

Innehåll. 5. More sophisticated behavior. Javas klassbibliotek. Arbete med klassbibliotek. A Technical Support System. Huvudloopens struktur

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Transkript:

Stackar, köer, iteratorer och paket Programmering för språkteknologer 2 Sara Stymne 2013-09-18

Idag Paket Stackar och köer Array resp länkad struktur Iteratorer Javadoc

Kommentarer lab 1 Bra att de flesta lämnade in i tid, och kompletterade snabbt! Vanliga svårighet Dela upp i klasser och metoder Tumregel Varje klass ska ha en tydlig uppgift/ansvar, det ska gå lätt att förklara vad klassen gör Varje metod ska ha en tydlig uppgift Det ska gå att ge namn som relativt tydligt berättar vad en klass/metod gör Övning behövs! Andra observationer Använd inkapsling (privata instansvariabler) om ni inte har mycket goda själ att låta bli! Undvik att upprepa liknande kod och köra många loopar över samma data om det ej är nödvändigt I statistkuppgiften räckte det egentligen med en loop över alla ord Det såg bra ut med era reguljära uttryck och automater!

Paket En samling klasser som har något gemensamt java.util java.util.regex javax.io javax.swing org.xml.sax... Kan importeras och användas av andra javaprogram

Paket som filstruktur Paketnamnen bildar en filstruktur java util regex

Egna paket Skapa en egen filstruktur! Byt ut alla. mot / Placera in klasserna där Deklarera att klasserna är medlemmar i paketet package packagename; När du använder en klass i paketet utanför paketet: import packagename.classname; import packagename.*

Namngivning av paket Använd unika namn Använd namn som beskriver innehållet Se till att namnen matchar filstrukturen

Paket kompilering Från terminalen Gå till paketkatalogen Kompilera filerna där Använd verktyg ant verktyg för att kompilera och skapa jar-filer IDE integrated development environment Eclipse NetBeans...

Fördelar med paket Saker som hör ihop klumpas ihop Namnkonflikter kan potentiellt undvikas Lättare att flytta och distribuera

Paket Vad händer om man inte själv skapar paket? Klasser som ligger i samma katalog hamnar i ett default -paket utan namn God programmeringsstil Använd alltid namngivna paket om du kodar lite större paket

Jar-filer Hur gör man om man ska dela med sig av ett Javaprogram? Skapa en jar-fil Javaprogram kan köras direkt från jar-filer java -jar filnamn.jar

Abstrakta datatyper Abstrakt datatyp (ADT) Ett teoretiskt begrepp Definieras som En typ En lista med operationer som ska kunna utföras Den abstrakta typen säger ingenting om hur typen ska implementeras, bara om vad man ska kunna göra med den

Abstrakta datatyper stack En listliknande struktur, men där element enbart kan sättas in och tas bort i en ända LIFO last in, first out Element tas bort i omvänd ordning från vad de kom in Stapel snarare än stack på svenska

Stack grundläggande metoder void push(e element) E pop() E peek()

Stack grundläggande metoder void push(e element) E pop() E peek() boolean isempty() int size() void clear()

Stack implementationer Hur en stack implementeras är ej specificerat Två vanliga implementationer: Med hjälp av en array Som en länkad struktur

Stack implementationer Hur en stack implementeras är ej specificerat Två vanliga implementationer: RITA BILDER!! Med hjälp av en array Som en länkad struktur

Stack implementationer Hur en stack implementeras är ej specificerat Två vanliga implementationer: Med hjälp av en array Som en länkad struktur RITA BILDER!! VISA KODEXEMPEL

Komplexitet för olika stackimplementationer Array Länkad lista pop O(1) O(1) push O(1) O(1) peek O(1) O(1)

Komplexitet för olika stackimplementationer Array Länkad lista pop O(1) O(1) push O(1) O(1) peek O(1) O(1) Eftersom stack är så specialiserad går den att implementera effektivt!

Stack med hjälp av LinkedList public class <T> myarraystack { private LinkedList<T> list;... void push(t element) { list.addfirst(element); } } E pop() { return list.removefirst(); }

Stack med hjälp av LinkedList public class <T> myarraystack { private LinkedList<T> list;... void push(t element) { list.addfirst(element); } } E pop() { return list.removefirst(); } Bra lösning?

Stack med hjälp av LinkedList public class <T> myarraystack { private LinkedList<T> list;... void push(t element) { list.addfirst(element); } } E pop() { return list.removefirst(); } Bra lösning? Helt OK, men något ineffektiv, eftersom LinkedList tillåter fler operationer än stack

Stack med hjälp av LinkedList 2 public class <T> myarraystack extends LinkedList<T> {... } void push(t element) { addfirst(element); } E pop() { removefirst(); }

Stack med hjälp av LinkedList 2 public class <T> myarraystack extends LinkedList<T> {... } void push(t element) { addfirst(element); } E pop() { removefirst(); } Bra lösning?

Stack med hjälp av LinkedList 2 public class <T> myarraystack extends LinkedList<T> {... } void push(t element) { addfirst(element); } E pop() { removefirst(); } Bra lösning? Ger stackoperationerna, precis som förra lösningen, men även alla andra LinkedList-operationer

Abstrakta datatyper kö Queue En listliknande struktur, men där element sätts in i en ända, och tas ut i andra änden FIFO first in, first out Element tas bort i samma ordning som de sätts in Som en kö i en affär

Kö grundläggande metoder void enqueue(e element) E dequeue()

Kö grundläggande metoder void enqueue(e element) E dequeue() boolean isempty() int size() void clear()

Kö implementationer Hur en kö implementeras är ej specificerat Två vanliga implementationer: Med hjälp av en array Som en länkad struktur

Kö implementationer Hur en kö implementeras är ej specificerat Två vanliga implementationer: Med hjälp av en array Som en länkad struktur RITA BILDER!!

Komplexitet för olika köimplementationer Array Länkad lista enqueue O(1) O(1) dequeue O(1) O(1)

Komplexitet för olika köimplementationer Array Länkad lista enqueue O(1) O(1) dequeue O(1) O(1) Eftersom kö är så specialiserad går den att implementera effektivt!

Gå igenom en lista/stack/kö Hur gör man för att gå igenom alla element i en lista/stack/kö?

Gå igenom en lista/stack/kö Hur gör man för att gå igenom alla element i en lista/stack/kö? Vanligtvis en loop: for(string s: names) { System.out.println(s); }

Gå igenom en lista/stack/kö Hur gör man för att gå igenom alla element i en lista/stack/kö? Vanligtvis en loop: for(string s: names) { System.out.println(s); } Implicit används en iterator i loopen: for(iterator<string> it = names.iterator(); it.hasnext();) { String s = it.next(); System.out.println(s); }

Gå igenom en lista/stack/kö Hur gör man för att gå igenom alla element i en lista/stack/kö? Vanligtvis en loop: for(string s: names) { System.out.println(s); } Implicit används en iterator i loopen: for(iterator<string> it = names.iterator(); it.hasnext();) { String s = it.next(); System.out.println(s); } en iterator är ett objekt som används för att stega igenom en samling

Listklass med iterator MyList<T> måste implementera Iterable<T> MyList<T> måste tillhandahålla metoden Iterator<T> iterator() Vi behöver en iteratorklass, som implementerar Iterator<T>

Gränssnittet Iterable<T> Iterator<T> iterator() Returns an iterator over a set of elements of type T Implementeras av samlings -klassen

Gränssnittet Iterator<T> boolean hasnext() Returns true if the iteration has more elements E next() Returns the next element in the iteration void remove() Removes from the underlying collection the last element returned by this iterator (optional operation)

Gränssnittet Iterator<T> boolean hasnext() Returns true if the iteration has more elements E next() Returns the next element in the iteration void remove() Removes from the underlying collection the last element returned by this iterator (optional operation) Implementeras av iteratorklassen

Gränssnittet Iterator<T> boolean hasnext() Returns true if the iteration has more elements E next() Returns the next element in the iteration void remove() Removes from the underlying collection the last element returned by this iterator (optional operation) Implementeras av iteratorklassen Det finns även ett gränssnitt ListIterator, som innehåller fler metoder för listor

Iterator för arraybaserad stack Vad behöver vi känna till? Vilket index vi är på Vilka värden som finns på vilken plats i stacken Hur många värden som finns i stacken

Iterator för arraybaserad stack Vad behöver vi känna till? Vilket index vi är på Vilka värden som finns på vilken plats i stacken Hur många värden som finns i stacken Det vill säga: vi behöver helt enkelt känna till stacken Gör en intern klass!

Iterator för arraybaserad stack Vad behöver vi känna till? Vilket index vi är på Vilka värden som finns på vilken plats i stacken Hur många värden som finns i stacken Det vill säga: vi behöver helt enkelt känna till stacken Gör en intern klass! VISA KODEXEMPEL!

Iterator för länkad stack Vad behöver vi känna till? Vilken nod vi är på next samt value för noder

Iterator för länkad stack Vad behöver vi känna till? Vilken nod vi är på next samt value för noder Det vill säga vi måste känna till stackklassens struktur, men annars räcker det med att känna till första noden

Iteratorer fördelar Iteration fungerar likadant för alla samlingsklasser ArrayList, LinkedList, TreeSet, HashSet, ArrayDeque, TreeMap, HashMap, LinkedHashMap,... Foreach-loopen kan användas, vilken implicit använder iterator

Vad är javadoc? javadoc är ett verktyg för att skapa javadokumentation Javas API är skapat med hjälp av javadoc Man kan skapa egen dokumentation med hjälp av javadoc Kräver en särskild typ av kommentarer Så kallade javadoc-kommentarer

Javadoc-kommentarer exempel /** * dumb example class * @author Sara Stymne */ public class MyClass { } /** * This subroutine gives the max number if two integers, * if they are bigger than 0 * @param i1 the first integer * @param i2 the second integer * @return the largest of the two integers, larger than 0 * @throws MyException if neither integer is larger than 0 */ public int method maxpositive(int i1, int i2) {... }

Hur skriver man javadoc-kommentarer? Kan finnas för Klasser Metoder Variabler (instans- och klass-) Skrivs inom kommentarsblock som startar med: /** Kan innehålla Text, som kan vara html-formatterad Taggar, startar med @, har speciell betydelse

Vanliga taggar Klass @author författaren till koden @version kodversion Metod @param parameter @return returvärde @throws exception som kan kastas @deprecated utdaterad metod Klass och metod @see referens till annan symbol

Hur skapar man ett eget Java API? Kör kommandot javadoc för din kod! Eclipse har också kommandon för att köra javadoc

Hur skapar man ett eget Java API? Kör kommandot javadoc för din kod! Eclipse har också kommandon för att köra javadoc VISA EXEMPEL!

Lab 3 Fokus på länkade strukturer Simulering av en stormarknad Labstruktur: Given kod för stormarknadssimuleringen Ni ska lägga till ett paket med följande klasser Länkad lista Iterator för listan Stack (baserad på länkad struktur) Kö (baserad på länkad struktur) Nodklass (gemensam för ovanstående klasser) Koden ska kasta undantag där det behövs Koden ska vara kommenterad med javadoc-kommentarer, och ni ska skapa ett API för er kod

Kommande veckor Lab 2: deadline fredag 27/9 Lab 3 Handledning 30/9, 9/10 Deadline 14/10 Nästa föreläsning: 9/10 Hashtabeller Mer om objektorientering + övning Hör av er om ni vill att jag ska ta upp något särskilt! Sista föreläsningen: 4/11 Repetition Genomgång av exempeltenta Det flesta föreläsningarna har varit Mycket eget arbete! Hör av er om ni behöver hjälp/undrar något! Kom på labtillfällena för att få hjälp

Jobba själv Gör labbar Gör progammeringsövningar Från boken Labbar från tidigare kursomgångar Läs/tentaplugga om det vi gått igenom på föreläsningarna och som står i kursmålen Glöm inte att anmäla er till tentan i portalen!