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

Relevanta dokument
Objektorienterad Programmering (TDDC77)

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

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77)

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

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

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77)

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

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

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

TDDC77 Objektorienterad Programmering

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

OOP Objekt-orienterad programmering

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77)

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

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

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

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

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

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

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

Objektorienterad Programmering (TDDC77)

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

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

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

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

Recitation 4. 2-D arrays. Exceptions

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

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

Fördjupad Java. Undantagshantering. Fel

Språkkonventioner och redigering av tal.

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

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

Objektorienterad Programmering (TDDC77)

OOP Objekt-orienterad programmering

TDDC77 Objektorienterad Programmering

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

Föreläsning 14. Filhantering

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

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

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

Undantag. Engelska: exceptions. Skansholm: exceptionella händelser

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

TENTAMEN OOP

Tentamen för TTIT71 Programmering kl Institutionen för datavetenskap Linköpings universitet. Uppgift 1. (2 p)

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

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

Classes och Interfaces, Objects och References, Initialization

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

F4. programmeringsteknik och Matlab

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

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

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

Tentamen Programmering fortsättningskurs DIT950

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

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

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

Lösningsförslag till tentamen

OOP Tenta

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

Testning och felhantering

Detta dokument är ett exempel, cirka hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Repetition av OOP- och Javabegrepp

Objektorienterad programmering D2

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Repetition av OOP- och Javabegrepp

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Lösningar för tenta 2 DAT043,

Konstruktion av klasser med klasser

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

Objektorienterad programmering

Testning av program. Verklig modell för programutveckling

Föreläsning 3. Stack

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

DAT043 Objektorienterad Programmering

Concurrency Saker händer samtidigt. Process En instans av ett program

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

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

TDDD78 Viktiga begrepp, del 2

Länkade strukturer, parametriserade typer och undantag

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

TENTAMEN OOP

Föreläsning 3. Stack

OOP Objekt-orienterad programmering

Tentamen FYTA11 Javaprogrammering

1 Comparator & Comparable

Tentamen. Lösningsförslag

OOP Objekt-orienterad programmering

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

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

Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering!

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

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

Javas Exceptions. DD2385 Programutvecklingsteknik Fler bilder till föreläsning 7 23/ Kort om Javas Exceptions Trådar i Java

Transkript:

Outline Objektorienterad Programmering (TDDC77) Föreläsning XIV: Undantag, Design Ahmed Rezine IDA, Linköpings Universitet Undantag Design Hösttermin 2017 En frukt har ett namn Man kan lägga en frukt i en korg... class Fruit { private String name ; public Fruit ( String str ){ this. name = str ; import java. util.*; // Basket pä ron melon apelsin melon public class Basket { public String getname () { return name ; public void setname ( String str ) { this. name = str ; public static void main ( String [] args ) { Set < Fruit > set = new HashSet < Fruit >(); for ( String in: args ) set. add ( new Fruit (in )); public String tostring (){ return name ; System. out. println (" Mä ngden av olika input är: " + set );

En frukt med bättre hash funktion class Fruit { private String name ; public Fruit ( String str ){ this. name = str ; public String getname () { return name ; public void setname ( String str ) { this. name = str ; 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 ); I Alla klasser som implementerar Collection eller Map som innehåller Hash i namnet (HashSet, LinkedHashSet, HashMap, HashTable...etc) 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) Outline 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() Undantag Design

Undantag Undantag - Exceptions class SGradeParsing { private static int getgradevalue ( String input ){ int val = Integer. parseint ( input ); return val ; private static String getgradename ( String input ) { int grade = getgradevalue ( input ); switch ( grade ){ case 5: return "\" Mycket väl godk änd \""; case 4: return "\"Väl godj änd \""; default : return "\" Godk änd \""; I Fel som uppstår under körning kallas undantag (exceptions) I Metoder kan kasta undantag (throw) I Metoder kan fånga undantag (catch) public static void main ( String [] args ) { String errormsg = " Translates numerical grade \ nsyntax : GradeParsing x\ nwhere x is a natural number between 3 and 5"; if (args. length!= 1){ System.out. println ( errormsg ); else { System.out. println ("The grade " + args [0] + " corresponds to " + getgradename (args [0])); Undantag - Exceptions Undantag - Exceptions

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 Kasta vidare 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! I En kedja av metoder kan ha throws i sin signatur I Lämnar över ansvaret att fånga högre upp i anroskedjan

Undantag Egna undantag class GradeParsing { private static int getgradevalue ( String input ) throws GradeValueException { int val = Integer. parseint ( input ); if (!(3 <= val && val <= 5)){ throw new GradeValueException (" Grades should be between 3 and 5. You entered " + val + "!!"); return val ; private static String getgradename ( String input ) throws GradeValueException { int grade = getgradevalue ( input ); switch ( grade ){ case 5: return "\" Mycket väl godk änd \""; case 4: return "\"Väl godj änd \""; default : return "\" Godk änd \""; class GradeValueException extends Exception { public GradeValueException ( String message ){ super ( message ); public static void main ( String [] args ) { String errormsg = " Translates numerical grade \ nsyntax : GradeParsing x\ nwhere x is a natural number between 3 and 5"; if (args. length!= 1){ System.out. println ( errormsg ); else { try { System.out. println ("The grade " + args [0] + " corresponds to " + getgradename (args [0])); catch ( NumberFormatException e){ System.out. println ( errormsg ); catch ( GradeValueException e){ System.out. println (e. getmessage ()); Stack trace Exception in thread " main " java. lang. NumberFormatException : For input string : " 1 2" at sun. misc. FloatingDecimal. readjavaformatstring ( FloatingDecimal. java :1222) 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 { public static void main ( String [] args ) { 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 ");

Outline Design Undantag Design I Klasser: substantiv, t.ex. Item, DatabaseInitializer I Gränssnitt: brukar beskriver en egenskap, adjektiv, t.ex. Serializable, Cloneable I Metoder: verb, t.ex. calculatesum(), initialize() I Metoder som returnera ett booleskt värde: fråga, t.ex. isbiggerthan(), haselement() I Metoder som hämtar eller sätter en attribut, börja med get, respektive set. Isberg En uppgift I Man brukar liknar en väldesignad klass med ett isberg: 80% av massan ligger dold under vattenytan, I På samma sätt bör klasser bara ha några få synliga metoder En klass ska göra en sak, och göra den bra I Man ska alltså undvika att ha med funktionalitet som inte logiskt hör ihop med klassen

Undvika överraskningar Dokumentera alltid Principle of least surprise I Om någonting kan lösas på flera olika sätt, välj den lösning som skulle överraska användaren minst I Dokumentera alltid alla publika metoder och variabler I Normal sett bör man även dokumentera privata metoder och variabler Bottom up Top down I Börja bygga från grunden I Man bygger flera smådelar som successivt sammanfogas till ett större system I Risk för att helheten blir virrig och ogenomtänkt I Men ofta kan man få körbar, (delvis) fungerande kod snabbt I Börja från ett tänkt färdigt system I Bryt ned systemet i fler mer detaljerade delar I Risk för att man gör uppdelningar som inte blir bra när man skriver koden I men ofta enklare att genomföra systematiskt

Båda I Vilken man väljer är helt upp till en själv I Vissa gillar att blanda