• No results found

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

N/A
N/A
Protected

Academic year: 2022

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

Copied!
13
0
0

Loading.... (view fulltext now)

Full text

(1)

Föreläsning 1

Innehåll

Introduktion

Kursens mål och innehåll

Hur kursen går till, undervisningsmoment mm.

Arv, abstrakta klasser och metoder (repetition) Interface

Abstrakta datatyper - lista, stack, FIFO-kö, mängd, map, prioritetskö Java Collections Framework (interface och klasser för samlingar av element)

Datavetenskap (LTH) Föreläsning 1 VT 2018 1 / 51

EDAA01 Programmeringsteknik - fördjupningskurs

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

Detta ska du lära dig ...

Kursens mål

mer om programmering och objektorientering interface, exceptions, generik ...

formulera och använda olikaalgoritmer för att effektivt lösa problem sökning, sortering, rekursiva algoritmer ...

Känna till olikaabstrakta datatyper

viktigaste operationerna, användningsområden lista, stack, kö, mängd, map, prioritetskö använda olikadatastrukturer

vektorer, länkade listor, binära sökträd, hashtabeller, heapar

dels genom att använda färdigaklassbibliotekoch 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

(2)

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

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 VT 2018 6 / 51

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?

. . .

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)

XX XX XX XX X y

Behandlas i EDA060, OMD Behandlas i denna kurs

Parallellt: dokumentation

(3)

Kursmoment

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.

Ö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

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 VT 2018 10 / 51

Rekommenderad lärobok

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 heterObjects, Abstraction, Data Structures and Design Using Java Version 5.0och fungerar också.

Litteraturanvisningar ges för alla tre upplagorna.

Relation till andra kurser

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.

(4)

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 (övningsuppgifter, labbar, föreläsningar ...) finns av en anledning och kompletterar varandra.

Datavetenskap (LTH) Föreläsning 1 VT 2018 13 / 51

Kommunikation

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 14 / 51

CEQ-synpunkter

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

Nytt sedan förra kursomgången (HT17)

Två laborationer har ändrats något.

Ett av alternativen till inlämningsuppgift har bytts ut.

(5)

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 VT 2018 17 / 51

Arv – repetition

Exempel

I ett program ska geometriska figurer (kvadrater och cirklar) hanteras.

Figurerna ska kunna flyttas och ritas upp på skärmen.

Shape(int, int) moveTo(x, y)

draw(SimpleWindow) Shape {abstract}

x y

Circle(int, int, int) radius

Circle side

Square Square(int, int, int)

Datavetenskap (LTH) Föreläsning 1 VT 2018 18 / 51

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

}

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

} }

(6)

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 VT 2018 21 / 51

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 VT 2018 22 / 51

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 interfaceMeasurable 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

Circle(int, int, int) radius

Circle side

Square Square(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;

} }

(7)

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 VT 2018 25 / 51

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 VT 2018 26 / 51

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

}

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

} }

(8)

Diskutera

Har du träffat på interface tidigare (t ex i grundkursen)? Ge exempel.

Hitta likheter/skillnader mellan abstrakta klasser och interface?

Datavetenskap (LTH) Föreläsning 1 VT 2018 29 / 51

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 VT 2018 30 / 51

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:

List<Integer> list = new ArrayList<Integer>();

eller

List<Integer>list = new LinkedList<Integer>();

List<E> är ett interface i java.util, medan ArrayList<E> och LinkedList<E> är konkreta klasser.

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

}

(9)

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 VT 2018 33 / 51

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

}

/** returns imaginary part */

public double getIm() {

return r * Math.sin(theta);

}...

Abstrakta datatyper

Vad är en abstrakt datatyp?

Översikt över de abstrakta datatyperna som ingår i kursen

(10)

Abstrakt datatyp (ADT)

Definition

En abstrakt modell tillsammans med de operationer man kan utföra på den.

Exempel:

Abstrakt modell: komplexa tal Operationer på modellen: 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 VT 2018 37 / 51

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 VT 2018 38 / 51

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

...

Abstrakta modell

lista

Abstrakt modell Verkliga problem

Bokregister

Lista Schema

Inköpslista

(11)

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 VT 2018 41 / 51

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

offer poll

I en prioritetskö avser borttagning alltid det mest prioriterade (minsta) elementet.

Det viktigaste först.

Datavetenskap (LTH) Föreläsning 1 VT 2018 42 / 51

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

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

mars april maj ...

...

31 30 31 ...

...

nycklar (unika) värden (dubbletter ok)

(12)

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 VT 2018 45 / 51

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 VT 2018 46 / 51

Java Collections Framework

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

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

} ...

Java Collections Framework – interface hierarki

<<Interface>>

Map

<<Interface>>

SortedMap

<<Interface>>

Collection

<<Interface>>

Queue

<<Interface>>

List

<<Interface>>

Set

<<Interface>>

SortedSet

<<Interface>>

Deque

(13)

Java Collections Framework – interface hierarki

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

Datavetenskap (LTH) Föreläsning 1 VT 2018 49 / 51

Java Collections Framework – några klasser

Interface Klass

Queue ArrayDeque, LinkedList, PriorityQueue Deque ArrayDeque, LinkedList

List ArrayList, LinkedList

Set HashSet

SortedSet TreeSet

Map HashMap

SortedMap TreeMap

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

References

Related documents

Översikt Kurswebbsidan Mål Kursmoment Kurslitteratur Betyg Frivilliga moment Bonuspoäng Datorkonto Hjälp/redovisning.. Viktiga datum Lärarna Studentrepresentant

För att kunna använda ett objekt från en existerande klass måste man först skapa objektet (dvs skapa en instans av klassen som beskriver objektet).. Detta görs genom att man

• klassvariabler (statiska variabler statiska variabler), dvs de variabler som det endast finns en gemensam kopia av för alla objekt i klassen (kan vara publika eller privata).

Flytta om elementen så att element ≤ pivot hamnar till vänster och element ≥ pivot hamnar till höger. Kallas partitionering

Abstrakta datatyper och delar av Javas klassbibliotek Arv, abstrakta klasser och metoder (repetition) Interface.. Abstrakta datatyper - lista, stack, FIFO-kö, mängd,

Man får inte använda listans egna metoder för att lägga till eller ta bort element

En instans av en klass som implementerar interfacet Iterator används för att iterera över alla element i en samling. public interface

Dessutom ska studenten ha uppnått grundläggande förståelse för ekonomistyrning och ekonomisystem, samt dessas koppling till affärssystem och verksamhetsutveckling.. Vidare