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



Relevanta dokument
Föreläsning 2, vecka 8: Repetition

Föreläsning 3-4 Innehåll

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

Typkonvertering. Java versus C

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Föreläsning 6: Metoder och fält (arrays)

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

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

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

Föreläsning 5-6 Innehåll

Föreläsning REPETITION & EXTENTA

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

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

TDDC77 Objektorienterad Programmering

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

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Tentamen OOP

Metoder - en funktion: medel

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

OOP Objekt-orienterad programmering

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

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

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.

Instuderingsfrågor, del D

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 Programmeringsteknik För Ing. - Java, 5p

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.

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

Objektorienterad programmering i Java

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

Lösningsförslag: Instuderingsfrågor, del D

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för B,V (1p) 13 januari 2001, kl Hjälpmedel: En Javabok. För betyget godkänt krävs at

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

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

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

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

Föreläsning 8: Exempel och problemlösning

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

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

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

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

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

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Testning av program. Verklig modell för programutveckling

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

Lite om reella tal. Programmering. I java. Om operatorers associativitet och prioritet

Del A (obligatorisk för alla)

Parallellism, återblick

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Objekt och klasser - Introduktion

Java, klasser, objekt (Skansholm: Kapitel 2)

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

Instuderingsfrågor, del E

TENTAMEN OOP

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

(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

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

Arrayer. results

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

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

Tentamen. Lösningsförslag

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Klassdeklaration. Metoddeklaration. Parameteröverföring

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

2 b) Bodega bodegan = new Bodega(); double moms = 0.235; String namn = "Vargtass"; System.out.println(namn + " " + moms + bodegan.ändra(moms, namn); S

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

DAT043 Objektorienterad Programmering

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

TENTAMEN OOP

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

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

Lösningsförslag övning 2.

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

Tentamen ID1004 Objektorienterad programmering May 29, 2012

JAVAUTVECKLING LEKTION 8

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

2 b) Följande finns definierat: public class Spel String titel = "Spel"; Dice[] tärningar = new Dice[10]; tärningar[0] = new Dice("Röd"); tärningar[1]

TDDD78 Objektorientering: Lagring och livstid

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

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

Objektorienterad 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

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Del A (obligatorisk för alla)

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

Testning och felhantering

Laboration A Objektsamlingar

Enkla variabler kontra referensvariabel

SMD 134 Objektorienterad programmering

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Objektorientering: Lagring, räckvidd och livstid

Mer om klasser och objekt

Transkript:

Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 3 Innehåll Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList. Föreläsning 3 Katarina Blom 1 2 Fel, fel, fel.. Att skriva datorprogram är inte helt trivialt, och man gör ofta en del misstag... Tre kategorier av fel förekommer: Kompileringsfel: Fel som uppstår om man inte följer språkets regler (syntax). Felen upptäcks av kompilatorn. Exekveringsfel: Fel som uppstår vid körningstillfället. Programmet kan inte fortsätta normalt när det exekveras. Logiska fel: Programmeraren har tänkt fel när programmet skrevs (tex. löst ett problem felaktigt, använt fel algoritm) och resultaten blir felaktiga. Metoder: Exempel: En klass för bankkonton Insättning. Uttag. Avläsning av saldo. Tillståndsvariabler: Saldot på kontot. 3 4

Första försöket public void taut(double sum){ saldo = saldo - sum; public double avlässaldo(){ return saldo; Förvillkor Det är vanligt att metoder har bivillkor på parametrarnas värden. Sådana förvillkor bör (minst) dokumenteras i kommentaren till metoden. /** * sätter in sum kronor på kontot. * @param sum summan som ska sättas in. * Om sum < 0 är resultatet odefinierat. */. Vad kan gå fel? 5 6 Andra försöket if(sum>=0) else????? Exceptions När indata till en metod är felaktiga (eg. förvillkoren är inte uppfyllda) bör man: Helst inte göra en felutskrift (ok. i debuggsammanhang, men ofta inte i det färdiga programmet). Helst inte i det tysta försöka göra något åt situationen Tex. Generera ett Exception. I vilken del av programmet kan felet åtgärdas? 7 8

Tredje försöket if(sum>=0) else throw new IllegalArgumentException(); Exceptions Java använder sig av exceptions. >> java Main Exception in thread "main" java.lang.arrayindexoutofbounds- Exception: 0 at Main.main(Main.java:3) - - - - - - - - - - - - - - - - - - - - - - - - - - Vad händer om satsen efter else exekveras? public class Main{ public static void main(string[] a){ System.out.println(a[0]); 9 10 Exekveringsfel Exekveringsfel kan delas in i två grupper: 1: Felprogrammeringar. Exempelvis: - Metoder anropas felaktigt (tex. Metodanrop där förvillkoren till metoden inte är uppfyllda) - Indexera utanför ett fält (fält: se slutet av denna föreläsning). Åtgärd: Programmera felfritt. 2: Fel som beror på yttre omständigheter. Exempelvis: - Programmet används fel av en användare (tex. vid in- och ut- matning) - Brist på minne, eller filer som inte finns. Åtgärd: Olika från fall till fall. 11 Checked och Unchecked Exceptions Exceptions i Java delas in i två grupper: 1: Unchecked Exceptions (behöver inte deklareras). Beror ofta på felaktigheter i själva programmet. Exempelvis: - IllegalArgumentException - ArrayIndexOutOfBoundException 2: Checked Exceptions (behöver deklareras). Beror ofta på yttre omstädigheter, eller att programmet används felaktigt. Exempelvis: - FileNotFoundException - IOException 12

Variabler Det finns olika sortes variabler: o Tillståndsvariabler o Lokala variabler o Statiska variabler (ofta konstanter) o Parametrar Var i programmet är de synliga? Vilken livstid har de? Hur initieras de? Tillståndsvariabler o Synlighet: I klassen (om private) o Livstid: Från dess att objektet av klassen skapas tills ingen referens till objektet finns kvar. o Initieringsvärde beror av typen på tillståndsvariabeln: int eller double: 0 boolean: false Klasstyp: null 13 14 Tre sätt att initiera tillståndsvariabler o Variabeln deklareras utan att ges ett värde (den får då standardvärdet). o Variabeln deklareras och ges ett startvärde. o Variabeln ges startvärde i konstruktorn. public BankKonto(double s){ saldo = s; Lokala variabler public class Nonsens{ private int t; public void order(int s1, int s2){ int tmp = s1; s1 = s2; s2 = tmp; o Synlighet: I blocket där den deklarerats. o Livstid: Minne allokeras vid varje metodanrop, avallokeras när metoden exekverat klart. o Initieringsvärde Måste initieras explicit. Kompilatorn kontrollerar så att initiering gjorts. 15 16

(Explicita) Parametrar public double avlässaldo(){ return saldo; o Synlighet: Hela metodens kropp. o Livstid: Minne allokeras vid varje metodanrop, avallokeras när metoden exekverat klart. o Initieringsvärde Värdet av metodanropets argument beräknas och lagras i minnescellen. (Implicita) Parametrar Varje objekt som skapas har en implicit parameter this. Denna initieras (vid tex. metodanrop) till att referera till det objekt vars metod anropats. När tillståndsvariabler refereras till i metoder syftar de på variablerna i objektet this. public BankKonto(double saldo){ this.saldo = saldo; 17 18 Parameteröverföring Exempel 1 public class Nonsens{ public void order(int s1, int s2){ int tmp = s1; s1 = s2; s2 = tmp; public class NonsensMain{ public static void main(string[] ar){ int a=7, b=13; Nonsens n = new Nonsens(); n.order(a,b); System.out.print("a = "+a); System.out.println(" b = "+b); Vad blir utskriften? 19 ParameteröverföringExempel 2 public class Par{ private int a, b; public int geta(){return a; public int getb(){return b; public void puta(int a){this.a = a; public void putb(int b){this.b = b; public class Nonsens{ public static void order(par s){ int tmp = s.getb(); s.putb(s.geta()); s.puta(tmp); public static void main(string[] a){ Par p = new Par(); p.puta(7); p.putb(13); order(p); System.out.print(p.getA()+" "+p.getb()); Vad blir utskriften? 20

Statiska variabler public static final double pi = 3.14; Fält Skapa ett fält med 5 heltalsvariabler: int[] a = new int[5]; En static-deklarerad variabel är gemensam för alla objekt av klassen. a a[0] a[4] Vanligt att konstanter är static finaldeklarerade. Synlighet private: endast inom klassen. public: också från andra klasser. Livstid Från det att klassen laddats in. (Tills programmet avslutats). a[3]=4; a a[0] 4 a[4] Initiering måste initieras explicit. (a:s typ är int[]). 21 22 Egenskaper hos fält o Alla element har samma typ. o Fältets storlek (dvs. antalet element) bestäms när fältet skapas. o Index börjar med 0 (alltid). o Fältelementet initieras på samma sätt som tillståndsvariabler. o Antalet element i fältetages ava.length. Mer om fält Fält kan fyllas med värden vid deklarationen. Fältets storlek bestämms då av antalet värden. int[] days = {31,28,31,30,31,30, 31,31,30,31,30,31; Att genomlöpa ett fält int sum = 0; for(int i=0;i<days.length;i++){ sum = sum+days[i]; Använd days.length även om du vet antalet element 23 24

Fält som parameter public static int countzeros(int[] a){ int count = 0; for(int i=0;i<a.length;i++) if(a[i]==0) count = count + 1; return count; Det går också att returnera fält public static int[] reverse(int[] a){ int[] temp = new int[a.length]; for(int i=0;i<a.length;i++) temp[a.length-1-i] = a[i]; return temp; Hur kan man skriva metoden utan den lokala variabeln temp? Kan användas på fält av vilken storlek som helst I parametern skickas referensen till fältet 25 26 Fler exempel på fält Inuti klassen Box: public class Box{ private static final int MAXBALLS=100; private Ball[] theballs = new Ball[MAXBALLS]; private int ballcount = 0; public void addball(ball b){ theballs[ballcount] = b; ballcount++; Observera! String är inte ett fält av tecken. public static int countchr(string s, char c){ int count = 0; for(int i=0;i<s.length();i++){ if(s.charat(i)==c) count = count + 1; return count; Fält av String som parameter till main: public static void main(string[] arg){ 27 28

Om man inte vet på förhand hur många element som behövs? Ett fält har en bestämd storlek som inte kan utökas utan vidare. Ta i så att det säkert räcker. Använd en färdig klass som tillåter godtyckligt många element. Tex. java.util.arraylist. Klassen java.util.arraylist innehåller bla. metoderna: public void add(e e) (Objekt av vilken klass som helst är ok. här) public int size() public E get(int index) Box med ArrayList import java.util.arraylist; public class Box{ private ArrayList<Ball> theballs = new ArrayList<Ball>(); /*ballcount behövs inte längre. Anropet theballs.size() ger antalet element som har satts in. private int ballcount = 0; */ public void addball(ball b){ theballs.add(b); Observera syntaxen när man skapar objekt av ArrayList 29 30