Outline. Objektorienterad Programmering (TDDC77) Lösningen heter Collection. Collection gränsnittet. Collection. Iterable. Ahmed Rezine.

Relevanta dokument
Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77)

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

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

TDDC77 Objektorienterad Programmering

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

Objektorienterad Programmering (TDDC77)

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

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77)

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

Objektorienterad Programmering (TDDC77)

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

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

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

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

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

Samlingar Collection classes

Recitation 4. 2-D arrays. Exceptions

Objektorienterad Programmering (TDDC77)

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

OOP Objekt-orienterad programmering

Länkade strukturer, parametriserade typer och undantag

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

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

OOP Objekt-orienterad programmering

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

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

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

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

Föreläsning 3. Stack

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

Interfacen Set och Map, hashtabeller

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Länkade strukturer. (del 2)

Objektorienterad Programmering (TDDC77)

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

Repetition av OOP- och Javabegrepp

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

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

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

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

Repetition av OOP- och Javabegrepp

Föreläsning 3. Stack

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

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

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

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

Språkkonventioner och redigering av tal.

Föreläsning 10 Innehåll

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

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

TDDC77 Objektorienterad Programmering

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

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

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

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

Tentamen Programmering fortsättningskurs DIT950

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

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

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

E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition. Johan Leitet. Kurs: 1dv403 Webbteknik I

Föreläsning 2 Innehåll

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

Att skriva till och läsa från terminalfönstret

Föreläsning 11 Innehåll

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

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

Diskutera. Hashfunktion

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

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

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

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

Samlingar Collection classes

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

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

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

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

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Föreläsning 4 Innehåll

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

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

Inlämningsuppgift och handledning

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

DAT043 Objektorienterad Programmering

Objektorienterad Programmering DAT043. Föreläsning 4 23/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Föreläsning 2 Datastrukturer (DAT037)

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Parallellism, återblick

List.java. List.java. Printed by Tom Smedsaas

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

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

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Stackar, köer, iteratorer och paket

Arrayer. results

Transkript:

Outline Objektorienterad Programmering (TDDC77) Föreläsning XIII: Kollektioner (kont.) [hashing, iteratorer], Undantag Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Collection Iterable Undantag Collection gränsnittet Lösningen heter Collection I Samling av klasser för effektiv och avancerad lagring av data I Finns i paketet java.util I Är uppdelade i Interface och implementationer I Sök efter Collection i API:et! I http://docs.oracle.com/javase/7/docs/api/ I Finns även bra tutorials, ex http://docs.oracle.com/javase/tutorial/collections Set: en mängd där inget element är duplicerat. List: en sekvens. Elementerna kan vara duplicerat Queue: typisk FIFO (fast kan involvera prioritet)med metoder för att lägga till och ta bort element. Deque: Som en Queue, fast både LIFO och FIFO. Map: associera (max) ett värde (value) per nyckel (key).

Set (Mängd) Set (Mängd) /* The program FindDuplicates prints messages for each duplicated * argument it is passed. * example : java FindDuplicates i came i saw i left */ class FindDuplicates { Set <String > set = new HashSet <String >(); for (int i =0; i< args. length ; i ++) if (! set.add (args [i ])) System.out. println (" Duplicate detected : " + args [i ]); System.out. println (set.size () + " distinct words : " + set ); /* The program FindDuplicates prints messages for each duplicated * argument it is passed. * example : java FindDuplicates i came i saw i left */ class FindDuplicatesIterator { Set <String > set = new HashSet <String >(); for (int i =0; i< args. length ; i ++) if (! set.add (args [i ])) System.out. println (" Duplicate detected : " + args [i ]); // System.out. println (set.size () + " distinct words : " + set ); Iterator <String > it = set. iterator (); while (it. hasnext ()){ String e = it. next (); System.out. print (" " + e); System.out. println (); for ( String e: set ) System.out. print (" " + e); System.out. println (); List (sekvens) List (sekvens) I kan använda index som i arrayer (get, set, remove,...) I kan söka efter ett element (indexof, lastindexof,...) I kan gå igenom elementerna i sekvens med list iteratorer I implementationer exempelvis ArrayList och LinkedList /* The program Directions takes a sequence of Directions * in { right, left and perform some simple operations * on them * example : java Directions left left left right left right */ class Directions { List <String > list = new LinkedList <String >(); /* The program Directions takes a sequence of Directions * in { right, left and perform some simple operations on them * example : java Directions left left left right left right */ class DirectionsIterators { List <Integer > list = new LinkedList <Integer >(); Integer i = new Integer (5); list. add (i); System.out. println (list ); for (int i =0; i< args. length ; i ++) list. add ( args [i ]); // System.out. println (set.size () + " distinct words : " + set ); for ( int i =0; i< list. size (); i ++){ System.out. println ("att step " + i + " turn " + list.get (i )); System.out. println (); System.out. println ("You should turn right at step " + list. indexof (" right " )); list. remove (list. lastindexof ("left " )); System.out. println (" truncated list : " + list );

Boxed primitives Map // Counts the frequency of each argument // java Freq if it is to be it is up to me to delegate public class Freq { Map <String, Integer > m = new HashMap <String, Integer >(); I Collections och generics fungerar bara för objekt (inte primitiva typer som int, double osv.) I Java innehåller därför klasser som motsvarar dessa: Byte, Double, Float, Integer, Long, och Short I De är i princip bara klasser som kapslar in sina primitiva motsvarigheter // Initialize frequency table from command line for (int i =0; i< args. length ; i ++) { Integer freq = m. get ( args [i ]); if( freq == null ) m. put ( args [i], 1); else m. put ( args [i], freq +1); //m. put ( args [i ],10); // System.out. println (m); Set <String > keys = m. keyset (); Iterator <String > it = keys. iterator (); while (it. hasnext ()){ String key = it. next (); Integer freq = m. get ( key ); System.out. println (key + " ----> " + freq ); System.out. println (m.size () + " distinct words :"); // System.out. println (m); Map Att gå genom en Array med for // Illustrate keyset, values and entryset for a Map // java Freq if it is to be it is up to me to delegate class MoreFreq { Map <String, Integer > m = new HashMap <String, Integer >(); for ( String a : args ) { Integer freq = m. get (a); m. put (a, ( freq == null )? 1 : freq + 1); System.out. println ("Keys : "); for ( String key : m. keyset ()) System.out. print (" " + key ); System.out. println ("\ nvalues : "); for ( Integer val : m. values ()) System.out. print (" " + val ); System.out. println ("\ nentryset : "); for (Map.Entry <String, Integer > entry : m. entryset ()) System.out. print (" (" + entry. getkey () + " ->" + entry. getvalue () + ")"); System.out. println (); // Programet tar ett antal argument och summera de class SumFor { int sum =0; for ( yint i =0; i< args. length ; i ++){ sum = sum + Integer. parseint ( args [i ]); System. out. println (" Summan är: " + sum );

Att gå genom en Array med for-each Outline // Programet tar ett antal argument och summera de class Sum { Collection int sum =0; // syntactic sugar for ( String arg : args ){ sum = sum + Integer. parseint ( arg ); System. out. println (" Summan är :" + sum ); Iterable Undantag Iterable Iterator I Iterable är ett interface som uppfylls av alla klasser som man kan gå igenom element för element I Iterable innehåller bara en metod: iterator() som returnerar ett speciellt Iterator-objekt som man kan använda för att gå igenom mängden I Iterator är ett interface med metoderna I hasnext() I next() I remove() //valfritt I Man får inte ändra på den underliggande samlingen medan iteratorn används, då blir det fel

Iterator Att gå genom en Kollektion med en iterator I Använda en iterator Person person ; for ( Iterator < Person > iterator = pl. iterator (); iterator. hasnext (); person = iterator. next ()){ // Gör nå got // Rä kna upp antalet olika jä mna nummer // med Iterator class CountEvensIteration { Set < Integer > s = new HashSet < Integer >(); for ( String a: args ) s. add ( Integer. parseint (a )); int resultatet =0; for ( Iterator < Integer > it = s. iterator (); it. hasnext (); ){ if(it. next () % 2 == 0){ resultatet ++; System. out. println (" Antalet olika jä mna nummer är: " + resultatet ); Iterator: Enklare med for-each Använd iterator om du vill ta bort några element // Rä kna upp antalet olika jä mna nummer // med Iterator class CountEvensIterationForEach { Set < Integer > s = new HashSet < Integer >(); for ( String a: args ) s. add ( Integer. parseint (a )); // Filtrera bort de jä mna nummer // från mä ngden av olika input vä rden class FilterEvens { Set < Integer > s = new HashSet < Integer >(); for ( String a: args ) s. add ( Integer. parseint (a )); int resultatet =0; for ( Integer i : s){ if( i % 2 == 0){ resultatet ++; System. out. println (" Antalet olika jä mna nummer är: " + resultatet ); for ( Iterator < Integer > it = s. iterator (); it. hasnext (); ){ if(it. next ()%2 == 0){ it. remove (); System. out. println (" Filtrerat mä ngd :" + s); // java FilterEvens 0 1 1 2 3 5 8

Klassen Collections Klassen Collections I Klassen Collections har statiska metoder för att manipulera listor, mängder m.m. I frequency() I min(), max() I reverse() I sort(), shuffle() // Illustrate usage of Collection static methods // UsingCollections 0 1 1 2 3 5 8 public class UsingCollections { List < Integer > s = new ArrayList < Integer >(); for ( String a: args ) s. add ( Integer. parseint (a )); System. out. println (" listan : " + s); Collections. reverse ( s); System. out. println (" reversed : " + s); Collections. shuffle ( s); System. out. println (" shuffled : " + s); Outline Collection Iterable Undantag I Alla klasserna ovan som innehåller Hash i namnet använder något som heter hashing för att öka hastigheten på vissa operationer, exempelvis när man ska göra snabba sökningar i en lista I Det ingår inte i kursen att förstå exakt hur det fungerar, men ni måste förstå tillräckligt för att kunna använda det I Idéen är att man beräknar för varje objekt ett så kallad hash (heltal)

I Heltalet används sedan för att dela upp mängden i flera mindre mängder, vill man veta vilken del man ska leta i behöver man bara hasha värdet man letar efter I Hashfunktionen måste man alltid returnera samma värde för samma objekt, och för alla andra objekt där equals() returnerar sant I För er ordlistlaboration så räcker det bra att returnera värdet för textsrängens haschcode() // Basket pä ron melon apelsin melon public class Basket { Set < Fruit > set = new HashSet < Fruit >(); for ( String in: args ) set. add ( new Fruit (in )); System. out. println (" Mä ngden av olika input är: " + set ); Outline class Fruit { private String name ; public Fruit ( String name ){ this. setname ( name ); public String getname () { return name ; public void setname ( String name ) { this. name = name ; public String tostring (){ return name ; public int hashcode (){ return name. hashcode (); public boolean equals ( Object other ){ if( other == null!( other instanceof Fruit )) return false ; return name. equals ((( Fruit ) other ). name ); Collection Iterable Undantag

Undantag - Exceptions Undantag - Exceptions I Fel som uppstår under körning kallas undantag (exceptions) I Metoder kan kasta undantag (throw) I Metoder kan fånga undantag (catch) Undantag - Exceptions Kasta undantag class DateParsing { private static int getmonth ( String input ) throws DateFormatException { if( input. length ()!=10) throw new DateFormatException (" Incorrect date format, should be dd/mm/yyyy "); return Integer. parseint ( input. substring (3,5)); private static String printmonth ( String date ) throws DateFormatException { int month = getmonth ( date ); switch ( month ){ case 1: return " January "; case 2: return " February "; case 3: return " March "; default : return " December "; public static void main ( String [] args ){ try { System.out. println ("The month in: " + args [0] + " is " + printmonth (args [0])); catch ( DateFormatException e){ System.out. println (e. getmessage ());

Typer av undantag Typer av undantag Vissa undantag måste man förvarna för, medan andra kan uppstå när och var som helst Throwable Error NoClassDefFoundError IllegalAccessError Exception IOException RuntimeException I Throwable - Allt som kan kastas och fångas I Errors - Jättealvarliga fel i själva java. Normalt sett bör dessa inte hanteras av programmeraren. I Exceptions (utom RuntimeException) - Förutsedda undantag, dessa är del av normal funktion och måste hanteras InterruptedException ParseException ArrayIndexoutOfBoundsException ClassCastException I RuntimeExceptions - Undantag som kan inträffa under normal körning, men normal sett beror på att programmeraren gjort fel. Behöver inte fångas ArithmeticExpression Typer av undantag Egna undantag I Checked exception: I e.g. Exception, ParseException, IOException,... I Måste hanteras (dvs. antigen med try-catch eller genom att skriva throws i metodens deklaration) I När undantaget förväntas uppstå I När det går att rädda systemet I Unchecked exception: I e.g. RuntimeException, ArrayIndexOutOfBoundsException,... I Måste inte hanteras ((dvs. behöver inte ha en try-catch eller skriva throws i metodens deklaration)) I När undantaget inte förväntas uppstå I Men ifall det ske, Something went horribly wrong! class DateFormatException extends Exception { public DateFormatException ( String message ){ super ( message );

Kasta vidare undantag Stack trace I En kedja av metoder kan ha throws i sin signatur I Lämnar över ansvaret att fånga högre upp i anroskedjan Exception in thread " main " java. lang. NumberFormatException : For input st at sun. misc. FloatingDecimal. readjavaformatstring ( FloatingDecimal. ja at java. lang. Double. parsedouble ( Double. java :510) at lincalc. LinCalcJohn. calc ( LinCalcJohn. java :139) at lincalc. LinCalc. calc ( LinCalc. java :35) at lincalc. LinCalc. evaluate ( LinCalc. java :45) at lincalc. LinCalc. main ( LinCalc. java :28) class Undantag { System.out. println ("Prog bö rjar "); foo1 (); System.out. println ("Prog slutar "); public static void foo1 (){ System.out. println ("foo1 bö rjar "); try { foo2 (); catch ( ArithmeticException e){ System.out. println ("foo1 catch1 "); catch ( NumberFormatException e){ System.out. println ("foo1 catch2 "); finally { System.out. println ("foo1 finally "); System.out. println ("foo1 slutar "); public static void foo2 (){ System.out. println ("foo2 bö rjar "); try { System.out. println ( Integer. parseint ("a" )); catch ( ArithmeticException e){ System.out. println ("foo2 catch1 "); // catch ( NumberFormatException e){ // System.out. println (" foo2 catch2 "); // finally { System.out. println ("foo2 finally "); System.out. println ("foo2 slutar ");