OOP Objekt-orienterad programmering



Relevanta dokument
OOP Objekt-orienterad programmering

Fördjupad Java. Undantagshantering. Fel

Föreläsning 14. Filhantering

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

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga 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)

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

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 programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

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

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

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

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

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

Språkkonventioner och redigering av tal.

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

Objektorienterad Programmering (TDDC77)

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering

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

Testning och felhantering

Objektorienterad programmering

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

Tentamen ID1004 Objektorienterad programmering May 29, 2012

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

Föreläsning 14. Träd och filhantering

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

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

OOP Objekt-orienterad programmering

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

TENTAMEN OOP

JAVAUTVECKLING LEKTION 4

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

Felhantering TDDD78, TDDE30, 729A

Input. Programmering. Andra källor

Testning av program. Verklig modell för programutveckling

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

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

F4. programmeringsteknik och Matlab

F10 - Exceptions. ID1004 Objektorienterad programmering Fredrik Kilander

Objektorienterad programmering D2

JAVAUTVECKLING LEKTION 7

Repetition av OOP- och Javabegrepp

DAT043 Objektorienterad Programmering

OOP Objekt-orienterad programmering

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

Repetition av OOP- och Javabegrepp

OOP Tentamen

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

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

Tentamen , Introduktion till Java, dtaa98, dtea53

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

Klassen javax.swing.timer

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

TENTAMEN OOP

OOP Objekt-orienterad programmering

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

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.

Laboration A Objektsamlingar

Skriftlig tentamen för kursen DV017A. Inledande programmering i Java A

Länkade strukturer, parametriserade typer och undantag

Lösningsförslag till tentamen

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Kap J 7-1 Mer om arv. (superklass) (subklass)

OOP Tentamen

Tentamen , Grundläggande programmering i Java

Del A (obligatorisk för alla)

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Felsökning, UML. Översikt. Java starkt typat. Typomvandling (casting) Exempelhierarki. Stark typning

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

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

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

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

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

TENTAMEN OOP

OOP Tenta

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 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

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

Objektorienterad programmering i Java

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.

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

Lösningar för tenta 2 DAT043,

Kopiering av objekt i Java

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

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

Lösningsförslag till tentamen

725G61 - Laboration 4 Interaktion och I/O. Johan Falkenjack

Föreläsning 3. Stack

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

Tentamen, EDAA20/EDA501 Programmering

LÖSNINGSFÖRSLAG TILL TENTAMEN PROGRAMMERINGSMETODIK MOM2 - JAVA, 4P.

OOP Omtenta

Tentamen, EDAA10 Programmering i Java

Del A (obligatorisk för alla)

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Transkript:

OOP F12:1 OOP Objekt-orienterad programmering Föreläsning 12 Mer om JOptionPane Undantagshantering Vad är det? try catch Kasta egna undantag Filhantering spara objekt mellan körningar Användardialog via terminalfönster: OOP F12:2 Namn: Anna Svensson Ålder: 28 Adress: Kista Utskrift via System.out: System.out.print( ); System.out.println( ); Inmatning via System.in med hjälp av ett Scanner-objekt: Scanner scan = new Scanner(System.in); String namn = scan.nextline(); int ålder = Integer.parseInt(scan.nextLine()); 1

Användardialog via dialogrutor: OOP F12:3 Enkla dialogrutor kan skapas m.hj.a. JOptionPane Ligger i delbiblioteket javax.swing JOptionPane har ett antal statiska metoder för dialogrutor Tre olika "standard-dialogrutor" OOP F12:4 Meddelandetexten här String kan vara vilket Object som helst, det som skrivs ut är tostring() JOptionPane.showMessageDialog(null, "Meddelande:"); Returnerar en int, någon av: YES_OPTION, NO_OPTION CANCEL_OPTION, CLOSED_OPTION int x=joptionpane.showconfirmdialog(null, "Fråga:"); Returnerar en String Om Avbryt eller X returneras null String str=joptionpane.showinputdialog("fråga:"); 2

OOP F12:5 JOptionPane.showMessageDialog(null, "Meddelande\nText\nText"); JOptionPane.showMessageDialog(null, "Meddelande", "Fönsternamn", JOptionPane.ERROR_MESSAGE); JOptionPane.showConfirmDialog(null, "Fråga\nMer text", "VIKTIGT - SVARA RÄTT", JOptionPane.YES_NO_OPTION); JOptionPane.showInputDialog(null, "Fråga:", "Svara!!!", JOptionPane.WARNING_MESSAGE); Det som matas in är hela tiden String'ar. Vill vi ha ett heltal så konverterar vi med Integer.parseInt: OOP F12:6 Scanner scan=new Scanner(System.in); System.out.print("Ålder:"); String str=scan.nextline(); int ålder=integer.parseint(str); ELLER String str=joptionpane.showinputdialog(null, "Ålder:"); int ålder=integer.parseint(str); Om man svarar med fel sort, t.ex. "tolv"? Exekveringsavbrott: Exception in thread "main" java.lang.numberformatexception: For input string "tolv" at java.lang.numberformatexception.forinputstring(unknown Source) at java.lang.integer.parseint(unknown Source) at java.lang.integer.parseint(unknown Source) at TestProgram.main(TestProgram.java: 28) 3

När java upptäcker ett fel så skapas ett objekt av en undantagsklass (Exception Class). Olika objekt för olika sorts fel: NumberFormatException ArrayIndexOutOfBoundsException NullPointerException FileNotFoundException etc. det finns massor! I objektet finns lite information om VAD som blivit fel och VAR någonstans i koden som felet uppstått. Görs inget så avbryts programmet och informationen skrivs ut på skärmen. MEN man kan välja att FÅNGA felet i programkoden och låta programmet fortsätta istället. OOP F12:7 (funkar ej för vissa typer av extra allvarliga fel ) try catch OOP F12:8 Koden där felet kan uppstå läggs inom ett try-block: System.out.print("Ålder:"); String str = scan.nextline(); int ålder = Integer.parseInt(str); OM det blir fel så kastas ett undantag fångas med catch: catch (NumberFormatException e){ //vad skall hända om det blev fel 4

Läs in en ålder (alltså som en int): OOP F12:9 public static void main(string[]args){ Scanner scan = new Scanner(System.in); int ålder; boolean ok; do{ ok = true; System.out.print("Ålder:"); String str = scan.nextline(); ålder = Integer.parseInt(str); catch (NumberFormatException e){ System.out.println("Åldern måste vara ett tal!"); ok = false; while (!ok); System.out.println("Ålder="+ålder); Flera catch på en try: OOP F12:10 //Nån fiffig kod som gör nåt slugt //Där mycket kan gå fel... catch (NumberFormatException e){ //Vad göra om NumberFormatException? catch (ArrayIndexOutOfBoundsException e){ //Vad göra om man adresserar sig utanför en array? catch (NullPointerException e){ //Vad göra om man försöker använda null-pointer? 5

Undantagshierarkin Throwable Här finns bl.a. getmessage() printstacktrace() OOP F12:11 Error Exception unchecked exceptions LinkageError ThreadDeath VirtualMachineError RuntimeException unchecked exceptions ArithmeticException NullPointerException IndexOutOfBoundsException checked exceptions ClassNotFoundException SQLException TimeoutException IOException ArrayIndexOutOfBoundsException FileNotFoundException EOFException unchecked exceptions Dessa kan man strunta i om man vill. Leder då till exekveringsavbrott. Kan fångas om man önskar. Error skall/bör INTE fångas. checked exceptions MÅSTE tas om hand, fångas eller kastas vidare. Annars får man kompileringsfel. OOP F12:12 Vid: catch ( BlaBlaException e){ fångas BlaBlaException och eventuella subklasser till den. 6

Metod som öppnar fil, ger kompileringsfel eftersom IOException kastas: OOP F12:13 public void läsfrånfil(){ FileInputStream fin=new FileInputStream("Filen.txt"); //läsa från filen Fånga IOException med try-catch: public void läsfrånfil(){ FileInputStream fin=new FileInputStream("Filen.txt"); //läsa från filen catch (IOException e){ //Vad göra vid fel? Kasta vidare med throws (måste tas om hand där läsfrånfil() anropas): public void läsfrånfil() throws IOException{ FileInputStream fin=new FileInputStream("Filen.txt"); //läsa från filen Från föreläsning 7 klassen Kort: OOP F12:14 class Kort{ public static final int SPADER=0, HJÄRTER=1, RUTER=2, KLÖVER=3; private int färg, valör; public Kort(int f, int v){ färg=f; valör=v; //Plus ytterligare metoder... Skapa ett Kort: Kort k = new Kort(2, 12); //Ger ruter dam Skapa felaktigt Kort: Kort k2 = new Kort(5, 10); //Färg skulle ju vara 0-3 7

Kasta undantag själv: OOP F12:15 class Kort{ public static final int SPADER=0, HJÄRTER=1, RUTER=2, KLÖVER=3; private int färg, valör; public Kort(int f, int v){ if (f<spader f>klöver) throw new IllegalArgumentException("Färg="+f); färg=f; valör=v; //Plus ytterliggare metoder... Försöker man nu skapa ett felaktigt Kort: Kort k2 = new Kort(5, 10); //Färg skulle ju vara 0-3 så avbryts programmet med: Exception in thread "main" java.lang.illegalargumentexception: Färg=5 at Kort.java<init>(Kort.java:8) at Korttest.main(Korttest.java:14) Lagra klasser mellan körningar: OOP F12:16 class Myra{ private int barr; private String namn; private Myra partner; Skulle kunna lagras på en textfil, samtliga attribut lagras, t ex: Myrre 38 ej gift Kalle 112 Anna Ubbe 21 ej gift Anna 32 Kalle Knoppe 16 Fluri Joppe 62 ej gift Voppe 87 ej gift Fluri 91 Knoppe Besvärligt att återskapa, framförallt referenser till andra objekt... 8

Serializable OOP F12:17 Ett gränssnitt utan metoder (!), gör att ett objekt kan översättas till bytecode som sedan kan lagras. Översätter även referenser så hela strukturer kan lagras. import java.io.*; class Myra implements Serializable{ private int barr; private String namn; private Myra partner; Gör att objekt av klassen Myra (eller subklasser...) kan översättas till bytekod som t ex kan skrivas på en fil. Översättningen görs av strömmarna ObjectOutputStream och ObjectInputStream. Metoderna som används är: public final void writeobject(object obj); public final Object readobject(); Kastar olika IOException's och ClassNotFoundException import java.io.*; class Myrtest{ public static void main(string[]args){ Myra[] allamyror = new Myra[100]; int antal=0; OOP F12:18 for(;;){ System.out.print("1-Skapa myra\n2-ändra barr\n"+ "3-Giftemål\n4-Skriv ut alla\n"+ "5-Avsluta\nAnge Kommando: "); int kom=integer.parseint(sc.nextline()); switch (kom){ case 1: //Koden för att skapa en myra break; case 2: //Koden för att ändra antal barr break; case 3: break; case 4: break; case 5: System.exit(0); default: System.out.println("Felaktigt kommando"); //switch //for //main 9

OOP F12:19 Lagra myrorna, det sista som görs i programmet: FileOutputStream fil=new FileOutputStream("Myrfil.obj"); ObjectOutputStream out=new ObjectOutputStream(fil); for (int x=0; x<antal; x++) out.writeobject(allamyror[x]); catch (IOException e){ System.exit(1); Filnamnet är "Myrfil.obj", extension spelar ingen roll, bör vara något som man "känner igen" så att man håller ordning på sina filer. Ev. kan man fråga användaren efter filnamn. Ladda in myrorna, görs i början av programmet: OOP F12:20 FileInputStream fil=new FileInputStream("Myrfil.obj"); ObjectInputStream in=new ObjectInputStream(fil); while (fil.available()>0){ Myra m=(myra)in.readobject(); allamyror[antal++]=m; catch (FileNotFoundException e){ //Inget görs, noll myror från början! catch (IOException e){ System.exit(2); catch (ClassNotFoundException e){ System.exit(3); 10

import java.io.*; import java.util.*; class Myrtest{ public static void main(string[]args){ ArrayList<Myra> allamyror=new ArrayList<Myra>(); for(;;){ System.out.print("1-Skapa myra\n2-ändra barr\n"+ "3-Giftemål\n4-Skriv ut alla\n"+ "5-Avsluta\nAnge Kommando: "); int kom=integer.parseint(sc.nextline()); switch (kom){ case 1: //Koden för att skapa en myra break; case 2: //Koden för att ändra antal barr break; case 3: break; case 4: break; case 5: System.exit(0); default: System.out.println("Felaktigt kommando"); //switch //for //main OOP F12:21 ArrayList implementerar Serializable, hela kan sparas/laddas: OOP F12:22 FileOutputStream fil=new FileOutputStream("Myrfil.obj"); ObjectOutputStream out=new ObjectOutputStream(fil); out.writeobject(allamyror); catch (IOException e){ System.exit(1); FileInputStream fil=new FileInputStream("Myrfil.obj"); ObjectInputStream in=new ObjectInputStream(fil); allamyror = (ArrayList<Myra>)in.readObject(); catch (FileNotFoundException e){ //Filen fanns ej, vi startar med tom ArrayLista catch (IOException e){ System.exit(2); catch (ClassNotFoundException e){ System.exit(3); 11