OOP Objekt-orienterad programmering

Slides:



Advertisements
Liknande presentationer
Föreläsning 9 Programmeringsteknik och Matlab 2D1312/2D1305
Advertisements

Avlusning Debugger (”avlusare”) Breakpoints Watch.
Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
Klasser och objekt.
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
OOP Objekt-orienterad programmering
Om Java C =>Java syntax variabler metoder färdiga klasser
Välkommen Vahid Mosavat
Programmeringsteknik för K och Media
Programmeringsteknik för K och Media
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Programkodens uppbyggnad
Att programmera i språket Java
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
Next previous Innehåll Inledning Några enkla exempel Pekare till och kort beskrivning av större exempel Speciella referenser (som används i marginalen)
Strömmar Vid läsning och skrivning används något som kallas strömmar.
OOP Objekt-orienterad programmering
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
Streams and File I/O Kapitel 10. Agenda Exceptions Textfiler Skriva Appenda Läsa File Sökvägar.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Repetition inför slutprovet
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Vektorer (klassen Vector) Sortering
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Programmeringsteknik för Media1 & K1
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Högnivå objekt för trådprogrammering: - Trådgrupper (”Thread pools”)‏ - Exekverare (Executor.
OOP F6:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 6 Mer om klasser och objekt Hantera många objekt ArrayList toString() – metoden.
Mitt första Java program Mahmud Al Hakim Copyright, Mahmud Al Hakim, 1.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
OOP F3:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 3 Iteration Många variabler av samma sort – Arrayer.
Föreläsning 8 Arv och abstrakta klasser. Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen ( extends.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
Föreläsning 14 ”Enkel” Filhantering.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
Föreläsning 10 Stränghantering.
Next previous RMI, Remote Method Invocation Om du har boken av Marty Hall, läs avsnitt 15.8 För fler exempel se:
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
OOP F14:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 14 Repetition Tips inför inlämningsuppgift 2.
Föreläsning 4 Klasser Och Objekt.
1 ITK:P2 F6 Sortering av generiska containerklasser DSV Peter Mozelius.
1. Ett problem/uppgift.
PROGRAMMERINGSTEKNIK Övningsgrupp 3 Marcus Hjelm
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
Föreläsning 1 Om kursen Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
INTRODUKTION TILL PROGRAMMERING
ITK:P2 F8 Strömmar och filhantering DSV Peter Mozelius.
OOP F13:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 13 Repetition variabler, selektion och iteration.
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
Central-enhet PM CPU BIOS Skiv- minne Sekundär- minnes- enheter (SM)
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
Föreläsning 3 Villkorssatsen if Slingor: while och for Felsökning.
TILLÄMPAD DATALOGI (TILDA) Övningsgrupp 2 Marcus Hjelm
TILLÄMPAD DATALOGI (TILDA) Övning 1 Marcus Hjelm
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
Övning 3. Repetition Metoder class RepetitionMetoder { public static void main(String [] args) double längd = 2.0; double bredd = 1.0; double area =
Programmeringsteknik för K och Media
Föreläsning 9 Inläsning och utskrift på fil –SimpleTextFileReader –SimpleTextFileWriter Felsökning Java API.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 15: Exceptions & lite swing, gränssnitt
Föreläsning 8: Exempel och problemlösning
JVM Java Virtual Machine
Presentationens avskrift:

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

Användardialog via dialogrutor: 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" 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:");

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: 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:"); 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 TestProgram.main(TestProgram.java: 28)

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. (funkar ej för vissa typer av extra allvarliga fel …)

try – catch 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

Läs in en ålder (alltså som en int): public static void main(String[]args){ Scanner scan = new Scanner(System.in); int ålder; boolean ok; do{ ok = true; try{ 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: try{ //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?

Undantagshierarkin Throwable Error Exception Här finns bl.a. unchecked exceptions LinkageError RuntimeException ThreadDeath VirtualMachineError checked exceptions unchecked exceptions ClassNotFoundException ArithmeticException SQLException NullPointerException TimeoutException IndexOutOfBoundsException IOException ArrayIndexOutOfBoundsException FileNotFoundException EOFException Här finns bl.a. getMessage() printStackTrace()

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. Vid: catch ( BlaBlaException e){ … } fångas BlaBlaException och eventuella subklasser till den.

Metod som öppnar fil, ger kompileringsfel eftersom IOException kastas: 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(){ try{ 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: 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

Försöker man nu skapa ett felaktigt Kort: Kasta undantag själv: 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: 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 ...

Serializable 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; 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 case 3: break; case 4: break; case 5: System.exit(0); default: System.out.println("Felaktigt kommando"); }//switch }//for }//main

Lagra myrorna, det sista som görs i programmet: try{ 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: try{ 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);

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 case 3: break; case 4: break; case 5: System.exit(0); default: System.out.println("Felaktigt kommando"); }//switch }//for }//main

ArrayList implementerar Serializable, hela kan sparas/laddas: try{ FileOutputStream fil=new FileOutputStream("Myrfil.obj"); ObjectOutputStream out=new ObjectOutputStream(fil); out.writeObject(allaMyror); } catch (IOException e){ System.exit(1); try{ 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);}