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

Storlek: px
Starta visningen från sidan:

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

Transkript

1 EDAA01 Programmeringsteknik - fördjupningskurs Läsperiod lp 1+2 (Ges även lp 3) 7.5 hp anna.axelsson@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 eller EDA501 Föreläsning 1-2 Innehåll Introduktion Kursens mål och innehåll Undervisning Språkkonstruktioner i Java och delar av Javas klassbibliotek Interface Exceptions Generik, Autoboxing - och unboxing Lagra element Java Collections Framework (interface och klasser för samlingar av element) Traversera genom en samling element interfaceniterator och Iterable och foreach-sats Jämföra element metoden equals, interfacet Comparable EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107 Språkkonstruktioner i Java och delar av Javas klassbibliotek Detta kan du Förkunskaper Undervisningsmoment: föreläsning 1-2 övningsuppgifter 1-3 laboration 1 Avsnitt i läroboken: 1, 2.1, Appendix A6, A11, A12 I gamla upplagan: , , 4.1 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 EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107

2 Detta ska du lära dig Kursens mål Mål Förklaring av termer 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 använda olika datastrukturer 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 Algoritm Beskrivning hur man stegvis löser ett problem. Ex: matrecept, linjärsökning Datastruktur En samling variabler som hör ihop på något sätt. Ex: vektor, länkad lista, träd Biliotek En samling färdiga klasser som är tänkta att användas i andra program. Fungerar som en utvidgning av programspråket. Ex: Javas standardbibliotek för samlingar - Java Collections Framework EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107 Varför är detta viktigt att kunna? Exempel 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 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 är stor? EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107

3 Från problem till program Kursens struktur Specifikation av problemet Design Val av lösningsmetoder (algoritmer, datastrukturer) för delproblem Implementering (programskrivning) Testning Underhåll (korrigeringar och uppdateringar) Xy XXX X XX X Behandlas i EDA061/F10, OMD Behandlas i denna kurs f 1-2 f 3-4 f 5 f 6 f 7 f 8-10 f 11 f 12 ö1-3, ö 4-5 ö 6 ö 7 ö 8-11 ö 12 ö 13 lab1 lab 2 lab 3 lab 6 lab 4-6 Interface, exceptions, generik, JCF, iteratorer Listor, stackar köer, länkade strukturer Algoritmers effektivitet, tidskomplexitet Rekursion Grafiska användargränssnitt Sortering Set, map. Träd, binära sökträd, hashtabeller Prioritetsköer, heapar Parallellt: dokumentation EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107 Kursmoment Laborationer 6 st lp 1 läsvecka 3, 5, 7 och lp 2 läsvecka 2, 4, 6, obligatoriska Kräver förberedelser. Ska lösas i grupper om två. Anmälan till önskad labbgrupp görs på kursens hemsida senast ons 31/8. Inlämningsuppgift andra halvan av kursen obligatorisk Ska lösas i grupper om två. Finns på hemsidan. Det finns två alternativ att välja mellan. Redovisas i läsvecka 7 i lp 2. Övningsuppgifter Viktigt komplement till laborationerna. Löses på egen hand. Uppgifter och lösningsförslag finns på kursens hemsida. Ev. frågestunder, tid och sal på kursens hemsida. Föreläsningar 13 st, lp 1 läsvecka 1-7 och lp 2 läsvecka 1-3, 5-7 Föreläsningsbilderna innehåller det viktigaste av kursmaterialet och ger en sammanfattning av kursinnehållet. Bara en delmängd av dem visas under föreläsningarna. EDAA01 (Föreläsning 1-2) HT / 107 Examination Skriftlig tentamen Kursen inrapporteras i Ladok i två delar Obligatoriska moment (laborationer + inlämningsuppgift) 3 hp Tentamen 4.5 hp EDAA01 (Föreläsning 1-2) HT / 107

4 Lärobok Relation till andra kurser E. Koffman och A. T. Wolfgang: Data Structures: Abstraction and Design Using Java, Second Edition. Den gamla upplagan heter: Objects, Abstraction, Data Structures and Design Using Java Version 5.0. Det går bra att använda både den nya och den gamla upplagan Litteraturanvisningar i kursmaterialet ges för båda upplagorna. Ny upplaga har kommit. Överväg denna ifall du köper ny bok. För C och D ingår kursen i kurskedjor. Det är viktigt att känns till förkunskapskraven i kedjan. Finns på hemsidan. I övrigt gäller att nästan alla valfria kurser i datavetenskap kräver godkänt i EDAA01. EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107 CEQ-synpunkter Nytt sedan förra kursomgången: Överlag nöjda studenter Några synpunkter från senaste två kursomgångararna: Lärorika labbar 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. Laborationsförberedelserna tar tid Ja så är det. Labbarna kräver förberedelser. Tillfällen att fråga om övningsuppgifterna efterfrågades Det fanns, men de var ej så välbesökta. Stressigt i slutet av läsperiod 2 med labb och inlämningsuppgift Det beror på hur man planerar sitt arbete. Labbarna kan förberedas veckan innan. Inlämningsuppgiften kan påbörjas i slutet av lp 1. Uppvärmningsuppgift för de som inte programmerat på ett tag önskas fixat, finns på hemsidan. Senaste versionen av Java, Java 8, innehåller en del nyheter med anknytning till kursen. I kursboken och i det mesta av kursmaterialet används Java 7. Vissa föreläsningsbilder med Java 8 kommer dock att smygas in. Tentorna påverkas ej av detta. Extentorna är alltså fortfarande aktuella. Labb 6 (grafiska användargränsnitt) är omarbetad. Det finns en uppvärmningsuppgift (med ArrayList, arv mm) på kurshemsidan. Lös den ifall du känner dig ringrostig och/eller vill repetera. EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107

5 Om att lära sig programmera Arv repetition Exempel 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. 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) De olika undervisningsmomenten (övningsuppgifter, labbar, föreläsningar ) finns av en anledning och kompletterar varandra. Square side Square(int, int, int) Circle radius Circle(int, int, int) EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107 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); EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107

6 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); EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107 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(); Square side Square(int, int, int) <<interface>> Measurable area() : double Circle radius Circle(int, int, int) EDAA01 (Föreläsning 1-2) HT / 107 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; EDAA01 (Föreläsning 1-2) HT / 107

7 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); Interface Betyder gränssnitt. 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(); EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107 Interface Java 8 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()); 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 EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107

8 Interface Typ Interface som typnamn Interface kan användas som typer (precis som klasser) 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; Genom att använda interfacenamnet som typnamn kan man Exempel: eller skjuta upp valet av implementering lätt byta en implementerande klass mot en annan 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. EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107 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); 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; EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107

9 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); Interface Kontrakt Interfacet fungerar som kontrakt eller specifikation. Flera implementeringar (klasser) kan uppfylla kontraktet. Användare har tillgång till alla metoder i ett interface innan de är implementerade. Det är bara när man skapar instanser som man behöver tillgång till en implementerande klass. ComplexNumber c1 = new RectangularComplexNumber(1,2); ComplexNumber c2 = c1; c2 = c2.add(c1); EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107 Dokumentationskommentar En publik metod bör förses med en kommentar på formen /** */. Det är sedan enkelt att framställa javadoc-filer med information om klassen. Kommentaren ska innehålla: Minst en mening (avslutad med punkt) som beskriver vad metoden för att beskriva parametrar, returvärde /** * Deposits the specified amount. n The amount to deposit */ public void deposit(int n) { balance = balance + n; Pre- och postvillkor (eng. pre- och postconditions) Kontrakt på metodnivå I en metods dokumentationskommentar kan man ange pre- och postvillkor. Previllkor är villkor som måste vara uppfyllda för att en metod ska kunna utföra sin uppgift. Ibland finns inga preconditions. När de finns, är de ofta villkor som parametrarna ska uppfylla. Postvillkor beskriver hur exekvering av metoden förändrar tillståndet hos objektet. Behöver bara anges om metoden förändrar tillståndet (oftast void-metoder). För metoder som inte är void bör man i stället ge en kommentar om vad som returneras. EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107

10 Pre- och postvillkor Exempel Problem att lösa Fel värde på parameter public class BankAccount { private int balance; /** * Deposits the specified amount. * pre: The specified amount is >= 0 * post: The specified amount is added to balance n The amount to deposit */ public void deposit(int n) { balance = balance + n; /** * Deposits the specified amount. * pre: The specified amount is >= 0 * post: The specified amount is added to balance n The amount to deposit */ public void deposit(int n) { balance = balance + n; Vad ska hända om man försöker sätta in ett negativt belopp? EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107 Fel i program ( buggar ) Olika slags fel Exekveringsfel Syntaxfel bryter mot språkets grammatik (syntax). Exempel: glömt ett {, glömt deklarera en variabel innan den används Exekveringsfel (Runtime errors eller Exceptions) upptäcks vid exekvering. Exempel: ArrayIndexOutOfBoundException, NullPointerException, Logiska fel Programmet kan köras men ger fel resultat. Vad händer vid ett exekveringsfel? Ett objekt ( exception ) skapas som beskriver typen av fel. Programmet avbryts. Ett felmeddelande skrivs ut där typ av fel (exception-objektets typ) stacktrace (sekvensen av metodanrop) framgår. EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107

11 Exception Exception Olika typer av fel beskrivs av olika subklasser till klassen Exception. Exception Betyder undantag Exception genereras ( throws ) vid exekveringsfel. Man kan fånga ( catch ) exception och då själv avgöra hur felsituationen ska hanteras. RuntimeException IOException Man kan skriva kod som genererar exception inuti en metod. (Används om det uppstår en situation som gör det omöjligt för metoden att utföra sin uppgift.) ArrayIndexOutOfBoundException FileNotFoundException NullPointerException NoSuchElementException EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107 Exceptions Unchecked och checked Exceptions Unchecked och checked, forts Det finns två slag av Exceptions: Unchecked Exceptions Subklass till RuntimeException. Behöver inte fångas. Exempel: ArrayIndexOutOfBoundException, NullPointerException Checked Exceptions Måste fångas någonstans i anropskedjan, annars kompileringsfel. Exempel: FileNotFoundException Unchecked Exceptions används då felet beror på programmeraren Ex: NullPointerException eller ArrayIndexOutOfBoundsException Checked Exceptions används då felet inte beror på programmeraren Ex: FileNotFoundException om man försöker öppna en fil som inte finns EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107

12 Generera exception Generera exception Exempel Exempel: throw new IllegalArgumentException("amount to deposit < 0"); Mönster: throw new ExceptionClass(); throw new ExceptionClass(message); Effekt: Ett nytt exception-objekt skapas. Exekveringen av metoden avbryts. Javasystemet letar efter fångande catch-block. /** * Deposits the specified amount. * pre: The specified amount is >= 0 * post: The specified amount is added to balance n The amount to deposit IllegalArgumentException if the specified amount is < 0 */ public void deposit(int n) { if (n < 0) { throw new IllegalArgumentException("amount to deposit < 0"); balance = balance + n; EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107 Egna exceptionklasser Om man vill kan man implementera en egen exceptionklass (behövs sällan, det finns färdiga exceptionklasser i Javas bibliotek för de flesta situationer). Om den ska vara checked: public class SpellException extends Exception { Om den ska vara unchecked: public class SomeSortOfException extends RuntimeException { Fånga exception Mönster try { // kod som kan generera exception catch (ExceptionClass e) { // kod för att hantera exception try { // kod som kan generera exception catch (ExceptionClass1 e1) { // kod för att hantera exception av typen ExceptionClass1 catch (ExceptionClass2 e2) { // kod för att hantera exception av typen ExceptionClass2 finally { // kod som utförs efter try-blocket eller efter catch-blocket EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107

13 Fånga exceptions Exempel När man anropar en metod som genererar ett exception fångar man normalt det i en try-catch-sats: Scanner scan = null; try { // försöker öppna en fil med namnet filename scan = new Scanner(new File(fileName)); catch (FileNotFoundException e) { System.err.println("Couldn t open file " + filename); System.exit(1); använd scan Om exception inträffar, avbryts exekveringen av satserna i try-blocket och satserna i catch-blocket exekveras. Fånga exceptions Forts I satsen catch(exception e) kan t.ex. följande metoder användas för att få mer information: e.printstacktrace(); som skriver ut information om raden där felet inträffat och den/de metodanrop som lett till denna rad. e.getmessage(); som returnerar en sträng med meddelande om felets art. Exempel: Scanner scan = null; try { scan = new Scanner(new File(fileName)); catch (FileNotFoundException e) { e.printstacktrace(); System.exit(1); använd scan EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107 Ignorera checked exceptions Hantera unchecked exceptions Man kan ignorera en checked Exception och kasta det vidare till den anropande metoden. Isåfallmåstemanangedetimetodrubrikenidenmetoddär exception genereras: public Scanner createscanner(string filename) throws FileNotFoundException { // Här genereras exception om filen inte går att öppna Scanner scan = new Scanner(new File(fileName)); return scan; Metod som genererar unchecked exception behöver inte ange det i sin rubrik Kan anges i kommentar Den som anropar en metod som kan generera en unchecked exception behöver inte (men kan) fånga den i en try-catch-sats Leder till exekveringsfel om de inte fångas. I den metod som anropar createscanner måste man ta hand om detta exception och kan korrigera felet på valfritt sätt. EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107

14 Generik Generik Bakgrund Introduktion till Generik i Java Här introduceras generiska klasser och interface. Mer om generik finns att läsa på OH-bilderna Mer om generik som finns på kursens hemsida: generik och arv wildcards vektorer och generik generiska metoder Vissa av dessa moment dyker upp och förklaras senare, t.ex. i samband med laborationer. Klasser bör implementeras så att de blir generella d.v.s. går att använda i många olika sammanhang. En klass som hanterar en lista av element ska inte skrivas så att den bara kan hantera listor med heltal. Lösningen har i tidigare javaversioner varit att ge parametrar i metoderna den mest generella typen Object. Ex: add-metoden i en lista kunde ha signaturen public boolean add(object x); EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107 Generik Bakgrund forts Generik i Java Typosäkerhet utan generik! I den gamla modellen kunde man skriva: mylist.add(new Integer(1)); mylist.add(new Integer(2)); mylist.add(new Person( Bilbo )); Om avsikten är att listan ska innehålla tal, har vi gjort fel på rad 3. Kompilatorn kan inte upptäcka detta koden är korrekt, både Integer och Person är subklasser till Object. Ger oss möjlighet att abstrahera över typer Vi kan använda typparametrar när vi definierar en klass. Ex: public class ArrayList<E> { Vid användning av en generisk klass anges ett typargument. Ex: ArrayList<Integer> mylist = new ArrayList<Integer>(); EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107

15 Generik i Java Exempel på en generisk klass java.util.arraylist Kompilatorn kommer att upptäcka typfel. Ex: ArrayList<Integer> mylist = new ArrayList<Integer>(); mylist.add(new Person("Bilbo")); ger nu kompileringsfel, mylist får enligt sin deklaration endast innehålla objekt av typen Integer. Utdrag ur den generiska klassen java.util.arraylist: public class ArrayList<E> { public ArrayList() { public boolean add(e x) { public void add(int index, E x) { public E get(int index) { Alla add-metoder har inparameter av typen E. Därför kan enbart objekt av klassen E (eller subklasser till denna) sättas in i listan. EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107 Exempel på en generisk klass java.util.arraylist, forts Användning av en generisk klass java.util.arraylist Observera att inte alla metoder i ArrayList<E> har E som typparameter. T.ex. har contains och remove följande signaturer: public boolean contains(object x); public boolean remove(object x); Användare som inte känner till den exakta typen av ett element x ska kunna anropa metoderna. Dock kommer man att få resultat true om och endast om x finns i listan (och alltså även är av rätt typ). Exempel: ArrayList<String> list = new ArrayList<String>(); list.add("kili"); list.add("balin"); String s = list.get(0); System.out.println(s); EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107

16 Diskutera Primitiva datatyper - wrapperklasser Antag att vi lagrar heltal i en lista: ArrayList<Integer> list = new ArrayList<Integer>(); list.add(5); int j = list.get(0); Hur kan detta fungera? Listan innehåller Integer-objekt. På andra raden sätter vi in ett heltal (typen int). På tredje raden har vi deklarerat en variabel j av typen int. Men metoden get returnerar en referens till ett Integer-objekt. Primitiva typer i Java: boolean short int long char byte float double Motsvarande wrapperklasser: Boolean Short Integer Long Character Byte Float Double EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107 Primitiva datatyper - wrapperklasser Exempel int a = 42; Integer b = new Integer(42); a b 42 Variabeln a har värdet 42, medan variabeln b innehåller en referens till ett Integer-objekt. 42 Autoboxing unboxing Autoboxing automatisk konvertering från primitiv typ till objekt av motsvarande wrapperklass Unboxing automatisk konvertering av objekt av wrapperklass till motsvarande primitiva typ Exempel: Integer k = 3; // autoboxing int j = k; // unboxing Integer i = new Integer(2); i = i + 1; // Unboxing av i för att beräkna i+1. // Därefter autoboxing av resultatet vid // tilldelningen. I tidiga versioner av Java var man tvungen att skriva i = new Integer(i.intValue() + 1); EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107

17 Autoboxing unboxing isambandmedgeneriskaklasser Implementering av generisk klass Praktiskt när man vill använda en generisk klass för att lagra element av primitiv typ. Ex: ArrayList<Integer> list = new ArrayList<Integer>(); list.add(5); // Autoboxing till Integer-objekt här. int j = list.get(0); // Unboxing till int här. Java 1.4 public class Container { private Object item; public Container(Object x) { item = x; public Object get() { return item; Fr o m Java 5.0 generisk klass public class Container<E> { private E item; public Container(E x) { item = x; public E getitem() { return item; public void set(object x) { item = x; public void setitem(e x) { item = x; EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107 Generisk klass med flera typparametrar Implementering Generisk klass med flera typparametrar Användning public class Pair<K, V> { private K key; private V value; public Pair(K key, V value) { this.key = key; this.value = value; public V getvalue() { return value; Exempel: Pair<String, Integer> pair = new Pair<String, Integer>("June", 30); int nbrdays = pair.getvalue(); public void setvalue(v val) { value = val; EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107

18 Generiska interface Restriktioner för typparametrar och typvariabler Parameter till generisk klass kan inte vara primitiv typ: SomeClass<int> c = // Går inte! Även interface kan vara generiska. Ex: public interface Set<E> { boolean add(e x); int size(); boolean contains(object x); Typvariabler kan inte användas för att skapa objekt: public class SomeClass<E> { public void p() { E x = new E(); // Fel! Typparametrar kan inte användas för att överlagra metoder: public class MyClass<T,U> { public void p(t x) { public void p(u x) { // Fel! EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107 Introduktion till delar av Javas klassbibliotek JCF Java Collections Framework Java Collections Framework interface och klasser för samlingar av element interfacen Iterator och Iterable och foreach-sats i Java - används för att traversera genom en samling element interfacet Comparable Läsanvisningar Interfacet List och Klassen ArrayList behandlas i avsnitt 2.1. Fler interface och klasser behandlas senare i kursen/läroboken. Dokumentation På Javas hemsida (länk finns på kursens hemsida) finns dokumentation av Javas standardklasser. Där finns även tuturials, bl.a. om Javas Collection-klasser. Är en hierarki av interface, abstrakta klasser och konkreta klasser för samlingar av element. Finns i paketet java.util. 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(); EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107

19 JCF interface hierarki JCF interface hierarki Queue Collection List Set Map SortedMap Collection en samling av element, där dubbletter tillåts 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 List en samling element där dubbletter tillåts och där positionering är möjlig (första, sista, element på plats i, ) Set en samling element där dubbletter är förbjudna SortedSet som Set men med krav att elementen går att jämföra Deque SortedSet Map en samling av element, där varje element har en en nyckel och ett värde (jfr. lexikon) SortedMap som Map men med krav att nycklarna går att jämföra EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107 JCF några klasser Diskutera Interface Queue Deque List Set SortedSet Map SortedMap Klass ArrayDeque, LinkedList, PriorityQueue ArrayDeque, LinkedList ArrayList, LinkedList HashSet TreeSet HashMap TreeMap Antag att vi lagrar ett antal personer i en lista (eller i någon annan samlingsklass): ArrayList<Person> plist = new ArrayList<Person>(); // här sätts Person-objekt in i samlingen Hur ska vi göra för iterera genom listan och behandla alla personerna (t.ex. skriva ut alla personernas namn)? EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107

20 Iteratorer Iteratorer Interfacet Iteratorer<E> Ett iterator-objekt är en instans av en klass som implementerar interfacet Iterator<E>. För att iterera genom (traversera) listor eller andra samlingar kan man använda ett iteratorobjekt. Ett iteratorobjekt håller reda på en position i listan: public interface Iterator<E> { /** Returns true if the iteration has more elements. */ boolean hasnext(); /** Returns the next element in the iteration. */ E next(); /** Removes from the underlying collection the last element returned by the iterator (optional). */ void remove(); EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107 Iteratorer Exempel Till ArrayList<E> hör en speciell iteratorklass (vars namn vi inte vet). Denna iteratorklass implementerar interfacet Iterator<E>. I iteratorklassen finns attribut som håller reda på iteratorns position. I klassen ArrayList<E> finns en metod iterator() som returnerar en referens till ett nyskapat iteratorobjekt. ArrayList<Person> plist = new ArrayList<Person>(); Iterator<Person> itr = plist.iterator(); Användning av iterator Exempel ArrayList<Person> plist = new ArrayList<Person>(); // här sätts Person-objekt in i samlingen Iterator<Person> itr = plist.iterator(); while (itr.hasnext()) { Person p = itr.next(); // behandla p plist itr Lägg märke till hur man skaffar sig en iterator genom att anropa metoden iterator. 0 EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107

21 Interfacet Iterable<E> JCF interface hierarki med Iterable<E> och Iterator<E> I Java finns också följande interface: public interface Iterable<E> { /** Returns an iterator over a set of elements of type E */ Iterator<E> iterator(); Iterable iterator() Collection Iterator Map Interfacet Collection ärver interfacet Iterable: public interface Collection<E> extends Iterable<E> Queue List Set hasnext() next() remove() SortedMap Alla klasser som implementerar Collection måste alltså implementera metoden iterator(). Man kan alltså använda en iterator på objekt av alla dessa klasser. Deque SortedSet EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107 Metoden iterator() Exempel på collection-klass med metoden iterator Implementering av interfacet Iterator<E> Inre klass public class ArrayCollection<E> implements Collection<E> { private E[] thecollection; private int size; impl av konstruktor, add, public Iterator<E> iterator() { return new ArrayIterator(); Den klass som implementerar interfacet Iterator kan vara inre klass i den klass som representerar samlingen. En inre klass har tillgång till alla attribut i den omgivande klassen. Inuti klassen ArrayIterator från exemplet på förra bilden kan vi använda attributen thecollection och size. Den kan vara privat, och ha en en privat konstruktor, eftersom det bara är den omgivande klassen som skapar instanser. private class ArrayIterator implements Iterator<E> { // Här finns metoderna hasnext, next och remove Ienavövningsuppgifternakandutränapåattimplementeradeninre klassen ArrayIterator. EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107

22 foreach-sats i Java Exempel foreach-sats Vektorer ArrayList<Person> plist = new ArrayList<Person>(); // här sätts Person-objekt in samlingen for (Person p : plist) { // behandla p Ett sätt att enkelt iterera över samlingar. Man slipper att explicit använda en iterator. (Men hasnext() och next() anropas i bakgrunden). for (Person p : plist) kan läsas som för varje p i plist. Kan användas för objekt av klasser som implementerar Iterable och för vektorer. Kan också användas för att iterera över elementen i en vektor. Ex: En metod som skriver ut namn på personer som lagrats i en vektor av typ Person[]: public void print(person[] a) { for (Person p : a) { System.out.println(p.getName()); EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107 foreach-sats Begränsningar Foreach-sats kan inte användas när man explicit behöver tillgång till iteratorn i koden. Exempel: Tag bort alla personer som matchar x ur en ArrayList<Person> plist: Iterator<Person> itr = plist.iterator(); while (itr.hasnext()) { if (itr.next().equals(x)) { itr.remove(); Här kan iteratorn användas för att ta bort element. Man får inte använda listans egna metoder för att lägga till eller ta bort element under itereringen. foreach-sats Begränsningar Foreach-sats kan inte användas för att iterera parallellt över flera samlingar, motsvarande följande kod: ArrayList<Person> list1, list2; Iterator<Person> itr1 = list1.iterator(); Iterator<Person> itr2 = list2.iterator(); while(itr1.hasnext() && itr2.hasnext()) { System.out.println(itr1.next() + " " + itr2.next()); (Detta fall kan lösas på ett enklare sätt genom att använda listans metod removeif.) EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107

23 Nästlad foreach-sats Däremot går det bra med nästlade loopar. Ex: Skriv ut alla kombinationer av strängar str1 str2 där str1 finns i vektorn first och str2 finns i vektorn second. first och second är av typen String[] : for (String f : first ) { for (String s : second) { System.out.println(f + " " + s); EDAA01 (Föreläsning 1-2) HT / 107 Traversera elementen i en samling Java 8 Fr.o.m. Java 8 finns metoden foreach i interfacet Iterable. Exempel: ArrayList<Integer> list = new ArrayList<Integer>(); list.add(10); list.add(11); list.add(12); list.foreach(e-> System.out.println(e)); // skriver ut alla tal list.foreach(e-> { // skriver ut alla jämna tal if (e % 2 == 0) { System.out.println(e); ); Det som skicka med som argument till metoden foreach är ett lambdauttryck ett block av kod som ska exekveras senare, i det här fallet när metoden foreach anropas. (Lambdauttryck behandlas på föreläsning 7.) EDAA01 (Föreläsning 1-2) HT / 107 Filtrering med metoden removeif Java 8 Strömmar Java 8 I interfacet Collection finns metoden removeif som kan användas för att filtrera bort element ur en lista. Exempel 1: Filtrera bort alla personer som matchar x ur lista plist: plist.removeif(p -> p.equals(x)); Exempel 2: Filtrera bort alla udda tal ur listan list: list.removeif(n -> n % 2!= 0); Argumentet är ett lambdauttryck (behandlas på föreläsning 7). Man kan även använda strömmar för att behandla alla element i en samling eller en vektor. Exempel 1: Skriv ut alla personerna i listan plist: plist.stream().foreach(p -> System.out.println(p)); Exempel 1: Skriv ut alla personer i listan plist som matchar x: plist.stream().filter(p -> p.equals(x)).foreach(p -> System.out.prin Du kan läsa mer om strömmar här: EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107

24 Diskutera Söka efter objekt i en lista Jämföra likhet Metoden equals Följande klass beskriver en person: public class Person { private String name; private int id; public Person (String name, int id) { this.name = name; this.id = id; Vad skrivs ut när följande rader exekveras? Förklara varför? ArrayList<Person> list = new ArrayList<Person>(); list.add(new Person("Fili", 1)); list.add(new Person("Balin", 2)); System.out.println(list.contains(new Person("Balin", 2))); Inuti ArrayList används metoden equals för att jämföra om två objekt är lika: if (p1.equals(p2)) { Metoden equals finns i superklassen Object. Den returnerar true om och endast om de jämförda objekten är identiska. Om man istället vill att innehållet inuti objekten ska jämföras måste man skugga (omdefiniera) equals. Exempel: Om man vill att två personer ska anses lika när de har samma id-nummer måste man skugga equals i klassen Person. EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107 Skugga equals Specifikation public boolean equals(object obj); Ur equals specifikation: x.equals(x) ska returnera true (reflexivitet). Om x.equals(y) returnerar true så ska y.equals(x) returnera true (symmetri). Om x.equals(y) returnerar true och y.equals(z) returnerar true så ska x.equals(z) returnera true (transitivitet). Upprepade anrop av x.equals(y) ska ge samma resultat (konsistens). x.equals(null) ska returnera false. Skugga equals atttänkapå Parametern till equals måste vara av typ Object, annars blir det inte skuggning och den ursprungliga metoden i klassen Object kommer att användas. De attribut som används i jämförelsen inuti equals bör inte gå att ändra. Deklarera dem final: public class Person { private String name; private final int id; Annars kan det bli svårt att hitta objektet när det satts in i en lista eller annan samling. När man skuggar equals bör man också skugga metoden hashcode. Metoderna equals och hashcode används när objekt sätts in i en hashtabell. (Behandlas senare i kursen). EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107

25 Omdefiniera equals med instanceof public boolean equals(object obj) { if (obj instanceof Person) { return idnbr == ((Person) obj).idnbr; else { return false; Observera att parametern till equals måste vara av typ Object, annars blir det inte skuggning. Därför måste också typomvandling till Person ske när man ska använda obj:s idnbr. Uttrycket obj instanceof Person returnerar true om obj:s typ är Person eller någon subklass till Person. Uttrycket obj instanceof Person returnerar false om obj har värdet null. Skugga (skugga) equals medinstanceof Fördelar och nackdelar Denna lösningen tillåter att subklasser ärver equals-metoden. Man kan därför använda equals i en arvshieariki och jämföra subklassobjekt och superklassobjekt. Kan leda till att equals inte uppfyller kraven i specifikationen om man skuggar equals i subklassen. Därför är det lämpligt att deklarera metoden equals final: public final boolean equals(object obj) { Nu kan inte equals skuggas i någon subklass till Person. Detta undviks om man bara tillåter jämförelser mellan objekt av samma typ. Se nästa bild. EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107 Skugga equals medgetclass public boolean equals(object obj) { if (obj == this) { return true; if (obj == null) { return false; if (this.getclass()!= obj.getclass()) { return false; return id == ((Person) obj).id; Metoden getclass returnerar typen för det objekt obj refererar till under exekveringen. Bara metoder av exakt samma klass kan anses vara lika. EDAA01 (Föreläsning 1-2) HT / 107 Skugga equals medextrametodcanequal Ibland blir lösningen på förra bilden för sträng. Det kan man lösa genom att lägga till en extra metod i klassen: public boolean equals(object obj) { if (obj instanceof Person) { Person other = (Person) obj; return other.canequal(this) && this.id == other.id; else { return false; public boolean canequal(object other) { return (other instanceof Person); Bägge metoderna ska skuggas i subklasser. För detaljer läs mer här: EDAA01 (Föreläsning 1-2) HT / 107

26 Diskutera Sortera objekt Interfacet Comparable Specifikation I Java finns ett generiskt interface, Comparable<T>: Klassen Person beskriver en person. Vad händer när följande rader exekveras? Förklara varför? Person[] persons = new Person[4]; persons[0] = new Person("Kili", 1); persons[1] = new Person("Balin", 2); persons[2] = new Person("Dori", 4); persons[3] = new Person("Fili", 3); Arrays.sort(persons); for(person p : persons) { System.out.println(p); EDAA01 (Föreläsning 1-2) HT / 107 public interface Comparable<T> { /** * Compares this object with the specified object for order. * Returns a negative integer, zero, or a positive integer as * this object is less than, equal to, or greater than the * specified object. */ public int compareto(t x); Objekt av klasser som implementerar detta interface går att jämföra med varandra och kan t.ex. sorteras. Inuti metoden sort används Comparable som typ för de element som ska sorteras. EDAA01 (Föreläsning 1-2) HT / 107 Implementering av interfacet Comparable Exempel Jämföra likhet Metoderna compareto och equals public class Person implements Comparable<Person> { private String name; private int id; Interfacet Comparable innehåller bara metoden compareto. Men för klasser som implementerar interfacet Comparable finns det två sätt att jämföra avseende likhet: public int compareto(person x) { return Integer.compare(id, p.id); public boolean equals(object obj) { if (obj instanceof Person) { return compareto((person) obj) == 0; else { return false; Person p1 = ; Person p2 = ; if (p1.compareto(p2) == 0) { if (p1.equals(p2)) { Båda sätten att jämföra bör ge konsistenta resultat. Därför bör metoden equals skuggas i klasser som implementerar Comparable. EDAA01 (Föreläsning 1-2) HT / 107 EDAA01 (Föreläsning 1-2) HT / 107

27 Typparametrar med begränsningar Ibland behöver man ange begränsning på typparmetern: public class ASortedCollection<E extends Comparable<E>> <E extends T> betyder: E måste vara subklass till T om T är en klass. Det är också tillåtet att E = T. E måste implementera interfacet T om T är ett interface. IexempletovanangervialltsåattE måste vara en typ som implementerar interfacet Comparable<E>. Vi kan därmed använda metoden compareto på objekt av typen E iimplementeringenav ASortedCollection. EDAA01 (Föreläsning 1-2) HT / 107 Språkkonstruktioner i Java och delar av Javas klassbibliotek Exempel på vad du ska kunna Förklara begreppet interface och deklarera interface i Java Skriva klasser som implementerar interface Skriva programkod för att fånga exception Skriva metoder som genererar exception Förklara begreppen wrapperklass, autoboxing och unboxing Förklara begreppet generik, kunna använda respektive implementera generiska klasser Använda en iterator för att traversera en samling element Implementera iteratorer för enkla datastrukturer som listor och vektorer Implementera interfacet Comparable Formulera testfall och använda JUnit för att testa klasser Förklara begreppen: skuggning, överlagring, polymorfism EDAA01 (Föreläsning 1-2) HT / 107 Datorlaboration 1 generisk klass, testning med junit Implementera en egen generisk klass som beskriver en mängd. Inuti mängdklassen ska du använda ArrayList<E> för att hålla reda på mängdens element. Du har alltså två roller samtidigt: 1 implementatör av mängdklassen 2 användare av ArrayList<E> Några av metoderna blir korta (en rad räcker). Delegera så mycket som möjligt till ArrayList<E>. Innehåll: interface, generisk klass, arv, testning med JUnit (läs PM om junit). EDAA01 (Föreläsning 1-2) HT / 107

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

Seminarium 2 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist. Seminarium 2 Introduktion till Java Collections Framework Innehåll Generik Bakgrund Generik används för att få typsäkra datastrukturer Java Collections Framework Standardbibliotek med datastrukturer i

Läs mer

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

Seminarium 3 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist. Seminarium 3 Introduktion till Java Collections Framework Innehåll Generik Bakgrund Java Collections Framework interface och klasser för samlingar av element interfacen Iterator och Iterable och foreach-sats

Läs mer

EDAA01 Programmeringsteknik - fördjupningskurs

EDAA01 Programmeringsteknik - fördjupningskurs EDAA01 Programmeringsteknik - fördjupningskurs Läsperiod lp 1+2 (Ges även lp 3) 7.5 hp anna.axelsson@cs.lth.se sandra.nilsson@cs.lth.se http://cs.lth.se/edaa01ht Förkunskapskrav: Godkänd på obligatoriska

Läs mer

Mål Förklaring av termer

Mål Förklaring av termer Föreläsning 1 Innehåll Detta kan du Förkunskaper Introduktion Kursens mål och innehåll Undervisning Arv, abstrakta klasser och metoder (repetition) Abstrakta datatyper - lista, stack, FIFO-kö, mängd, map,

Läs mer

Mål Förklaring av termer

Mål Förklaring av termer Föreläsning 1 Innehåll Detta kan du Förkunskaper Introduktion Kursens mål och innehåll Undervisning Abstrakta datatyper och delar av Javas klassbibliotek Arv, abstrakta klasser och metoder (repetition)

Läs mer

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

Java Collections Framework. Föreläsning 2 Innehåll. Java Collections Framework interface hierarki. Java Collections Framework interface hierarki Föreläsning 2 Innehåll Java Collections Framework (interface och klasser för samlingar av element) Använda generiska klasser autoboxing - och unboxing Iterera genom en samling element Jämföra element skugga

Läs mer

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

Java Collections Framework. Föreläsning 2 Innehåll. Java Collections Framework interface hierarki. Java Collections Framework interface hierarki Föreläsning 2 Innehåll Java Collections Framework (interface och klasser för samlingar av element) Använda generiska klasser autoboxing - och unboxing Iterera genom en samling element Jämföra element skugga

Läs mer

Föreläsning 2 Innehåll

Föreläsning 2 Innehåll Föreläsning 2 Innehåll Java Collections Framework (interface och klasser för samlingar av element) Använda generiska klasser autoboxing - och unboxing Iterera genom en samling element Jämföra element skugga

Läs mer

Föreläsning 2 Innehåll. Generiska klasser. Generik i Java. Varför generiska klasser Bakgrund

Föreläsning 2 Innehåll. Generiska klasser. Generik i Java. Varför generiska klasser Bakgrund Föreläsning 2 Innehåll Generiska klasser Javas samlingsklasser är generiska. Använda generiska klasser autoboxing - och unboxing Iterera genom en samling element Jämföra element metoden equals En generisk

Läs mer

Föreläsning 2 Innehåll

Föreläsning 2 Innehåll Föreläsning 2 Innehåll Java Collections Framework (interface och klasser för samlingar av element) Använda generiska klasser autoboxing - och unboxing Iterera genom en samling element Jämföra element skugga

Läs mer

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

Föreläsning 1 Innehåll. EDAA01 Programmeringsteknik - fördjupningskurs. Detta ska du lära dig... Kursens mål. Detta kan du... 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)

Läs mer

EDAA30 Programmering i Java - fortsättningskurs

EDAA30 Programmering i Java - fortsättningskurs Föreläsning 1 Föreläsning 1 Innehåll EDAA30 Programmering i Java - fortsättningskurs cs.lth.se/edaa30 Kursansvarig: Marcus Klang marcus.klang@cs.lth.se Introduktion Kursens mål och innehåll Undervisning

Läs mer

Introduktionsmöte Innehåll

Introduktionsmöte Innehåll Introduktionsmöte Innehåll Introduktion till kursen Kursens mål och innehåll Undervisning Datavetenskap (LTH) Introduktionsmöte ST 2019 1 / 14 EDAA01 Programmeringsteknik - fördjupningskurs Ingen sommarkurs

Läs mer

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 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel Föreläsning 3 Innehåll Generiska klasser Implementera generiska klasser Exceptions Dokumentationekommentarer javadoc Enhetstestning - junit Man kan deklarera en eller flera typparametrar när man definierar

Läs mer

EDAA01 Programmeringsteknik - fördjupningskurs

EDAA01 Programmeringsteknik - fördjupningskurs EDAA01 Programmeringsteknik - fördjupningskurs Läsperiod lp 1+2 (Ges även lp 3) 7.5 hp anna.axelsson@cs.lth.se http://cs.lth.se/edaa01ht Förkunskapskrav: Godkänd på de obligatoriska momenten i EDAA45 Programmering,

Läs mer

Föreläsning 1 Innehåll

Föreläsning 1 Innehåll 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ö

Läs mer

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

Föreläsning 1-2 Innehåll. EDAA01 Programmeringsteknik - fördjupningskurs. Detta kan du... Förkunskaper EDAA01 Programmeringsteknik - fördjupningskurs Läsperiod lp 3 (Ges även lp 1+2) 7.5 hp anna.axelsson@cs.lth.se http://cs.lth.se/edaa01vt Förkunskapskrav: Godkänd på de obligatoriska momenten i EDAA45 Programmering,

Läs mer

Diskutera Sortera objekt

Diskutera Sortera objekt Föreläsning 3 Innehåll Diskutera Sortera objekt Metoden sort är en statisk metod i klassen Arrays. Den sorterar vektorn som skickas med som argument. Jämföra element interfacen Comparable och och Comparator

Läs mer

Föreläsning 1-2. Språkkonstruktioner i Java. Introduktion till delar av Javas klassbibliotek

Föreläsning 1-2. Språkkonstruktioner i Java. Introduktion till delar av Javas klassbibliotek Föreläsning 1-2 Innehåll Språkkonstruktioner i Java Interface Exceptions Introduktion till generik Autoboxing - och unboxing Introduktion till delar av Javas klassbibliotek Java Collections Framework interface

Läs mer

Föreläsning 3 Innehåll

Föreläsning 3 Innehåll Föreläsning 3 Innehåll Jämföra element interfacen Comparable och och Comparator Implementera generiska klasser Exceptions Dokumentationekommentarer javadoc Enhetstestning - junit Datavetenskap (LTH) Föreläsning

Läs mer

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

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass EDAA20 Föreläsning 11-12 Klassen ArrayList Klassen ArrayList Skriva program som läser data från en textfil och skriver data till en textfil Repetition inför delmålskontroll 2 är en standardklass (i paketet

Läs mer

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

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp Föreläsning 4 Innehåll Abstrakta datatypen lista Definition Abstrakta datatypen lista egen implementering Datastrukturen enkellänkad lista Nästlade klasser statiska nästlade klasser inre klasser Listklasser

Läs mer

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

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet. -Algoritmer och Datastrukturer- Abstrakt datatyp Datatyp för en variabel Betecknar i ett programmeringsspråk den mängd värden variabeln får anta. T ex kan en variabel av typ boolean anta värdena true och

Läs mer

Föreläsning 3-4 Innehåll

Föreläsning 3-4 Innehåll Föreläsning 3-4 Innehåll Listor, stackar, köer Abstrakta datatypen lista listklasser i Java, egen implementering Datastrukturen enkellänkad lista Jämföra element metoden equals, interfacet Comparable Abstrakta

Läs mer

Föreläsning 4 Innehåll

Föreläsning 4 Innehåll Föreläsning 4 Innehåll Abstrakta datatypen lista Datastrukturen enkellänkad lista Nästlade klasser statiskt nästlade klasser inre klasser Listklasser i Java Implementera abstrakta datatyperna stack och

Läs mer

Föreläsning 9 Innehåll

Föreläsning 9 Innehåll Föreläsning 9 Innehåll Binära sökträd algoritmer för sökning, insättning och borttagning, implementering effektivitet balanserade binära sökträd, AVL-träd Abstrakta datatyperna mängd (eng. Set) och lexikon

Läs mer

Föreläsning 13 Innehåll

Föreläsning 13 Innehåll Föreläsning 13 Innehåll Arv Repetition Om tentamen Datavetenskap (LTH) Föreläsning 13 HT 2017 1 / 32 Diskutera Här är början på klassen MemoryWindow som använts på en lab. Vad kan menas med extends SimpleWindow?

Läs mer

Programmering fortsättningskurs

Programmering fortsättningskurs Programmering fortsättningskurs Philip Larsson 2013 03 09 Innehåll 1 Träd 1 1.1 Binära träd........................................ 1 1.2 Strikt binärt träd..................................... 1 1.3 Binärt

Läs mer

Föreläsning 14 Innehåll

Föreläsning 14 Innehåll Föreläsning 14 Innehåll Abstrakta datatyper, datastrukturer Att jämföra objekt övriga moment i kursen Om tentamen Skriftlig tentamen både programmeringsuppgifter och teoriuppgifter Hitta fel i fingerade

Läs mer

Repetition av OOP- och Javabegrepp

Repetition av OOP- och Javabegrepp ArrayList Repetition av OOP- och Javabegrepp En lista i vilken man kan lagra objekt Implementerar List-interfacet Skiljer sig från ett vanligt endimensionellt fält: Dynamisk expanderar när den blir

Läs mer

Repetition av OOP- och Javabegrepp

Repetition av OOP- och Javabegrepp ArrayList Repetition av OOP- och Javabegrepp En lista i vilken man kan lagra objekt Implementerar List-interfacet Skiljer sig från ett vanligt endimensionellt fält: Dynamisk expanderar när den blir

Läs mer

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. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser Föreläsning 5-6 Innehåll Exempel på program med objekt Skapa och använda objekt Skriva egna klasser public class DrawSquare { public static void main(string[] args) { SimpleWindow w = new SimpleWindow(600,

Läs mer

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 3 Innehåll Lite om felhantering och Exceptions Mer om variabler och parametrar

Läs mer

Föreläsning 5-6 Innehåll

Föreläsning 5-6 Innehåll Föreläsning 5-6 Innehåll Skapa och använda objekt Skriva egna klasser Datavetenskap (LTH) Föreläsning 5-6 HT 2017 1 / 32 Exempel på program med objekt public class DrawSquare { public static void main(string[]

Läs mer

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

Begreppet subtyp/supertyp i Java. Mera om generik. Generik och arv. Generik och arv. Innehåll Mera om generik Begreppet subtyp/supertyp i Java Innehåll Wildcards Vektorer och generik Supertyper för en viss klass C är alla klasser från vilka C ärver och alla interface som klassen implementerar.

Läs mer

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

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Johan Falkenjack johan.falkenjack@liu.se Linköpings universitet Sweden December 4, 2013 1 Innehåll Arv och andra viktiga begrepp Abstrakta

Läs mer

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. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2 Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket 1 Länkade listor Likadant som i Ada-kursen. 2 Stack MyStack MyStack

Läs mer

Föreläsning REPETITION & EXTENTA

Föreläsning REPETITION & EXTENTA Föreläsning 18 19 REPETITION & EXTENTA Programmeringsteknik på 45 minuter Klasser och objekt Variabler: attribut, lokala variabler, parametrar Datastrukturer Algoritmer Dessa bilder är inte repetitionsbilder

Läs mer

Interfacen Set och Map, hashtabeller

Interfacen Set och Map, hashtabeller Föreläsning 0 Innehåll Hashtabeller implementering, effektivitet Interfacen Set och Map ijava Interfacet Comparator Undervisningsmoment: föreläsning 0, övningsuppgifter 0-, lab 5 och 6 Avsnitt i läroboken:

Läs mer

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 TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Mer om Interface Generiska klasser Undantag Nästlade klasser 1

Läs mer

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

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material) Objektorienterad Programmering DAT043 Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material) 1 Metoden clone() Skapa kopior av existerande objekt. Interface Cloneable Deep vs.

Läs mer

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

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet Föreläsning 13 Innehåll Algoritm 1: Sortera Exempel på problem där materialet i kursen används Histogramproblemet Schemaläggning Abstrakta datatyper Datastrukturer Att jämföra objekt Om tentamen Skriftlig

Läs mer

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2 Laboration 2 Datastrukturer En liten uppgift Frågor 1 Laboration 2 - Datastrukturer Länkade datastrukturer Stack Kö (En. Queue) Lista

Läs mer

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 TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning Generiska klasser Undantag Interface Nästlade klasser 1 Problem:

Läs mer

DAT043 Objektorienterad Programmering

DAT043 Objektorienterad Programmering DAT043 Objektorienterad Programmering Detta är en exempeltenta som innehåller gamla tentauppgifter av ungefär liknande slag som ni kan förvänta er se på ordinarie tenta i Del 1 respektive Del 2. Dock är

Läs mer

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander F12 - Collections ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Collections (samlingar) En collection är ett objekt som fungerar som en samling av andra objekt En collection erbjuder

Läs mer

DAT043 - föreläsning 8

DAT043 - föreläsning 8 DAT043 - föreläsning 8 Paket, generics, Java collections framework 2017-02-07 Paket och tillgänglighet Ovanför klasser finns en hierarkisk namespace med paket. Filer som inte deklareras i något paket finns

Läs mer

Föreläsning Innehåll. Hantera många element. Exempel: polygon Godtyckligt antal element. Exempel: polygon forts

Föreläsning Innehåll. Hantera många element. Exempel: polygon Godtyckligt antal element. Exempel: polygon forts Föreläsning 11-12 Innehåll Hantera många element Tidigare har vi använt vektorer för att lagra många element av samma tp. Eempel: Klassen ArraList Inläsning från tetfil, utskrift på tetfil int[] nbrs

Läs mer

Länkade strukturer. (del 2)

Länkade strukturer. (del 2) Länkade strukturer (del 2) Översikt Abstraktion Dataabstraktion Inkapsling Gränssnitt (Interface) Abstrakta datatyper (ADT) Programmering tillämpningar och datastrukturer 2 Abstraktion Procedurell abstraktion

Läs mer

Arrayer. results

Arrayer. results Arrayer 85 Arrayer Deklarerar utrymme för många variabler i en enda deklaration Array (fält) Varje värde har ett numeriskt index i Java indexeras en array med N element med indexen till N-1 Exempel: 1

Läs mer

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

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer Exempel for (int antal=; antal < 75; antal++) System.out.println (antal); Arrayer for (int num=5; num

Läs mer

Föreläsning 10 Innehåll

Föreläsning 10 Innehåll Föreläsning 10 Innehåll Hashtabeller implementering, effektivitet Metoden hashcode i Java Abstrakta datatyperna mängd (eng. Set) och lexikon (eng. Map) Interfacen Set och Map i Java Undervisningsmoment:

Läs mer

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. 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 Läsperiod 1 7.5 hp anna.axelsson@cs.lth.se http://cs.lth.se/edaa20 Mer information finns på kursens webbsida samt på det utdelade

Läs mer

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

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0.. Ett problem Kontrollstrukturer och er Hur sparas data T ex när man vill spara resultaten av en tävling Exempel med 3 deltagare: public class Competition private int result1; private int result2; private

Läs mer

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Interface Generiska klasser Undantag

Läs mer

Saker du ska kunna Föreläsning 13 & 14

Saker du ska kunna Föreläsning 13 & 14 Saker du ska kunna Föreläsning 13 & 14 LISTOR Ta bort element från en vektor Både sorterad och osorterad Söka upp element i en vektor Linjärsökning räcker (jag har även visat binärsökning) Registrering

Läs mer

Länkade strukturer, parametriserade typer och undantag

Länkade strukturer, parametriserade typer och undantag Länkade strukturer, parametriserade typer och undantag Programmering för språkteknologer 2 Sara Stymne 2013-09-18 Idag Parametriserade typer Listor och länkade strukturer Komplexitet i länkade strukturer

Läs mer

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

Föreläsning Innehåll. Checklista. Några metoder i klassen ArrayList<E> Exempel på vad du ska kunna Föreläsning 13-15 Innehåll Checklista Klassen ArrayList Arv Undervisningsmoment: föreläsning 13-15 övning 5 laboration 9-10 Avsnitt i läroboken: 12.1-3, 12.8, 9.1-9.6, 10 Avsnitt 12.6 och 12.10 ingår

Läs mer

Diskutera. Hashfunktion

Diskutera. Hashfunktion Föreläsning 1 Innehåll Diskutera Hashtabeller implementering, effektivitet Metoden hashcode i Java Abstrakta datatyperna mängd (eng. Set) och lexikon (eng. Map) Interfacen Set och Map i Java Tidigare har

Läs mer

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

Föreläsning 10 Innehåll. Diskutera. Hashtabeller. Hashfunktion. hashfunktion. hashkod (ett heltal) Föreläsning 0 Innehåll Diskutera Hashtabeller implementering, effektivitet Metoden hashcode i Java Abstrakta datatyperna mängd (eng. Set) och lexikon (eng. Map) Interfacen Set och Map ijava Undervisningsmoment:

Läs mer

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

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk

Läs mer

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 AID-nummer: Datum: 2014-12-18 Kurskod: 725G61 Provkod: LAB1 Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 Skrivningstid: 2014-12-18 klockan 8.00-10.00. Hjälpmedel: Inga. För varje fråga

Läs mer

Stackar, köer, iteratorer och paket

Stackar, köer, iteratorer och paket 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äs mer

1 Repetition av viktiga begrepp inom objektorienterad programmering

1 Repetition av viktiga begrepp inom objektorienterad programmering Repetition av viktiga begrepp inom objektorienterad programmering 3 1 Repetition av viktiga begrepp inom objektorienterad programmering Tema: Arv, parameteröverföring, statiska attribut och metoder. Litteratur:

Läs mer

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

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering. EDAA20 Programmering och databaser Mål komprimerat se kursplanen för detaljer Läsperiod 1 7.5 hp anna.aelsson@cs.lth.se http://cs.lth.se/edaa20 Mer information finns på kursens webbsida samt på det utdelade

Läs mer

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

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande: Föreläsning 7 Innehåll Rekursion Rekursivt tänkande: Hur många år fyller du? Ett år mer än förra året! Rekursion Rekursiv problemlösning Binärsökning Generiska metoder Rekursiv problemlösning: Dela upp

Läs mer

Föreläsning 11 Innehåll

Föreläsning 11 Innehåll Föreläsning 11 Innehåll Hashtabeller implementering, effektivitet Metoden hashcode i Java Abstrakta datatyperna mängd (eng. Set) och lexikon (eng. Map) Interfacen Set och Map i Java Datavetenskap (LTH)

Läs mer

Repetition av viktiga begrepp inom objektorienterad programmering

Repetition av viktiga begrepp inom objektorienterad programmering Repetition av viktiga begrepp inom objektorienterad programmering Tema: Arv, parameteröverföring, statiska attribut och metoder. Arv U 1. Betrakta följande klasser: public class Person { protected String

Läs mer

Föreläsning 3-4 Innehåll

Föreläsning 3-4 Innehåll Föreläsning 3-4 Innehåll Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer Datavetenskap (LTH) Föreläsning 3-4 HT 2017 1 / 36 Diskutera Vad gör programmet programmet? Föreslå

Läs mer

Inlämningsuppgift och handledning

Inlämningsuppgift och handledning Inlämningsuppgift och handledning Inlämningsuppgiften redovisas i vecka 49/50. Hög tid att komma igång! Jourtider varje vecka (se http://cs.lth.se/edaa01ht/inlaemningsuppgift) Frågestunder på fredagluncher

Läs mer

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

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2 Övning vecka 6. TDA550 - Objektorienterad programvaruutveckling IT, fk Denna vecka ska vi titta på undantag, testning, generiska enheter, samlingar och designmönstret Iterator. Uppgift 1 Exceptions a)

Läs mer

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenskap Tentamen, EDAA01 Programmeringsteknik fördjupningskurs 2014 03 10, 8.00 13.00 Anvisningar: Denna tentamen består av 5 uppgifter. Preliminärt

Läs mer

Lösningsförslag till tentamen i EDAA01 programmeringsteknik fördjupningkurs

Lösningsförslag till tentamen i EDAA01 programmeringsteknik fördjupningkurs LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenskap Lösningsförslag till tentamen i EDAA01 programmeringsteknik fördjupningkurs 2013 12 19 1. a) En samling element där insättning och borttagning

Läs mer

Samlingar Collection classes

Samlingar Collection classes Samlingar Collection classes Sven-Olof Nyström Uppsala Universitet 17 mars 2005 Skansholm: Kapitel 9, 19 Se även Suns tutorial om Collections Olika slag av samlingar i Java Arrayer (Till exempel: int[])

Läs mer

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

Föreläsning 2. Länkad lista och iterator Föreläsning 2 Länkad lista och iterator Föreläsning 2 Länkad-lista Lista implementerad med en enkellänkad lista Iterator Implementering av en Iterator Dubbellänkad lista och cirkulär lista LinkedList JCF

Läs mer

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

Inlämningsuppgift och handledning. Föreläsning 11 Innehåll. Diskutera. Hashtabeller Inlämningsuppgift och handledning Föreläsning 11 Innehåll Inlämningsuppgiften redovisas i vecka 49/50. Hög tid att komma igång! Jourtider varje vecka (se http://cs.lth.se/edaa01ht/inlaemningsuppgift) Frågestunder

Läs mer

Föreläsning 9-10 Innehåll

Föreläsning 9-10 Innehåll Föreläsning 9-10 Innehåll Inläsning från textfil, utskrift från textfil Vektorer med objekt Matriser Datavetenskap (LTH) Föreläsning 9-10 HT 2018 1 / 41 Klassen Scanner Läsa från System.in Vi har tidigare

Läs mer

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

Objektorienterad programmering (OOP) Föreläsning 15 & 16. Klasser för olika slags fordon. Klasser och objekt Föreläsning 15 & 16 ARV Objektorienterad programmering (OOP) Idé: vi ser ett program som en modell av verkligheten Ursprung: Simula-67, Norsk regnesentral, 1960-talet Smalltalk-80: Xerox PARC, 1970-talet

Läs mer

TDDD78 Viktiga begrepp, del 2

TDDD78 Viktiga begrepp, del 2 jonas.kvarnstrom@liu.se 2015 TDDD78 Viktiga begrepp, del 2 Identitet och likhet Är likhet och identitet samma sak? Oj, vi har samma kläder på oss idag! Nej, men likadana! Besserwisser 3 Detta är två rutor

Läs mer

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU lösningsförslag till tentamen 2017-06-09 Tid: 8:30-12:30. Plats: SB. Ansvarig lärare: Fredrik Lindblad,

Läs mer

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

Föreläsning 2. Länkad lista och iterator Föreläsning 2 Länkad lista och iterator Föreläsning 2 Länkad-lista Lista implementerad med en enkellänkad lista Iterator Implementering av en Iterator Dubbellänkad lista och cirkulär lista LinkedList JCF

Läs mer

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

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning. Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java

Läs mer

Föreläsning Innehåll. Generisk klass. Några metoder i klassen ArrayList<E>

Föreläsning Innehåll. Generisk klass. Några metoder i klassen ArrayList<E> Föreläsning 13-15 Innehåll Klassen ArrayList Klassen ArrayList Inläsning från textfil, utskrift på textfil Arv Undervisningsmoment: föreläsning 13-15 övning 5 laboration 9-10 Avsnitt i läroboken:

Läs mer

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

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer Arrayer Samling av data Datastrukturer int[] minatelnummer = new int[30]; // allokering av tillräckligt // stort minnesutrymme Element refereras genom indexering ringa = minatelnummer[25]; // indexering

Läs mer

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

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... } En klassdefinition class A extends B {... Arv definierar en klass A som ärver av B. Klassen A ärver alla fält och metoder som är definierade för B. A är en subklass till B. B är en superklass till A. class

Läs mer

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

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2 TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2 Pelle Evensen, Daniel Wetterbro 5 november 2009 Sammanfattning Denna vecka ska vi titta på abstrakta klasser kontra interface,

Läs mer

Sammansatta datatyper Generics: Parametrisk polymorfism

Sammansatta datatyper Generics: Parametrisk polymorfism jonas.kvarnstrom@liu.se 2017 Sammansatta datatyper Generics: Parametrisk polymorfism Listor och arrayer 2 Enligt TDDD73: Många språk har både listor och arrayer även Java och Python! Exakta definitioner

Läs mer

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

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes Idag statiska metoder och variabler private/public/protected final, abstrakta klasser, gränssnitt, delegering wrapper classes ett lite större exempel Objectorienterad programmering Sida 1 Vad vi vet om

Läs mer

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs LUNDS TEKNISKA HÖGSKOLA 1(3) Institutionen för datavetenskap Tentamen, EDAA01 Programmeringsteknik fördjupningskurs 2017 08 14, 8.00 13.00 Anvisningar: Denna tentamen består av 5 uppgifter. Preliminärt

Läs mer

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

Programmering för språkteknologer II, HT2011. Rum Programmering för språkteknologer II, HT2011 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv11/pst2/ Kursplan Mål Efter avslutad kurs skall studenten för att förtjäna betyget

Läs mer

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod Föreläsning 3-4 Innehåll Diskutera Vad gör programmet programmet? Föreslå vilka satser vi kan bryta ut till en egen metod. Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer

Läs mer

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs Tentamen 2006-05-06 Objekt-orienterad programmering i Java, 5p distanskurs Uppsala Universitet Instutitionen för informationsteknologi Avdelningen för datalogi Kursansvarig: Sven-Olof Nyström May 2, 2007

Läs mer

Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg

Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenskap Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg 2013 12 19 1. a) En samling element där insättning och borttagning

Läs mer

Classes och Interfaces, Objects och References, Initialization

Classes och Interfaces, Objects och References, Initialization Classes och Interfaces, Objects och References, Initialization Objekt-orienterad programmering och design (DIT953) Niklas Broberg/Johannes Åman Pohjola, 2018 Abstract class En abstract class är en class

Läs mer

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

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 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 Klassen Mio ffl Särfall ffl Interface Kungl. Tekn. Högskolan

Läs mer

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel Idag Ett exempel Undantag Substitutierbarhet, subtyper, subklasser När val av metod beror av typerna hos två objekt Lite om överlagring Exempel, version 2 Notera: för samtliga figurer gäller: arean av

Läs mer

Föreläsning 11 Innehåll. Diskutera. Binära sökträd Definition. Inordertraversering av binära sökträd

Föreläsning 11 Innehåll. Diskutera. Binära sökträd Definition. Inordertraversering av binära sökträd Föreläsning Innehåll Diskutera Binära sökträd algoritmer för sökning, insättning och borttagning implementering effektivitet balanserade binära sökträd, AVL-träd Jämföra objekt interfacet Comparable Interfacet

Läs mer

Föreläsning 10 Innehåll. Diskutera. Inordertraversering av binära sökträd. Binära sökträd Definition

Föreläsning 10 Innehåll. Diskutera. Inordertraversering av binära sökträd. Binära sökträd Definition Föreläsning Innehåll Diskutera Binära sökträd algoritmer för sökning, insättning och borttagning implementering effektivitet balanserade binära sökträd, AVL-träd Jämföra objekt interfacet Comparable Interfacet

Läs mer

Föreläsnings 9 - Exceptions, I/O

Föreläsnings 9 - Exceptions, I/O Föreläsnings 9 - Exceptions, I/O Josef Svenningsson Tisdag 6/11 Undantag - Exceptions Kommer ni ihåg det här programmet? Det var ett av de första ni såg i första föreläsningen. import javax.swing.*; public

Läs mer

F4. programmeringsteknik och Matlab

F4. programmeringsteknik och Matlab Programmeringsspråk Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer 1 Ett program är en eller flera instruktioner

Läs mer