Föreläsning 1 Innehåll

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. EDAA01 Programmeringsteknik - fördjupningskurs. Detta ska du lära dig... Kursens mål. Detta kan du...

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

Repetition av viktiga begrepp inom objektorienterad programmering

1 Repetition av viktiga begrepp inom objektorienterad programmering

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

Programmeringsteknik II

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

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

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

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

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

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.

Föreläsning 1-2 innehåll

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

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

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

Föreläsning 9 Innehåll

Föreläsning 15: Repetition DVGA02

Föreläsning 4 Innehåll

Seminarium 13 Innehåll

Föreläsning 9 Innehåll

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

Föreläsning REPETITION & EXTENTA

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

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

Länkade strukturer. (del 2)

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

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

Föreläsning 13 Innehåll

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

EDAA01 Programmeringsteknik - fördjupningskurs

Tentamen i Objektorienterad modellering och design Helsingborg

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

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

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

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

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

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

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

Datastrukturer. föreläsning 3. Stacks 1

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

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

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.

Tentamen, Algoritmer och datastrukturer

Föreläsning 1 & 2 INTRODUKTION

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

Exempel på användning av arv: Geometriska figurer

Objektorienterad Programmering (TDDC77)

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

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

DAT043 - Föreläsning 7

Föreläsning 9-10 Innehåll

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

Översikt. Programmering tillämpningar och datastrukturer. Vad kursen täcker. Lärare. Rekommenderad litteratur. Kursmål 729G58 (HKGBB7)

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

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

Introduktion till Datalogi DD1339. Föreläsning 1 8 sept 2014

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

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

Inlämningsuppgift och handledning

DAT043 - föreläsning 8

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

DAT043 Objektorienterad Programmering

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

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

Innehåll. Mina målsättningar. Vad krävs för att nå dit? Obligatoriska uppgifter. Websajten. Datastrukturer och algoritmer

Välkommen till. Datastrukturer, algoritmer och programkonstruktion. eller DOA

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

Föreläsning 1 & 2 INTRODUKTION

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

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

Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.

Föreläsning 1 Datastrukturer (DAT037)

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

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

Tentamen, EDAA10 Programmering i Java

13 Prioritetsköer, heapar

Objektorienterad Programmering (TDDC77)

Stackar, köer, iteratorer och paket

Föreläsning 11 Innehåll

Tentamen i Programmering

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

Föreläsning 5 Innehåll

Diskutera. Hashfunktion

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

Föreläsning 3 Datastrukturer (DAT037)

Transkript:

Föreläsning 1 Innehåll Introduktion Kursens mål och innehåll Undervisning Arv, abstrakta klasser och metoder (repetition) Interface Abstrakta datatyper - lista, stack, FIFO-kö, mängd, map, prioritetskö Datavetenskap (LTH) Föreläsning 1 HT 2018 1 / 46

EDAA01 Programmeringsteknik - fördjupningskurs Läsperiod lp 1+2 (Ges även lp 3) 7.5 hp anna.axelsson@cs.lth.se cs.lth.se/edaa01ht moodle.cs.lth.se 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, EDAA50, EDAA55, EDA501 eller EDAA65. Datavetenskap (LTH) Föreläsning 1 HT 2018 2 / 46

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 lista använda arv superklass, subklass, abstrakt metod Datavetenskap (LTH) Föreläsning 1 HT 2018 3 / 46

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 HT 2018 4 / 46

Mål Förklaring av termer Algoritm en 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 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 HT 2018 5 / 46

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 Datavetenskap (LTH) Föreläsning 1 HT 2018 6 / 46

Exempel 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?... Datavetenskap (LTH) Föreläsning 1 HT 2018 7 / 46

Från problem till program Specifikation av problemet Design Val av lösningsmetoder (algoritmer, datastrukturer) för delproblem Implementering (programskrivning) Testning Underhåll (korrigeringar och uppdateringar) 2 Behandlas i EDAF60, OMD Behandlas i denna kurs Parallellt: dokumentation Datavetenskap (LTH) Föreläsning 1 HT 2018 8 / 46

Undervisning Datoraborationer 3 st i lp 1 och 3 st i lp 2, obligatoriska Kräver förberedelser. Ska lösas i grupper om två. Anmälan till önskad labbgrupp görs på kursens webbsida. Inlämningsuppgift lp 2, 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 läsvecka 7 i lp 2. Ö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 HT 2018 9 / 46

Examination Skriftlig tentamen Kursen inrapporteras i Ladok i två delar Obligatoriska moment (laborationer + inlämningsuppgift) 3 hp Tentamen 4.5 hp Datavetenskap (LTH) Föreläsning 1 HT 2018 10 / 46

Kursmaterial och kursbok Kurmaterial: Föreläsningsbilderna finns i veckoschemat på Moodle Laborationsuppgifter PM om programutvecklingsmiljön Eclipse PM om testverktyget junit Inlämningsuppgift Övningsuppgifter finns på Moodle Java snabbreferens (tillåtet hjälpmedel på tentan) Allt material finns på cs.lth.se/edaa01ht eller moodle.cs.lth.se Kursbok: E. Koffman och A. T. Wolfgang: Data Structures: Abstraction and Design Using Java, 3rd Edition, Wiley 2016. Rekommenderad, men ej obligatorisk. Läsanvisningar finns på moodle.cs.lth.se. Det går även att använda den andra upplagan. (Kursansvarig kan tillhandahålla läsanvisningar). Datavetenskap (LTH) Föreläsning 1 HT 2018 11 / 46

Relation till andra kurser För C och D ingår kursen i kurskedjor. Håll koll på förkunskapskraven! I övrigt gäller att nästan alla valfria kurser i datavetenskap kräver godkänt i EDAA01. Datavetenskap (LTH) Föreläsning 1 HT 2018 12 / 46

Kommunikation Webbsida: cs.lth.se/edaa01ht Information om kursen (kursplan, schema, extentor...) Anmälan till laborationsgrupper Moodle: moodle.cs.lth.se Veckoschema med läsanvisningar och föreläsningsbilder Övningsuppgifter Quizzar 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...) Datavetenskap (LTH) Föreläsning 1 HT 2018 13 / 46

CEQ-synpunkter Överlag nöjda studenter Några synpunkter från tidigare kursomgångar: Laborationerna har varit väldigt roliga och lärorika. Tentorna borde göras på en dator. - Vi är inte där logistiskt ännu. Att fundera på: dator som skrivmaskin eller med utvecklingsmiljö? Det blir olika typer av tentor. Jäktigt att hitta kompileringsfel under tentamen. Var tydligare med vilka metoder och klasser/interface som skapas själv och vilka som redan finns i Javas bibliotek. Bra synpunkt, jag ska tänka på det. Påminn mig och fråga vid oklarheter. Faktumet att det inte finns några övningar. Hade vart så najs om det fanns! Fanns tidigare, men ej så välbesökta. Övningsuppgifterna finns på kursens webbsida. De är viktiga! Vissa uppgifter passar att lösa på dator. Arbete ska påbörjas att göra interaktiva uppgifter på Moodle. Datavetenskap (LTH) Föreläsning 1 HT 2018 14 / 46

Om att lära sig programmera 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 (labbar, övningsuppgifter, föreläsningar...) finns av en anledning och kompletterar varandra. Datavetenskap (LTH) Föreläsning 1 HT 2018 15 / 46

Interface Kort repetition av arv, abstrakta klasser och abstrakta metoder Interface i Java Deklarera interface Skriva klasser som implementerar interface Datavetenskap (LTH) Föreläsning 1 HT 2018 16 / 46

Arv repetition Exempel I ett program ska geometriska figurer (kvadrater och cirklar) hanteras. Figurerna ska kunna flyttas och ritas upp på skärmen. 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 HT 2018 17 / 46

Arv Superklassen Shape 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); Datavetenskap (LTH) Föreläsning 1 HT 2018 18 / 46

Arv Subklassen Square 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 HT 2018 19 / 46

Arv Exempel 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); for (int i = 0; i < theshapes.length; i++) { theshapes[i].draw(w); Datavetenskap (LTH) Föreläsning 1 HT 2018 20 / 46

Diskutera Klassen Shape har den abstrakta metoden draw. Vad är en abstrakt metod? Varför finns den abstrakta metoden draw i klassen Shape? Datavetenskap (LTH) Föreläsning 1 HT 2018 21 / 46

Interface 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(); <<interface>> Measurable area() : double Square side Square(int, int, int) Circle radius Circle(int, int, int) Datavetenskap (LTH) Föreläsning 1 HT 2018 22 / 46

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 HT 2018 23 / 46

Interface 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; Datavetenskap (LTH) Föreläsning 1 HT 2018 24 / 46

Interface 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 HT 2018 25 / 46

Interface 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(); Datavetenskap (LTH) Föreläsning 1 HT 2018 26 / 46

Interface 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 HT 2018 27 / 46

Diskutera Hitta likheter/skillnader mellan abstrakta klasser och interface? Har du träffat på interface tidigare? Ge exempel i så fall. Datavetenskap (LTH) Föreläsning 1 HT 2018 28 / 46

Interface Kontrakt Interface betyder gränssnitt. Interfacet 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 HT 2018 29 / 46

Interface Ger valmöjlighet 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>(); List<E> är ett interface i java.util, medan ArrayList<E> och LinkedList<E> är konkreta klasser. Datavetenskap (LTH) Föreläsning 1 HT 2018 30 / 46

Interface Implementera flera interface 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 Datavetenskap (LTH) Föreläsning 1 HT 2018 31 / 46

Exempel: Komplexa tal Interfacet 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); Datavetenskap (LTH) Föreläsning 1 HT 2018 32 / 46

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 HT 2018 33 / 46

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); /** returns imaginary part */ public double getim() { return r * Math.sin(theta);... Datavetenskap (LTH) Föreläsning 1 HT 2018 34 / 46

Abstrakta datatyper Vad är en abstrakt datatyp? Översikt över de abstrakta datatyperna som ingår i kursen Datavetenskap (LTH) Föreläsning 1 HT 2018 35 / 46

Abstrakt datatyp (ADT) 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 Datavetenskap (LTH) Föreläsning 1 HT 2018 36 / 46

Viktiga abstrakta datatyper 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 HT 2018 37 / 46

Abstrakt datatypen lista 1:a elementet 2:a elementet 3:e elementet 4:e elementet 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... Datavetenskap (LTH) Föreläsning 1 HT 2018 38 / 46

Abstrakta modell lista Verkliga problem Schema Bokregister Inköpslista Abstrakt modell Lista Datavetenskap (LTH) Föreläsning 1 HT 2018 39 / 46

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. push pop Datavetenskap (LTH) Föreläsning 1 HT 2018 40 / 46

Köer I en FiFO-kö görs insättning sist i följden och borttagning avser första (äldsta) elementet. First In First Out poll offer I en prioritetskö avser borttagning alltid det mest prioriterade (minsta) elementet. Det viktigaste först. Datavetenskap (LTH) Föreläsning 1 HT 2018 41 / 46

Mängd 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 Datavetenskap (LTH) Föreläsning 1 HT 2018 42 / 46

Map I en map lagras nyckel-värde-par. 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 HT 2018 43 / 46

Diskutera 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. Datavetenskap (LTH) Föreläsning 1 HT 2018 44 / 46

Abstrakta datatyper i kursen 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 HT 2018 45 / 46

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 Ha kännedom om några viktiga abstrakta datatyper och vad som utmärker dem Lista Stack FIFO-kö Prioritetskö Mängd Map Datavetenskap (LTH) Föreläsning 1 HT 2018 46 / 46