Föreläsning 1 Innehåll. EDAA01 Programmeringsteknik - fördjupningskurs. Detta ska du lära dig... Kursens mål. Detta kan du...

Relevanta dokument
Mål Förklaring av termer

Mål Förklaring av termer

EDAA30 Programmering i Java - fortsättningskurs

Föreläsning 1 Innehåll

Introduktionsmöte Innehåll

EDAA01 Programmeringsteknik - fördjupningskurs

Föreläsning 14 Innehåll

Föreläsning 13 Innehåll

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Föreläsning 5-6 Innehåll

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

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

1 Repetition av viktiga begrepp inom objektorienterad programmering

Repetition av viktiga begrepp inom objektorienterad programmering

Länkade strukturer. (del 2)

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

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar

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

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

Programmeringsteknik II

Föreläsning 4 Innehåll

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

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

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Interfacen Set och Map, hashtabeller

Inlämningsuppgift och handledning

Föreläsning 10 Innehåll

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Föreläsning 9 Innehåll

Begreppet subtyp/supertyp i Java. Mera om generik. Generik och arv. Generik och arv. Innehåll

Föreläsning 10 Innehåll. Diskutera. Hashtabeller. Hashfunktion. hashfunktion. hashkod (ett heltal)

Inlämningsuppgift och handledning. Föreläsning 11 Innehåll. Diskutera. Hashtabeller

Seminarium 13 Innehåll

EDAA01 Programmeringsteknik - fördjupningskurs

Diskutera. Hashfunktion

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, 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 13 Innehåll

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Samlingar Collection classes

Stackar, köer, iteratorer och paket

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

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

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

Datastrukturer. föreläsning 3. Stacks 1

Föreläsning 15: Repetition DVGA02

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

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

Föreläsning REPETITION & EXTENTA

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

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Föreläsning 2 Innehåll

Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen

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

Föreläsning 9 Innehåll

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

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

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Objektorienterad programmering (OOP) Föreläsning 15 & 16. Klasser för olika slags fordon. Klasser och objekt

Föreläsning 1-2 Innehåll. EDAA01 Programmeringsteknik - fördjupningskurs. Detta kan du... Förkunskaper

Föreläsning 1-2 innehåll

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

DAT043 - föreläsning 8

Föreläsning 3. Stack

Föreläsning 1 & 2 INTRODUKTION

Tentamen. DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl Hjälpmedel: penna, suddgummi, linjal

Föreläsning 11 Innehåll

Tentamen i Objektorienterad modellering och design Helsingborg

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Programmering fortsättningskurs

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd

Föreläsning 17 UTBLICK: FORTSÄTTNINGSKURSER I DATAVETENSKAP + ANDROID

Exempel på användning av arv: Geometriska figurer

Föreläsning 1 & 2 INTRODUKTION

Föreläsning Innehåll. Checklista. Några metoder i klassen ArrayList<E> Exempel på vad du ska kunna

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

Objektorienterad Programmering (TDDC77)

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

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

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

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

Föreläsning 3. Stack

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Objektorienterad Programkonstruktion

Föreläsning 2 Innehåll

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

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 5 Innehåll

Repetition av OOP- och Javabegrepp

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

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

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

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

DAT043 Objektorienterad Programmering

Repetition av OOP- och Javabegrepp

Transkript:

Föreläsning 1 Innehåll EDAA01 Programmeringsteknik - fördjupningskurs Introduktion Kursens mål och innehåll Hur kursen går till, undervisningsmoment mm. Arv, abstrakta klasser och metoder (repetition) Abstrakta datatyper - lista, stack, FIFO-kö, mängd, map, prioritetskö Java Collections Framework (interface och klasser för samlingar av element) Läsperiod lp 3 (Ges även lp 1+2) 7.5 hp anna.axelsson@cs.lth.se cs.lth.se/edaa01vt Förkunskapskrav: Godkänd på de obligatoriska momenten i EDAA45 Programmering, grundkurs eller godkänt betyg på tentamen i denna kurs eller i EDA011, EDA016, EDA017, EDAA20 eller EDA501 Datavetenskap (LTH) Föreläsning 1 VT 2018 1 / 51 Datavetenskap (LTH) Föreläsning 1 VT 2018 2 / 51 Detta kan du Förkunskaper en hel del om programmering och objektorientering begrepp som klass, objekt, attribut, metod, parameter skriva mindre program i programspråket Java skriva och debugga program i utvecklingsverktyget Eclipse använda vektorer, matriser och (delvis) klassen ArrayList enkla algoritmer som t.ex. linjärsökning, insättning i en redan sorterad vektor använda arv superklass, subklass, abstrakt metod Datavetenskap (LTH) Föreläsning 1 VT 2018 3 / 51 Detta ska du lära dig Kursens mål mer om programmering och objektorientering interface, exceptions, generik formulera och använda olika algoritmer för att effektivt lösa problem sökning, sortering, rekursiva algoritmer Känna till olika abstrakta datatyper viktigaste operationerna, användningsområden lista, stack, kö, mängd, map, prioritetskö använda olika datastrukturer vektorer, länkade listor, binära sökträd, hashtabeller, heapar dels genom att använda färdiga klassbibliotek och dels genom att göra egna implementeringar skriva program med grafiska användargränssnitt (JavaFX) testa klasser (junit) analysera och jämföra algoritmers tidsåtgång Datavetenskap (LTH) Föreläsning 1 VT 2018 4 / 51

Mål Förklaring av termer Algoritm Beskrivning hur man stegvis löser ett problem. Ex: matrecept, linjärsökning Abstrakt datatyp En abstrakt modell tillsammans med de operationer man kan utföra på den. Ex: lista med operationer för att sätta in och ta bort element Datastruktur En samling variabler (ofta med samma datatyp) som hör ihop. Ex: vektor Varför är detta viktigt att kunna? Till skillnad mot övningsprogram är riktiga program stora, skrivs av flera personer, har lång livstid, kräver underhåll.... Därför är följande viktigt: bra design läsbar kod att man kan välja lämpliga algoritmer, datastrukturer och färdiga byggstenar (klasser ur bibliotek) bra verktyg för programutveckling, felsökning och testning Klassbibliotek Färdiga klasser som är tänkta att användas i andra program. Fungerar som en utvidgning av programspråket. Ex: Java Collections Framework Datavetenskap (LTH) Föreläsning 1 VT 2018 5 / 51 Datavetenskap (LTH) Föreläsning 1 VT 2018 6 / 51 Exempel Från problem till program Skriv program för att hantera kontakter (namn, mobil nr ). Att fundera på: Ska vi använda en vektor eller finns det andra, bättre sätt att lagra posterna? Finns det färdiga klasser som kan användas? Hur sker kommunikationen med användaren (utskrifter i konsolfönstret eller snyggare grafiskt användargränssnitt)? Hur designar man programmet så att man lätt kan byta sätt? Hur söker man snabbt om antal poster är stort? Specifikation av problemet Design Val av lösningsmetoder (algoritmer, datastrukturer) för delproblem Implementering (programskrivning) Testning Underhåll (korrigeringar och uppdateringar) Parallellt: dokumentation Xy XXX X XX X Behandlas i EDA060, OMD Behandlas i denna kurs Datavetenskap (LTH) Föreläsning 1 VT 2018 7 / 51 Datavetenskap (LTH) Föreläsning 1 VT 2018 8 / 51

Kursmoment Examination Laborationer 6 st, läsveckorna 2-7, obligatoriska Kräver förberedelser. Ska lösas i grupper om två. Anmälan till önskad labbgrupp görs på kursens webbsida. Inlämningsuppgift andra halvan av läsperioden, obligatorisk Löses normalt i grupper om två (eller tre). Finns på webbsidan. Det finns två alternativ att välja mellan. Jourtider för frågor i samband med inlämningsuppgiften kommer att finnas. Redovisas i läsvecka 8. Skriftlig tentamen Kursen inrapporteras i Ladok i två delar Obligatoriska moment (laborationer + inlämningsuppgift) 3 hp Tentamen 4.5 hp Övningsuppgifter Viktigt komplement till laborationerna. Löses på egen hand. Föreläsningar 14 st Frågestunder fredag lunch Datavetenskap (LTH) Föreläsning 1 VT 2018 9 / 51 Datavetenskap (LTH) Föreläsning 1 VT 2018 10 / 51 Rekommenderad lärobok Relation till andra kurser E. Koffman och A. T. Wolfgang: Data Structures: Abstraction and Design Using Java, 3rd Edition, Wiley 2016. Det går även bra att använda den andra upplagan (med Java 7). Den första upplagan heter Objects, Abstraction, Data Structures and Design Using Java Version 5.0 och fungerar också. Litteraturanvisningar ges för alla tre upplagorna. För C och D ingår kursen i kurskedjor. Det är viktigt att känns till förkunskapskraven i kedjan. Finns på webbsidan. I övrigt gäller att nästan alla valfria kurser i datavetenskap kräver godkänt i EDAA01. Datavetenskap (LTH) Föreläsning 1 VT 2018 11 / 51 Datavetenskap (LTH) Föreläsning 1 VT 2018 12 / 51

Om att lära sig programmera Kommunikation Programmering är kul! Programmering tar tid (fundera ut lösningar, hitta fel ). Man lär sig programmera genom att träna. Skriv program, testa, hitta på egna program, experimentera Men inte bara - glöm inte bort teorin. Starten är viktig. Häng med från början! Det man lär sig kommer att byggas på och användas genom hela kursen. De olika undervisningsmomenten (övningsuppgifter, labbar, föreläsningar ) finns av en anledning och kompletterar varandra. Webbsida: http://cs.lth.se/edaa01vt Information om kursen (kursplan, schema, gruppindelning ) Material (övningar, laborationer, föreläsningsbilder etc). Viktiga nyheter presenteras här. Håll koll på denna sida. Moodle: moodle.cs.lth.se Veckoschema Quizzar Länk till Moodle-sidan samt kursnyckel finns på kursens webbsida. E-post: Kursansvarig: anna.axelsson@cs.lth.se Mail kommer vid behov att skickas till din student-mail. Frågor, problem? Tveka inte att ställa frågor (på föreläsningarna, mellan föreläsningarna, på frågestunder, forum på Moodle ) Datavetenskap (LTH) Föreläsning 1 VT 2018 13 / 51 Datavetenskap (LTH) Föreläsning 1 VT 2018 14 / 51 CEQ-synpunkter Nytt sedan förra kursomgången (HT17) Överlag nöjda studenter Några synpunkter från tidigare kursomgångar: Lärorika labbar Bra att det finns så mycket olika underlag, övningar, föreläsningsanteckningar, quiz, labbar. Jag hade velat se att allt som kunde dyka upp på tentan har behandlats i labbarna Får inte plats, glöm inte bort övningsuppgifterna! Väntetid för att få redovisa Jag ska se över detta och diskutera detta med labbledarna. Ofta finns färdiga testklasser som visar om programmet fungerar som det ska. Labbarna tog väldigt lång tid att förbereda. Ja så är det. Labbarna kräver förberedelser. Varför ska man skriva tenta för hand I nuläget finns inte logistik/ekonomi för att hantera tenta på dator. Två laborationer har ändrats något. Ett av alternativen till inlämningsuppgift har bytts ut. Datavetenskap (LTH) Föreläsning 1 VT 2018 15 / 51 Datavetenskap (LTH) Föreläsning 1 VT 2018 16 / 51

Arv repetition Exempel I ett program ska geometriska figurer (kvadrater och cirklar) hanteras. Figurerna ska kunna flyttas och ritas upp på skärmen. Kort repetition av arv, abstrakta klasser och abstrakta metoder i Java Deklarera interface Skriva klasser som implementerar interface Shape {abstract x y Shape(int, int) moveto(x, y) draw(simplewindow) Square side Square(int, int, int) Circle radius Circle(int, int, int) Datavetenskap (LTH) Föreläsning 1 VT 2018 17 / 51 Datavetenskap (LTH) Föreläsning 1 VT 2018 18 / 51 Arv Superklassen Shape Arv Subklassen Square public abstract class Shape { protected int x; protected int y; protected Shape(int x, int y) { this.x = x; this.y = y; public void move(int dx, int dy) { x = x + dx; y = y + dy; public abstract void draw(simplewindow w); public class Square extends Shape { private int side; public Square(int x, int y, int side) { super(x, y); this.side = side; public void draw(simplewindow w) { w.moveto(x, y); w.lineto(x + side, y); w.lineto(x + side, y + side); w.lineto(x, y + side); w.lineto(x, y); Datavetenskap (LTH) Föreläsning 1 VT 2018 19 / 51 Datavetenskap (LTH) Föreläsning 1 VT 2018 20 / 51

Arv Exempel Diskutera public class Main { public static void main(string[] args) { Shape[] theshapes = new Shape[3]; theshapes[0] = new Square(100, 300, 100); theshapes[1] = new Square(400, 200, 100); theshapes[2] = new Circle(400, 400, 50); SimpleWindow w = new SimpleWindow(600, 600, "Figurer"); for (int i = 0; i < theshapes.length; i++) { theshapes[i].move(10, 10); Klassen Shape har den abstrakta metoden draw. Vad är en abstrakt metod? Varför finns den abstrakta metoden draw i klassen Shape? for (int i = 0; i < theshapes.length; i++) { theshapes[i].draw(w); Datavetenskap (LTH) Föreläsning 1 VT 2018 21 / 51 Datavetenskap (LTH) Föreläsning 1 VT 2018 22 / 51 I ett helt annat program är man bara intresserad av att beräkna figurernas area. Metoderna draw och move behövs ej och då inte heller de gemensamma attributen x och y. Onödigt att använda arv! Lösning: Skriv ett interface Measurable med en abstrakt metod för att beräkna arean. Låt klasserna Square och Circle implementera interfacet. public interface Measurable { /** Returns the area. */ double area(); Square side Square(int, int, int) <<interface>> Measurable area() : double Circle radius Circle(int, int, int) Datavetenskap (LTH) Föreläsning 1 VT 2018 23 / 51 Implementera interface Klassen Square implementerar interfacet Measurable I en klass som implementerar ett interface måste alla abstrakta metoder i interfacet implementeras: public class Square implements Measurable { private int side; public Square(int side) { this.side = side; public double getside() { return side; public double area() { return side * side; Datavetenskap (LTH) Föreläsning 1 VT 2018 24 / 51

Datatyp Ett interface är en datatyp (precis som en klass). Exempel 1: Measurable m = new Square(50); System.out.println(m.area()); Exempel 2: public static double sumareas(measurable[] a) { int sum = 0; for (int i = 0; i < a.length; i++) { sum += a[i].area(); return sum; Exempel En variabel av typen Measurable kan referera till objekt av alla klasser som implementerar interfacet: public class Main { public static void main(string[] args) { Measurable[] theshapes = new Measurable[3]; theshapes[0] = new Square(100); theshapes[1] = new Square(100); theshapes[2] = new Circle(50); int sum = 0; for (int i = 0; i < theshapes.length; i++) { sum += theshapes[i].area(); System.out.println(sum); Datavetenskap (LTH) Föreläsning 1 VT 2018 25 / 51 Datavetenskap (LTH) Föreläsning 1 VT 2018 26 / 51 Deklarera interface Innehåller oftast en eller flera publika, abstrakta metoder. Metoderna är implicit publika och abstrakta, dvs. man behöver inte skriva public abstract. public interface Measurable { /** Returns the area. */ double area(); Deklarera interface, forts Från och med Java 8 kan interface innehålla abstrakta metoder konstanter statiska metoder default-metoder public interface Measurable { /** Returns the area. */ double area(); /** Returns a String representation of the area. */ public default String areaasstring() { return String.valueOf(area()); Datavetenskap (LTH) Föreläsning 1 VT 2018 27 / 51 Datavetenskap (LTH) Föreläsning 1 VT 2018 28 / 51

Diskutera Kontrakt Har du träffat på interface tidigare (t ex i grundkursen)? Ge exempel. Hitta likheter/skillnader mellan abstrakta klasser och interface? betyder gränssnitt. t fungerar som kontrakt eller specifikation. En klass som implementerar interfacet måste implementera alla abstrakta metoder i interfacet. Annars går klassen inte att kompilera. Flera olika klasser kan implementera samma interface. Datavetenskap (LTH) Föreläsning 1 VT 2018 29 / 51 Datavetenskap (LTH) Föreläsning 1 VT 2018 30 / 51 Ger valmöjlighet Implementera flera interface Genom att använda interfacenamnet som typnamn kan man skjuta upp valet av implementering. lätt byta en implementerande klass mot en annan. Man kan använda alla metoder i ett interface innan de är implementerade. Det är bara när man skapar instanser som man behöver en implementerande klass. Exempel: eller List<Integer> list = new ArrayList<Integer>(); List<Integer>list = new LinkedList<Integer>(); En klass kan implementera flera interface men bara ärva från en klass. public class Square extends Shape implements Measurable, Cloneable { // implementering av alla abstrakta metoder i klassen Shape // och i interfacen Measurable och Cloneable List<E> är ett interface i java.util, medan ArrayList<E> och LinkedList<E> är konkreta klasser. Datavetenskap (LTH) Föreläsning 1 VT 2018 31 / 51 Datavetenskap (LTH) Föreläsning 1 VT 2018 32 / 51

Exempel: Komplexa tal t ComplexNumber public interface ComplexNumber { /** Returns real part. */ double getre(); /** Returns imaginary part. */ double getim(); /** Adds this number and rhs and returns result as a new complex number. */ ComplexNumber add(complexnumber rhs); Exempel: Komplexa tal Klass som implementerar interfacet public class RectangularComplexNumber implements ComplexNumber { private double re; private double im; public RectangularComplexNumber(double re, double im) { this.re = re; this.im = im; public double getre() { return re; public double getim() { return im; Datavetenskap (LTH) Föreläsning 1 VT 2018 33 / 51 Datavetenskap (LTH) Föreläsning 1 VT 2018 34 / 51 Exempel: Komplexa tal En annan klass som implementerar interfacet public class PolarComplexNumber implements ComplexNumber { private double r; private double theta; public PolarComplexNumber(double re, double im) { r = Math.sqrt(re*re + im*im); theta = Math.atan2(im, re); /** returns real part */ public double getre() { return r * Math.cos(theta); Abstrakta datatyper Vad är en abstrakt datatyp? Översikt över de abstrakta datatyperna som ingår i kursen /** returns imaginary part */ public double getim() { return r * Math.sin(theta); Datavetenskap (LTH) Föreläsning 1 VT 2018 35 / 51 Datavetenskap (LTH) Föreläsning 1 VT 2018 36 / 51

Abstrakt datatyp (ADT) Viktiga abstrakta datatyper Definition En abstrakt modell tillsammans med de operationer man kan utföra på den. Exempel: Abstrakt modell: Operationer på modellen: komplexa tal ta reda på realdelen ta reda på imaginärdelen addera med ett annat komplext tal En ADT kan beskrivas av en specifikation eller av ett interface En klass är en implementering av en ADT Lista en samling element där positionering är möjlig (första, sista, element på plats i, ) Stack en följd av element där borttagning av ett element avser det element som senast satts in. FIFO-kö en följd av element där insättning gör sist och borttagning först i kön. Prioritetskö en kö där borttagning av element avser det viktigaste (minsta) elementet. Mängd (eng. Set) en samling element där dubbletter är förbjudna. Map en samling av nyckel-värde-par (jfr. lexikon) Datavetenskap (LTH) Föreläsning 1 VT 2018 37 / 51 Datavetenskap (LTH) Föreläsning 1 VT 2018 38 / 51 Abstrakt datatypen lista Abstrakta modell lista Verkliga problem 1:a elementet 2:a elementet 3:e elementet 4:e elementet Schema Abstrakt modell: lista Operationer på modellen: Lägga in element i listan (först, sist ) Ta bort ett element ur listan Undersöka om ett visst element finns i listan Ta reda på ett elementet i listan (första, sista ) Undersöka om listan tom Abstrakt modell Bokregister Lista Inköpslista Datavetenskap (LTH) Föreläsning 1 VT 2018 39 / 51 Datavetenskap (LTH) Föreläsning 1 VT 2018 40 / 51

Stack Definition En stack är en följd av element där borttagning av ett element alltid avser det senast insatta elementet. Kallas även LIFO-lista, Last In First Out Operationer sker på toppen av stacken. Köer IenFiFO-kögörsinsättningsistiföljdenochborttagningavserförsta (äldsta) elementet. First In First Out push pop poll offer Ienprioritetsköavserborttagningalltiddetmestprioriterade(minsta) elementet. Det viktigaste först. Datavetenskap (LTH) Föreläsning 1 VT 2018 41 / 51 Datavetenskap (LTH) Föreläsning 1 VT 2018 42 / 51 Mängd Map Ienmaplagrasnyckel-värde-par. Definition En mängd (eng. Set) är en en samling element där dubbletter är förbjudna. Operationer: sätta in ett element ta bort ett element undersöka om ett element finns i mängden Kan också kallas lexikon eller nyckel-värdetabell Nycklarna är unika. Man använder nyckeln för att söka tillhörande värde. Exempel: nyckel är månad, värde är antal dagar i månaden. nyckel är personnummer, värde är Person-objekt med namn, adress nycklar (unika) mars april maj värden (dubbletter ok) 31 30 31 Datavetenskap (LTH) Föreläsning 1 VT 2018 43 / 51 Datavetenskap (LTH) Föreläsning 1 VT 2018 44 / 51

Diskutera Abstrakta datatyper i kursen Välj den abstrakta datatyp (lista, stack, kö, prioritetskö, mängd, map) som passar bäst för att lösa respektive problem: Givet en samling element, tag reda på antal unika element. Hålla reda på ett antal arbetsuppgifter som ska utföras. Den arbetsuppgift som tar kortast tid ska utföras först. Räkna antal förekomster av ord i en text. Kontrollera att parenteser är korrekt nästlade { () () är ok, { ( ) är inte ok. Sortera element. I kursen kommer du att använda de olika abstrakta datatyperna för att lösa problem. Då måste du veta vad som utmärker de olika abstrakta datatyperna och vad man ska ha dem till. Du kommer att använda färdiga klasser från Javas klassbibliotek som implementerar dessa abstrakta datatyper. Men du kommer också att få se under huven hur de kan implementeras. Datavetenskap (LTH) Föreläsning 1 VT 2018 45 / 51 Datavetenskap (LTH) Föreläsning 1 VT 2018 46 / 51 Java Collections Framework Java Collections Framework interface hierarki Är en hierarki av interface, abstrakta klasser och konkreta klasser för samlingar av element. Dokumentation av Javas standardklasser och interface finns på Javas webbsida. Där finns även tuturials, bl.a. om Javas Collection-klasser. <<>> Collection <<>> Map Basen i hierarkin är ett interface Collection: interface Collection<E> { boolean add(e x); boolean contains(object x); boolean remove(object x); boolean isempty(); int size(); <<>> Queue <<>> Deque <<>> List <<>> Set <<>> SortedSet <<>> SortedMap Datavetenskap (LTH) Föreläsning 1 VT 2018 47 / 51 Datavetenskap (LTH) Föreläsning 1 VT 2018 48 / 51

Java Collections Framework interface hierarki Java Collections Framework några klasser Collection en samling av element, där dubbletter tillåts List en samling element där positionering är möjlig (första, sista, element på plats i, ) Queue en samling av element som utgör en kö Deque som Queue men man kan sätta in och ta ut element både i början och i slutet av kön Set en samling element där dubbletter är förbjudna SortedSet som Set men med krav att elementen går att jämföra Map en samling nyckel-värde-par (jfr. lexikon) SortedMap som Map men med krav att nycklarna går att jämföra Queue Deque List Set SortedSet Map SortedMap Klass ArrayDeque, LinkedList, PriorityQueue ArrayDeque, LinkedList ArrayList, LinkedList HashSet TreeSet HashMap TreeMap Datavetenskap (LTH) Föreläsning 1 VT 2018 49 / 51 Datavetenskap (LTH) Föreläsning 1 VT 2018 50 / 51 Exempel på vad du ska kunna Förklara begreppet abstrakt metod Förklara begreppet interface och deklarera interface i Java Skriva klasser som implementerar interface Förklara begreppet abstrakt datatyp Känna till några viktiga abstrakta datatyper och vad som utmärker dem Lista Stack FIFO-kö Prioritetskö Mängd Map Ha kännedom om Java Collection Framework Datavetenskap (LTH) Föreläsning 1 VT 2018 51 / 51