Personal. Objektorienterad programmeringsmetodik 5DV133. Kursmål. Här sitter vi MIT-huset våning 4. Examination. Kursens uppläggning.

Relevanta dokument
Personal Objektorienterad programmeringsmetodik 5DV081 5DV109

Personal. Objektorienterad programmeringsmetodik 5DV133. Kursmål. Kursens uppläggning. Lärare. Handledare och gruppövningar.

Klassdeklaration. Metoddeklaration. Parameteröverföring

Kodkonvention Klasser påbörjas med stor bokstav (i övrigt små utom om flera ord då Inledande bokstav i övriga ord också görs stor) AClass

Parameteröverföring. Exempel. Exempel. Metodkropp

Programmering A. Johan Eliasson

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

Objekt och klasser - Introduktion

Java Sommarkurs. Institutionen för datavetenskap. Här sitter vi. Kursen kontaktpersoner utbildningsprogram

Objektorienterad Programmering (TDDC77)

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

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Objekt och klasser - Introduktion. Objekt. SparKonto.java 2. SparKonto.java 1. Konton.java. Ett objekt har: Ett bankkonto

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

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

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

Föreläsning 5-6 Innehåll

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

(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

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

Classes och Interfaces, Objects och References, Initialization

Objektorienterad Programmering (TDDC77)

Föreläsning 3-4 Innehåll

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

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

F4. programmeringsteknik och Matlab

Java, klasser, objekt (Skansholm: Kapitel 2)

Objekt, Klasser, Paket m. m.

TENTAMEN OOP

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

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

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

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

SMD 134 Objektorienterad programmering

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

OOP Objekt-orienterad programmering

Abstrakta Klasser 2. Kodning är bara en liten del i programvaruutvecklingen 6% 1% 6% Abstrakta Klasser - deklaration. Programutveckling sker i faser

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

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

TENTAMEN OOP

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

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

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

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

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

TDDC77 Objektorienterad Programmering

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

Typkonvertering. Java versus C

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

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Anteckningar 1: Grundläggande saker

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

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

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

Arrayer. results

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

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

Objektorienterad programmering i Java

Modeller, Objekt och Klasser

Objektorienterad programmering Föreläsning 4

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Programmeringsteknik I

Föreläsning 1 & 2 INTRODUKTION

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

Programmering för språkteknologer I, VT2012. Rum

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Tentamen OOP

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

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

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

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 13 Innehåll

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Föreläsning 3: Booleans, if, switch

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

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

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

Objektorienterad programmering i Java

OOP F1:1. Föreläsning 1. Introduktion till kursen OOP Vad är Java? Ett första Java-program Variabler Tilldelning. Marie Olsson

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

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

Objekt och klasser - Introduktion. Objekt. Spar_Konto 2. Spar_Konto 1. Konton. Ett objekt har: Ett bankkonto. public void uttag(double belopp)

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.

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

Objektorienterad programmering

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

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

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

Transkript:

Personal Objektorienterad programmeringsmetodik 5DV133 Java VT-12 1 Lärare Johan Eliasson (johane@cs.umu.se) (kursansv) Thomas Johansson (thomasj@cs.umu.se) Handledare Marcus Karlsson (marcusk@cs.umu.se) Niclas Lockner (lockner@cs.umu.se) 2 Här sitter vi MIT-huset våning 4 Support Johan 3 Kursmål Kunskap och förståelse förklara grundläggande koncept i en objektorienterad ansats, visa kunskap om metoder, så som CRC, för objektorienterad modellering av system, visa kunskap om UML-notation för klassdiagram. Färdighet och förmåga tillämpa grundläggande objektorienterade koncept i Java analysera ett problem utifrån en objektorienterad ansats, i grupp och enskilt designa ett objektorienterat program, dokumentera denna design, samt implementera den i Java, använda ett versionshanteringssystem för källkod och annan dokumentation som skapas i grupp, kunna utföra enhetstestning med hjälp av JUnit. Värderingar och förhållningssätt visa förmåga att utifrån en objektorienterad ansats, och andra för problemet relevanta aspekter göra bedömningar av en 4 modells lämplighet. Kursens uppläggning Föreläsningar!! - F Metodikövningar! - G - Under dessa kommer vi främst att jobba med CRC-metoden Individuell handledning 5 Examination Två moment Moment 1: 4 hp Teoriprov (3 timmar) Praktiskt prov i lab (4 timmar) Moment 2: 3,5hp Examineras via obligatoriska uppgifter (varav en ska genomföras i grupp och redovisas vid två tillfällen) 6

Kursutvärderingen från vt11 Se om det går att flytta fler föreläsningar tidigare så att man snabbare kan komma igång med lab1 och därmed undvika att arbetsbelastningen blir så hög i slutet av kursen. Förhoppningsvis ligger påsken också bättre till i förhållande till kursplaneringen nästa år. Försök se till så att det blir lite mindre att göra på praktiska provet Undersök om det går göra tex lab 2 frivillig för att minska antalet obligatoriska moment; g tror dock att det behövs lika många övningstillfällen på CRC-metoden för att man ska behärska den nog bra så det är inte säkert att det är lämpligt Cay S. Horstmann, Big Java, Wiley, 4 ed ISBN: 978-0-470-55309-1 Kursmaterial Även övriga upplagor från och med ed3 funkar Boken finns även i en något mindre utförlig upplaga under namnet Java Concepts Object-Oriented Analysis and Design Through Scenario Role-Play OH bilderna från föreläsningarna http://www.cs.umu.se/kurser/5dv133/vt12 Gör en grundligare genomgång av Eclipse och SVN 7 8 Eclipse Kursverktyg Finns att ladda hem för de flesta datorplatformar (PC, Mac, Linux m.fl.) Java Utformades av James Gossling (SUN) och släpptes 1995 Konstruerat för att vara plattformsoberoende. Dvs ett program skrivet i va skall gå att köra på olika datorplattformar utan att man behöver göra några förändringar. 9 10 programmering Programmering i Java exekvering Objekt Ett objekt är en individuellt identifierbar entitet som kan vara konkret eller abstrakt. Ett objekt har tillstånd, beteende och identitet. <fil>.va Java programkod översättning kompilator <fil>.class Java bytekod exekvering exekvering 11 Reellt, gripbart, synligt ting (t ex en specifik person) Abstrakt ting (t ex en tid eller en anställd) Varje objekt har ett tillstånd, ett beteende och en identitet. Tillståndet beskriver objektets egenskaper (t ex adress och ålder hos en person) Beteendet beskriver vad objektet kan göra (t ex flytta). OBS! Detta kan innebära att tillståndet ändras Identiteten skiljer ett objekt från alla andra objekt 12

Klass En klass är en byggplan för objekt av samma sort. Alla objekt av en klass (instanser) har samma sorts egenskaper och beteenden En klass beskriver en mängd liknande objekt Datatyp namn ålder adress flytta... Person Namn på klassen egenskaper (attribut) beteende (metoder) 13 Objekt Objekt och klasser Modeller av saker i problemdomänen ( den röda bilen i parkeringshuset Nanna ) Klasser Representerar alla objekt av ett visst slag ( bil ) 14 Lite annat Många instanser kan skapas av en klass Ett objekt har attribut: värden som lagras i fields. Klassen definierar vilka fields ett objekt har, men varje objekt har sin egen uppsättning värden (objektets tillstånd/ state) 15 är en instans av circle1:circle diameter=50 xposition=80 yposition=30 color="blue" isvisible=true Två cirkel-objekt Circle diameter:int xposition:int yposition:int color:string isvisible:boolean är en instans av circle2:circle diameter=30 xposition=230 yposition=75 color="red" isvisible=true 16 Objekt vs klass Metoder och parametrar bigyellowtriangle height width xposition yposition color Triangle changecolor changesize move... Objekt har operationer som kan anropas ( I Java kallas de metoder) Metoder kan ha parametrar så att information som är nödvändig för att att utföra operationen kan ges till objektet smallbluetriangle 17 18

Källkod Varje klass beskrivs med hjälp av källkod (Javakod). Där definieras detaljerna (attribut och metoder) Abstraktion och modularisering Abstraktion är förmågan att strunta i delarnas detaljer och istället fokusera på problemet på en högre nivå Ett/en objekt/klass är abstrakt i den meningen att vi inte behöver känner till alla detaljer för att kunna använda den Modularisering är arbetet att dela upp helheten i mindre, väldefinierade delar som kan byggas och utvärderas separat, och som interagerar på ett väldefinierat sätt. 19 20 Java Objekt, klasser, syntax Syntaxdiagram Start på en icketerminal Terminal symbol Möjlig väg att föl En annan icketerminal Slut på beskrivning av icketerminal = Identifier 21 22 Tilldelning av värden En variabel innehåller antingen ett primitivt värde eller en referens till ett objekt Referenser som inte refererar till ett objekt har värdet null. Attribut sätts automatiskt till null/0 övriga variabler måste initieras manuellt. Variabler måste initialiseras En variabel tilldelas ett (nytt) värde genom = Basic assignment Identifier = Expression ; Lokala variabler Attribut/fields är en sorts variabler De lagrar värden hela objektets liv De kan nås i hela klassen. Metoder kan innehålla variabler med kortare livslängd De existerar bara medan metoden exekveras De kan bara nås inne i metoden (i det block där de är definierade) 23 24

Identifierare och variabler Identifierare är namn på olika storheter som definieras av programmeraren Lite andra regler gäller i Java än i C Identifierare får innehålla bokstäver, siffror, understrykningstecknet (_), och valuta tecknen (t ex dollar tecknet) Identifierare får ej inledas med en siffra Java är case sensitive, dvs Total är olika total Identifierare för värden eller objekt kallas variabler Identifier Java Letter Java Letter Java Digit Java Letter a - z A - Z $ _ Java Digit 25 0-9 Variabler och datatyper Variabler används för att spara data Variabler måste deklareras med datatyp och namn innan de får användas Basic Variable Declaration Primitive Type Identifier ; Class Type En primitiv datatyp kan vara heltal (byte, short, int, long), flyttal (float, double), tecken (char) eller boolean En klasstyp är ett namn på en klass (t ex Triangle) Primitiva datatyper kallas också inbyggda datatyper Klasstyper kallas också användardefinierade datatyper, 26 Other va letter Primitiva datatyper: Hel- och flyttal De olika heltals och flyttals typerna har olika storlek. I Java är storlekarna def. enl. fölnde Typ byte short int long float double Storlek 8 bits 16 bits 32 bits 64 bits 32 bits 64 bits Minimum -128-32,768-2,147,483,648 < -9 x 10 18 Maximum 127 32,767 2,147,483,647 > 9 x 10 18 +/- 3.4 x 10 38 med 7 signifikanta siffror +/- 1.7 x 10 308 med 15 signifikanta siffror Primitiva datatyper: Tecken En variabel av datatypen char sparar ett Unicode tecken Värdemängden är en ordnad uppräkning av tecken Det finns 65,536 unika Unicode tecken (16 bit) med tecken och symboler från olika språk, t ex 'å' och 'ö' Alla tecken är ordnade och varje tecken motsvarar en siffra (detta underlättar att kolla om ett tecken ligger t ex mellan 'a' och 'z') Se t.ex. http://www.unicode.org/ för detaljer 27 28 Primitiva datatyper: boolean Datatypen boolean har bara 2 värden true false Används på alla ställen där sanningsvärden behövs (tex ger jämförelseoperatorerna tillbaka resultat tillhörande denna datatyp) Objekt Triangle bigyellowtriangle, smallbluetriangle; bigyellowtriangle =??? Hur får vi tillgång till objekt? 29 30

Konstruktorer public TicketMachine(int ticketcost) { price = ticketcost; balance = 0; total = 0; Konstruktorer ansvarar för att initialisera ett objekt. De har samma namn som klassen. De lägger in startvärden på attributen. Startvärden till attributen kan fås utifrån via parametrar. Skapar nya objekt Ex new Triangle() new 31 32 Referenser vs värden Tilldelning har lite olika effekt för primitiva datatyper och klasstyper! Primitiva datatyper: Variabel själva värdet Klasstyper: Variabel = referens till objektet (jämför med pekare i C) int i1 = 5, i2 = 10; 5 10 i1: i2: i2 = i1; 5 5 i1: i2: Triangle t1 = new Triangle(); Triangle t2 = new Triangle(); t1 t2 t2 = t1; t1 t2 33 Alias och garbage collection Triangle t1 = new Triangle(); Triangle t2 = new Triangle(); t1 t2 t2 = t1; t1 t2 t2.changecolor ( red ); t1 t2 Ett objekt som refereras till mha flera referenser; referenserna kallas alias Objekt som inte längre kan nås; rensas bort automatiskt (garbage collection) Båda trianglar (t1 och t2) har blivit röda Var försiktig med aliasing 34 Syntax: Class Declaration Modifier Class Body { Basic Class Member Klassdeklaration class Class Member Field Declaration Constructor Declaration Method Declaration Identifier Class Associations Motsvarar variabel deklaration Class Body 35 Syntax: Basic Method Declaration Modifier Exempel: Metoddeklaration Type void Identifier Ej resultat Parameters Method Body public void changesize (int newheight, int newwidth) { Parameter public float getarea ( ) { Resultatets datatyp 36

Instantiering och manipulation Triangle atriangle = new Triangle(); Triangle height width xposition yposition color changecolor changesize move... atriangle.move(); atriangle.changecolor( blue ); atriangle.move(); atriangle.changesize(50, 100); Mer klasser och objekt Vi kikar in i klasserna, och tar en titt på några av vas inbyggda En vanlig metodanrop ser ut så här! <objektnamn>.<metodnamn> (<parameterlista>); 37 38 Kodkonvention Klasser påbörs med stor bokstav (i övrigt små utom om flera ord då Inledande bokstav i övriga ord också görs stor) AClass Metoder/attribut inleds med liten bokstav (i övrigt små utom om flera ord då inledande bokstav i övriga ord också görs stor) amethod(), avariable Konstanter Bara stora bokstäver. Ord åtskiljs med _ Variabel eller metod private Visibility PI Följer man dessa konventioner så kommer ens egna klasser att se ut som vas inbyggda. 39 40 default protected public Nås i samma klass Nås i samma paket Nås i subklass Nås överallt Överlagring Vi kan ha flera metoder/konstruktorer med samma namn bara dessa har olika signatur signatur : metodens namn och parametrar (antal,typ och ordning) Vilken version av metoden som används vid anrop beror på de aktuella parametrarna Ex: public int amethod(int x) {... public int amethod(int x, int y){... amethod(1) amethod(1,2) 41 Överlagrade konstruktorer Vill man att en av konstruktorerna i en klass ska anropa en annan (för att få en och samma kod på bara ett ställe) så gör man detta mha this() this() måste stå först i konstruktorn Ex: public Square() { this(60,50); public Square(int xpositionp,int ypositionp){ size = 30;! xposition = xpositionp;! yposition = ypositionp;! color = "red"; isvisible = false; 42

Mer this I en metod refererar referensen this till det objekt vars metod för tillfället körs this kan användas till att referera till godtyckligt attribut/metod för objektet Används tex då parametrar har samma namn som attribut Ex public Square(int xposition,int yposition){ size = 30;! this.xposition = xposition;! this.yposition = yposition;! color = "red"; isvisible = false; 43 String I Java en klass. Svarar mot en sekvens av tecken. String str= abc ; //finns även andra sätt skapa strängar Operationer på strängar + Strängkonkatenering Ex: hej + då => hejdå Antal: +1 => Antal: 1 charat(int) tar fram bokstaven på en given position (numrerat från 0) length() tar fram antal bokstäver i strängen equals(string) kollar om två strängar innehåller samma tecken 44 mm. (se API beskrivningen) Enkel output Kan tex göras mha klassen PrintStream Fördefinierade standardströmmar: ström System.out System.err syfte skriva vanlig text skriva felmeddelanden PrintStream Huvudsakligen print och println metoder som skriver ut värden. println gör radbrytning efter utskrift print och println är överlagrade för alla primitiva datatyper, String och Object 45 print och println finns för alla tänkbara datatyper 46 Kontrollstrukturer i Java Samma som de som finns i C med i princip ett undantag (en specialvariant på forloopen som vi kommer titta på då vi tittar på collection-klasserna) if(villkor) if(villkor)... else while(villkor) do... while(villkor) switch (expression) { case value1: sats1; break; case value2: sats2; break; default: satsn; switch-satsen OPTIONAL Uttrycket måste vara heltal, tecken eller enum (från va 7 även String) Motsvarar nästade if-satser for(init;villkor;förändring) 47 48

static Attribut och metoder kan deklareras static Associerar attribut och metoder med klassen snarare än objektet Avsteg ifrån objekts-tanken Bör därför användas bara där det verkligen behövs Undvik under denna kurs (utom för main) då ni ska lära er objektorientering. 49 Statiska attribut Normalt har varje objekt eget minnesutrymme static gör variabeln gemensam för alla objekt i klassen (dvs den delas av alla) private static int count; Kallas ibland klass variabler 50 Statiska metoder 1 Statiska metoder anropas via klassnamnet Man behöver inte skapa ett objekt först Därför kallas de också klass metoder Exempel: Klassen Math i paketet va.lang innehåller statiska matematiska operationer Math.abs (num)! -- absolutbeloppet Math.sqrt (num)!-- kvadratrot Math.random ()! -- slumptal i intervallet [0.0 1.0) 51 Statiska metoder 2 Statiska metoder får inte referera till instansvariabler (eftersom de instansieras först när ett objekt skapas) Får bara referera statiska variabler eller lokala variabler (som existerar oberoende av objekt) Även metoderna är specifika för objekt Får bara anropa statiska metoder (om den inte gör det via en instans) 52 Metoden main Metoden public static void main(string[] args)! Anropas automatiskt då man vill starta ett vaprogram Metoden måste se ut just som ovan (utom args som är en godtycklig identifierare) Denna metod får sedan se till så att de objekt som behövs av programmet skapas och exekverar metoderna som kör igång programmet 53 Konstanter Som variabler fast deras värde får inte ändras Markeras med reserverade ordet final Exempel: final double PI = 3.14159; final char NEWLINE = \n ; Fördelar Vettiga namn istället för konstiga siffror eller tecken. Lättare att förstå koden. Enklare att uppdatera. Rätt ofta även deklarerade static så att bara en konstant finns för hela klassen. 54

Fel och felhantering Ett program kan fungera korrekt i normalfallet men vara känsligt för störningar Felaktiga indata (från användaren/andra program) Yttre omständigheter Bra program är förberedda på att fel kan uppstå Hur upptäcker man fel? Partiella funktioner: Funktioner som inte är definierade för vissa inputvärden Fel uppstår ofta då metoder får oväntade indata. Kontrollera indata i metoden innan något görs Kontrollera parametrarna innan metoden anropas Vad passar bäst? 55 56 Felhantering Vissa fel kan inte förebyggas med hjälp av if-satser En fil kan t ex raderas under skrivningen/läsningen, fast man har kollat i förväg att allt är OK Möjliga åtgärder: Avbryt eller avsluta programmet Ignorera felet och fortsätt Skriv ut ett meddelande och fortsätt Ignorera anropet som ledde till felet Tolka anropet på ett meningsfullt sätt Kräver åtgärd från användaren interaktivt Producera ett felaktigt resultat Returnera en felkod (går ej alltid)... Hur bör man hantera fel? Det finns många alternativ Det finns ingen åtgärd som är bäst i alla lägen Beror på anroparens mål Låt anroparen bestämma Throw/ raise exception Kasta / flagga ett undantag Den anropade metoden överlåter åt anroparen att genomföra lämplig åtgärd 57 58 Undantag En exception är ett objekt som signalerar ett undantag throw-satsen kastar ett undantag som kan fångas m h a en try-sats try { catch ( ) { finally { Satser där ett undantag kan kastas Undantaget som fångas Koden där ett undantag hanteras Koden för slutåtgärder (valfri) Flera undantag kan fångas och hanteras i en try-sats (valfri) 59