Objektorienterad Programmering (TDDC77)

Relevanta dokument
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) Lösningen heter Collection. Collection gränsnittet. Collection. Iterable. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

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

Objektorienterad Programmering (TDDC77)

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

Objektorienterad Programmering (TDDC77)

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

TDDC77 Objektorienterad Programmering

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.

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ördjupad Java. Undantagshantering. Fel

Språkkonventioner och redigering av tal.

Recitation 4. 2-D arrays. Exceptions

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

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

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

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

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

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

Föreläsning 14. Filhantering

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

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

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

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

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

TENTAMEN OOP

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

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

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?

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.

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 PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

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

Objektorienterad programmering D2

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

Föreläsning 3. Stack

Objektorienterad programmering

Testning av program. Verklig modell för programutveckling

DAT043 Objektorienterad Programmering

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

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

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

TDDD78 Viktiga begrepp, del 2

Länkade strukturer, parametriserade typer och undantag

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

TENTAMEN OOP

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

Föreläsning 3. Stack

Tentamen FYTA11 Javaprogrammering

OOP Objekt-orienterad programmering

1 Comparator & Comparable

Tentamen. Lösningsförslag

OOP Objekt-orienterad programmering

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!

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

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

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

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:

Objektorienterad Programmering (TDDC77) Föreläsning XIV: Undantag, Design Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017

Outline Hashing Undantag Design

Outline Hashing Undantag Design

En frukt har ett namn 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 ;

Man kan lägga en frukt i en korg... import java. util.*; // Basket pä ron melon apelsin melon public class Basket { public static void main ( String [] args ) { 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 );

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

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

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

Outline Hashing Undantag Design

Undantag 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 \""; public static void main ( String [] args ) { String errormsg = " Translates numerical grade \ nsyntax : GradeParsing x\ nwhere x is a if (args. length!= 1){ System.out. println ( errormsg ); else { System.out. println ("The grade " + args [0] + " corresponds to " + getgradename (a

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

Undantag - Exceptions

Typer av undantag Vissa undantag måste man förvarna för, medan andra kan uppstå när och var som helst Throwable Error Exception NoClassDefFoundError RuntimeException IllegalAccessError IOException InterruptedException ArrayIndexoutOfBoundsException ParseException ClassCastException ArithmeticExpression

Typer av undantag 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 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

Typer av 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!

Kasta vidare undantag I En kedja av metoder kan ha throws i sin signatur I Lämnar över ansvaret att fånga högre upp i anroskedjan

public static void main ( String [] args ) { String errormsg = " Translates numerical grade \ nsyntax : GradeParsing x\ nwhere x is a if (args. length!= 1){ System.out. println ( errormsg ); else { try { System.out. println ("The grade " + args [0] + " corresponds to " + getgradename ( catch ( NumberFormatException e){ System.out. println ( errormsg ); catch ( GradeValueException e){ System.out. println (e. getmessage ()); 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 " 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 \"";

Egna undantag class GradeValueException extends Exception { public GradeValueException ( String message ){ super ( message );

Stack trace Exception in thread " main " java. lang. NumberFormatException : For in at sun. misc. FloatingDecimal. readjavaformatstring ( FloatingDeci 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 "); */

Outline Hashing Undantag Design

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

Dokumentera alltid I Dokumentera alltid alla publika metoder och variabler I Normal sett bör man även dokumentera privata metoder och variabler

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

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