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

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

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

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

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Java, klasser, objekt (Skansholm: Kapitel 2)

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

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

Objektorienterad programmering

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

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

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

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

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

Testning av program. Verklig modell för programutveckling

OOP Objekt-orienterad programmering

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

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

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)

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

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

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

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

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

Klasshierarkier - repetition

Del A (obligatorisk för alla)

Klassen javax.swing.timer

Laboration 1 - Grunderna för OOP i Java

TENTAMEN OOP

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

Lösningar för tenta 2 DAT043,

Konstruktion av klasser med klasser

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

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

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

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

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

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

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

PROGRAMMERINGSTEKNIK TIN212

DAT043 Objektorienterad Programmering

Föreläsning 14. Filhantering

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Felhantering. Andra brott mot språkets regler. Man kan också i programmet bryta mot ett antal olika regler som gäller. Exempelvis:

trafiksimulering Intro OU5 trafiksimulering

Tentamen LÖSNINGSFÖRSLAG. c) Tilldelningen C x = new D() ger kompileringsfel eftersom klassen D är abstrakt.

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Exempel på användning av arv: Geometriska figurer

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

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

Föreläsning 5-6 Innehåll

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Klasshierarkier. Klasser kan byggas på redan definierade klasser

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

Tentamen. Lösningsförslag

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

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

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

Objektorienterad programmering D2

Lösningsförslag till tentamen FYTA11 Javaprogrammering

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

Objektorienterad Programmering (TDDC77)

Testning och felhantering

JAVAUTVECKLING LEKTION 4

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

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 för TDA540 Objektorienterad Programmering

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

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

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

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Generisk klass med typparameter Inre klass - ListIterator

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

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

Tentamen OOP

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Instuderingsuppgifter läsvecka 2

Del A (obligatorisk för alla)

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

TENTAMEN OOP

Enkla variabler kontra referensvariabel

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

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.

Objektorienterad programmering i Java

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

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 13 Innehåll

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

Transkript:

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 en instans ändras aldrig Idé: En instansvariabel area. Låt konstruktorn beräkna arean. (Vi ändrar endast Circle och Rectangle) Objectorienterad programmering Sida 1 Objectorienterad programmering Sida 3 Exempel, version 3 Ett lite större exempel Ett gränssnitt Shape med metod area(). Circle, Rectangle, Square, Triangle implementerar Shape. Både Circle och Rectangle har en instansvariabel area och en metod area() med exakt samma definition. Idé: Skapa en klass ShapeClass. Låt Circle och Rectangle ärva av denna. Placera det som är gemensamt, instansvariabeln och metoden area(), här. Objectorienterad programmering Sida 2 Objectorienterad programmering Sida 4

Exempel, version 4 Vi kan plocka bort några av instansvariablerna för Circle och Rectangle: diameter, side1, side2 Idé: Skapa en klass ShapeClass. Låt Circle och Rectangle ärva av denna. Placera det som är gemensamt, instansvariabeln och metoden area(), här. Olika typer av fel Kompileringsfel: programkoden följer inte Javas regler Exekveringsfel: fel som uppstår när programmet körs och medför att programmet inte kan fortsätta exekvera. Exempel: en fil som ska öppnas saknas, använding av referensvariabel som inte refererar något objekt. Logiska fel: programmet gör inte det vi väntade oss Exekveringsfel handlar ofta om problem som ligger utanför programmet, tex felaktigt indata Objectorienterad programmering Sida 5 Objectorienterad programmering Sida 7 Mer ideer Gör samma sak med Triangle och Square Låt ShapeClass få en konstruktor med ett argument Då kan instansvariabeln area bli privat Engelska: exceptions Undantag Skansholm: exceptionella händelser Fel som genereras om man försöker öppna en fil som inte finns, dividera med noll, indexera utanför en array osv. Objectorienterad programmering Sida 6 Objectorienterad programmering Sida 8

Exempel: Exempel Skriv ett program som 1. ber om ett filnamn 2. öppnar filen 3. läser innehållet 4. gör nåt med innehållet 5. stänger filen Alla operationer kan gå snett! class A { class B extends A { class Exce2 { static void main (String [] arg) { A x = new A(); B y = (B)x; Objectorienterad programmering Sida 9 Objectorienterad programmering Sida 11 Motivation (forts) En lösning: skriv uttryckliga tester för alla felsituationer h = open_file(...) if (h.error) { // hantera felet else { // fortsätt att läsa filen Om man ska hantera alla felsituationen blir kontrollflödet komplicerat! Dessutom: det är svårt att testa koden. Exempel, testkörning $ java Exce2 Exception in thread "main" java.lang.classcastexception: A at Exce2.main(Exce2.java:8) Objectorienterad programmering Sida 10 Objectorienterad programmering Sida 12

public class ExceNull { private void method() { public static void main(string[] arg) { ExceNull n = null; n.method(); harpo$ javac ExceNull.java harpo$ java ExceNull Exception in thread "main" java.lang.nullpointerexception at ExceNull.main(ExceNull.java:7) Undantag Frågor om undantag. Vilka typer av undantag finns det? Hur genereras dem? Hur kan man hantera dem? Objectorienterad programmering Sida 13 Objectorienterad programmering Sida 15 class A { public int m(int x) { return 100/x; public class Exce { public static void main (String[] arg) { int x = Integer.parseInt(arg[0]); A a = new A(); int z = a.m(x); System.out.println("100/"+x+" = "+ z); Typer av undantag Ett undantag i Java är ett objekt av någon subklass till klassen java.lang.throwable. Undantagen kan delas upp i tre grupper: Error (Fel) Run-time exception Checked exception (Kontrollerade undantag) Objectorienterad programmering Sida 14 Objectorienterad programmering Sida 16

Typer av undantag (forts) Error Fel som vanligtvis inte kan hanteras, tex att maskinen har slut på minne. Run-time exception Vanliga programfel, tex division med noll, fel i arrayindexering, fel i typkonvertering, eller access av null-objekt. Kontrollerade undantag Fel som rimligtvis bör hanteras av programmet, till exempel försök att öppna en fil som inte finns. Typer av undantag (forts) Det finns två viktiga klasser som ärver direkt från Throwable, java.lang.error och java.lang.exception java.lang.exception har en viktig subklass java.lang.runtimeexception Objectorienterad programmering Sida 17 Objectorienterad programmering Sida 19 De viktigaste typerna av undantag Typer av undantag (forts) Vilket typ av undantag? Object Ett undantag tillhör gruppen Error Throwable om det tillhör en klass som ärver från java.lang.error Ett undantag tillhör gruppen Run-time Exception Error Exception om det tillhör en klass som ärver från java.lang.runtimeexception......... Kontrollerade undantag RunTimeException...... Tips: RuntimeException har en konstruktor som tar Throwable som argument... Alla andra undantag tillhör gruppen Checked Exception. Exempel: IOException Objectorienterad programmering Sida 18 Objectorienterad programmering Sida 20

Att kasta ett undantag (Generera exceptionella händelser) En sats Hantera undantag class Undantag extends Exception { class A { void m() throws Undantag { throw new Undantag(); try {... catch (U1 e) { hantera felet catch (U1 e) { hantera felet finally { avsluta evaluerar... och fångar alla fel av klassen U1 och U2 och avslutar med att avsluta Objectorienterad programmering Sida 21 Objectorienterad programmering Sida 23 Exempel: try-catch 2 Kasta undantag (forts) Notera: Vi måste deklarera att metoden m kastar undantag (och vilken typ av undantag). Detta gäller för alla kontrollerade undantag (checked exceptions). Undantag skapas med new (som alla andra objekt). class Exce6 { static int div (int x, int y) { int r; try { r = x / y; catch (ArithmeticException e) { r = 0; return r; Objectorienterad programmering Sida 22 Objectorienterad programmering Sida 24

Exempel: try-catch 2 (forts) static void main (String [] arg) { int x = Integer.parseInt(arg[0]); int y = Integer.parseInt(arg[1]); int z = div(x,y); System.out.println(z); Att passa ett undantag vidare Vad händer om en metod inte fångar ett kontrollerat undantag? För att den saknar en try-sats, eller för att try-satsen inte fångar just den typen av undantag. Undantaget passas vidare till anroparen. Vilket innebär att anroparen också måste deklarera undantaget. Objectorienterad programmering Sida 25 Objectorienterad programmering Sida 27 Exempel: try-catch 2 (körexempel) harpo$ java Exce6 Exception in thread "main" java.lang.arrayindexoutofboundsexception: 0 at Exce6.main(Exce6.java:13) harpo$ java Exce6 100 7 14 harpo$ java Exce6 100 0 0 harpo$ Finally När körs finally-delen? En try kan terminera på tre olika sätt. 1. {... terminerar normalt. 2. {... kastar ett undantag som hanteras av en catch-klausul. 3. {... kastar ett undantag som inte hanteras. Objectorienterad programmering Sida 26 Objectorienterad programmering Sida 28

När körs finally-delen? (forts) 1. Normal terminering. Finally-delen körs efter att {... terminerat 2. Undantag kastas och hanteras av en catch. Finally-delen körs efter att hanteraren körts. 3. Undantag kastas men hanteras inte. Finally-delen körs före undantaget passas vidare. Finally-delen körs alltid. Bra för att (tex) stänga filer. (Men close() kan kasta en IOException som måste fångas...) Subklasser, subtyper, sustutierbarhet En klass B ärver av en klass A. Kan objekt av klassen B användas överallt där objekt av typen A förväntas? Relation klasser-gränssnitt? Objectorienterad programmering Sida 29 Objectorienterad programmering Sida 31 Undantag, sammanfattning Alla fel som uppstår vid körning representeras som undantag Undantag är objekt i någon subklass till Throwable Undantag kan hanteras (med try-catch) eller deklarertas (med throws) Vissa undantag (kontrollerade undantag, eller checked exceptions) måste deklareras; om en metod kan kasta ett sådant måste den deklarera det Substutition Ersätt ett objekt ur en typ T med ett objekt ur en subtyp T till T. 1. Kompilerar programmet? 2. Kan det köra normalt? 3. Beter det sig som om vi arbetade med ett objekt ur supertypen T? Finns olika definitioner av subtyp. Ibland krävs att att alla 3 ska gälla. Objectorienterad programmering Sida 30 Objectorienterad programmering Sida 32

Brott mot S, exempel class Person { String beskriv () { return "Jag är en person"; class Anställd extends Person { String beskriv () { return "Jag är en anställd"; Brott mot S, exempel class Anställd extends Person { boolean äranställd() { return true; Objectorienterad programmering Sida 33 Objectorienterad programmering Sida 35 Brott mot S, exempel class Person { boolean äranställd() { return false; Brott mot S, exempel class Person { String getaddress() {...... class Hemlös extends Person { String getaddress () { throw new UnsupportedOperationException(); Objectorienterad programmering Sida 34 Objectorienterad programmering Sida 36

Brott mot S, exempel public class PersonTest { void m (Person P) { if(p instanceof Anställd) { System.out.println("Den här har ett jobb"); Överlagring (overloading) av konstruktorer En klassdefinition... class Person { int ålder; String namn; [...] Objectorienterad programmering Sida 37 Objectorienterad programmering Sida 39 Substutitionsprincipen Substutitionsprincipen: alla tre frågprna med ja besvarade För att S ska gälla krävs att programmet uppfyller vissa kriterier: ingen kod som testar på klasstillhörighet arv får aldrig förändra betende viss flexibilitet i vad som är betendet hos ett program Java tillåter att en klass har flera konstruktorer. Person (String n, int å) { ålder = å; namn = n; Person(String n) { ålder = 65; namn = n; Person (int å) { ålder = å; namn = "Nisse"; Objectorienterad programmering Sida 38 Objectorienterad programmering Sida 40

Exempel: Överlagring (forts) Person () { ålder = 65; namn = "Nisse"; x = new Person (); System.out.println("Personen " + x.namn + " är " + x.ålder + " år gammal"); Körexempel Personen Kalle är 42 år gammal Personen Nisse är 42 år gammal Personen Nisse är 65 år gammal Objectorienterad programmering Sida 41 Objectorienterad programmering Sida 43 Överlagring av konstruktorer: Exempel Person x; x = new Person ("Kalle", 42); System.out.println("Personen " + x.namn + " är " + x.ålder + " år gammal"); x = new Person (42); System.out.println("Personen " + x.namn + " är " + x.ålder + " år gammal"); överlagring av metoder class Ut { static void skriv(string s) { System.out.println("En sträng:"+ s); static void skriv(int x) { System.out.println("Ett heltal:"+ x); static void skriv(double d) { System.out.println("Ett flyttal:"+ d); static void skriv(int [] a) { System.out.println("En array:"+a); Objectorienterad programmering Sida 42 Objectorienterad programmering Sida 44

Överlagring av metoder: exempel b.m2(42); Ut.skriv(42); Ut.skriv("eh"); Ut.skriv(3.14); Ut.skriv( new int[] {5,6,7); Körexempel: C c = new C(); c.m2(42); c.m2((char) 42); Ett heltal:42 En sträng:eh Ett flyttal:3.14 En array:[i@73d6a5 harpo$ java J172 B-m2 B-m2 C-m2 Objectorienterad programmering Sida 45 Objectorienterad programmering Sida 47 class B { public void m2(int i) { System.out.println("B-m2"); class C extends B { public void m2(char i) { System.out.println("C-m2"); public class J172 { public static void main (String[] arg) { B b = new B(); Objectorienterad programmering Sida 46