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

Relevanta dokument
Objekt, Klasser, Paket m. m.

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

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Kopiering av objekt i Java

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

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

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

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

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

Modeller, Objekt och Klasser

Testning av program. Verklig modell för programutveckling

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!

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

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

Objektorientering: Lagring, räckvidd och livstid

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

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

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

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

Tentamen , Introduktion till Java, dtaa98, dtea53

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

Java, klasser, objekt (Skansholm: Kapitel 2)

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

Objektorienterad programmering D2

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

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

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

Imperativ programmering. Föreläsning 4

Tentamen ID1004 Objektorienterad programmering October 29, 2013

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

DAT043 - Föreläsning 7

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

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

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

Objektorienterad Programmering DAT043

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

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

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

Föreläsning 3-4 Innehåll

Lösningsförslag övning 2.

Enkla variabler kontra referensvariabel

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

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

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Lösningar för tenta 2 DAT043,

OOP Objekt-orienterad programmering

Föreläsning 8 - del 1: Objektorienterad programmering (forts.) - Exempel

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 (TDDC77)

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

5. En metod som anropar sig själv a) får inte förekomma i Java-program b) kallas destruktiv c) kallas iterativ d) kallas rekursiv 6. Vilka värden har

Objektorientering: Lagring och livstid

Laboration A Objektsamlingar

Repetition av OOP- och Javabegrepp

TENTAMEN OOP

Föreläsning REPETITION & EXTENTA

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

Generiska konstruktioner. Kursbokens kapitel 13

Laboration 3, uppgift En klass för en räknare

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

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Enum, mer om Arv, Abstrakta klasser, Polymorfism, Recursion! Förelasning 14!! TDA540 Objektorienterad Programmering!

Objektsamlingar i Java

Repetition av OOP- och Javabegrepp

TENTAMEN OOP

Laboration 1 - Grunderna för OOP i Java

Tentamen OOP

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

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

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

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

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

(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

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

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

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

OOP Objekt-orienterad programmering

Föreläsning 5-6 Innehåll

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

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

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

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

Ett objekt... Exempel: Om ni tittar er runt i föreläsningssalen ser in många olika fysiska föremål:

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.

Mer om klasser och objekt

Objektorienterad programutveckling, fk

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

Objekt och klasser - Introduktion

Tentamen ID1004 Objektorienterad programmering May 29, 2012

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

Föreläsning 6. Använd beskrivande namn

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

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

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

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

Transkript:

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

Gränssnitt igen För att kunna ändra på olika delar av programmet utan att andra delar påverkas använder man gränssnitt (variabler av gränssnittstyp) - Vi har talat om List (ArrayList, LinkedList) - Tänkbart är också att lägga ett gränssnitt mellan modellen och GUI - GUI:et använder bara metoder från gränssnittet - om vi vill ändra implementationen behöver inget ändras i GUI:et - Ger dessutom en bra sammanfattning av alla metoder i top-level klassen - Den generella idén med gränssnitt är att avgränsa programmet i separata delar som inte påverkar varnadra

Namngivning Ett oväntat problem när man programmerar är att hitta bra namn på allt (som förklarar vad saker står för) - Har man hittat ett bra namn vill man kunna använda detta på flera ställen (inte hitta på nya hela tiden ) - Synlighetsområden ger oss den möjligheten - Kan förekomma att man vill använda samma namn på metoder inom samma synlighetsområde (normalt inte tillåtet) - Dock,... tillåtet i Java om metoderna har olika parametrar (antal och/eller typer). Returtyp spelar ingen roll - Under kompileringen bestäms utifrån parametrarna vilken av metoderna (med samma namn) som skall köras - Detta kallas: Överlagring (overloading), olyckligtvis väldigt likt överskuggning (som ju är något helt annat)

Användning Överlagring Typiskt metoder som gör i princip samma sak men med olika antal och/eller typer på parametrar (options) Exempel String många indexof-varianter - int indexof(int ch) - int indexof(int ch, int fromindex) - int indexof(string str) - int indexof(string str, int fromindex) Exempel List 2 remove varianter - E remove(int index) (E är någon typ, List är generisk) - boolean remove(object o)

Instans och Klassvariabler En klassvariabel (static) är gemensam för alla objekt av typen - Anges med static vid deklarationen - Variabeln existerar i objektet som representerar klassen - Kan refereras från alla instanser Instansvariabel Objekt av typen MyClass j... i = 4 i = 1 i = 6 j... j... class MyClass { 8 j } Objekt som representerar MyClass int i static int j

Klassvariabler Användning av klassvariabler - Eftersom variabeln delas av alla kan vilket objekt som helst ändra värdet för alla andra (gör ett objekt fel drabbas alla andra) - En klassvariabel skall vara final. - d.v.s. ett fixt värde som kan användas på flera ställen i programmet - Kallas konstant (ett namn på ett värde) - Alla hårdkodade värden skall normalt ersättas med konstanter - Skrivs med stora bokstäver ( _ för sammansatta ord) // In MyClass, declare constant public static final int MY_CONSTANT = 42; // Access, no object needed, just class = MyClass.MY_CONSTANT;

Klassmetoder En klassmetod (static) är gemensam för alla objekt av typen - Anges med static vid deklarationen - Metoden existerar i objektet som representerar klassen - Kan refereras från alla instanser Objekt som representerar MyClass m()... class MyClass { Objekt av typen MyClass m()...... m()... static int m(){... } } Klassmetod CHALMERS TDA540

Instans och Klassmetoder En instansmetod, kan använda instansvariabler och klassvariabler - Instansmetod måste anropas på ett objekt, det objekt vars instansvariabler metoden (eventuellt) skall använda - Kan anropa andra instansmetoder eller klassmetoder - Kan använda this - Kan överlagras och överskuggas En klassmetod (static) kan bara använda klassvariabler - Anropas direkt på klassen (som klassvariabler) - Kan anropa andra klassmetoder (inte instansmetoder) - Kan inte använda this-referensen (this är ju det aktuella objektet, orimligt...) - Kan överlagras men inte överskuggas (finns inget objekt)

Användning av Klassmetoder Används då man inte behöver några instansvariabler för att utföra uppgiften - Motsvarar rena funktioner (som i matematik), indata -> utdata - T.ex. Math.sin(...) - Metoden main (den som anropas först av allt i alla Java program) måste vara static - medför att alla metoder som anropas från main måste vara static - Generellt om static: Mycket litet behov, undvik - Vi använder bara i main metoder som anropas från main och i våra testklasser... (more to come)

Programkvalitet Hur kan vi säkerställa kvaliteten på våra program? - Vi har märkt hur lätt det är att göra fel (och svårt att hitta fel) - Idealiskt vore om vi kunde bevisa att programmet är korrekt (bug-fritt) - Finns några principer vi kan/bör följa?

Programmeringsprinciper Principer finns... men sällan absoluta (som i Fysik t.ex). Mer av riktlinjer, rekommendationer - Allt som finns/görs skall finnas/göras på ett ställe (annars problem t.ex. vid ändringar). Ingen duplicerat kod - Allt skall ansvara för en sak (variabler, metoder klasser, ). Lättare att använda, förstå och förändra - Innebär: Små klasser med små metoder - Ingen redundant kod. Ju mer kod desto fler möjligheter till fel (extremt kompakt kod svårbegriplig, undvik) - Använd konstanter - Minska tillståndet (mer kommer)

Testning Testning är ett sätt att höja kvaliteten på våra program - Enhetstestning (unit tests), testa enskilda objekt i isolering - Integrationstestning (integration testing) testa några samverkande objekt (klasser) Hur utforma tester? - Tester bör vara automatiska. Ett musklick skall räcka för att köra alla tester (man skall inte behöva sitta och skriva in ) - En test skall avslutas med sant (testen passerade) eller falskt (det gick fel, något är fel) - Alla tester sparas, om något i programmet ändras kan alla testerna köras igen. Allt skall fungera som förut. - Testerna fungerar som dokumentation, de som arbetar med programmet förstår lättare hur saker är konstruerade

Testning i Kursen Finns avancerade metoder för testning - Vi förenklar - Testerna kommer att implementeras som metoder i en speciell testklass (namn: Test). Finns färdig mall. - I testklassen finns en main-metod, som anropar att antal testmetoder (som vi måste skriva) - Varje testmetod skapar objekt och anropar metoder på detta (dessa) - Sist i testmetoden anropar vi en (statisk, överlagrad) boolesk funktion som avgör om resultatet var korrekt (om ej undantag) - Varje test testar en eller ett par metoder på ett objekt (inte allt) - Kan behövas hjälp objekt (om testobjektet är kopplat) - Ge metoderna beskrivande (långa) namn, så förstår man vad de gör - Exempel: PigWithTest

Refaktorisera Att refaktorisera koden innebär att vi ger koden en bättre (begripligare) struktur - Allt skall fungera som tidigare - Exempel: Byta namn, dela upp metoder/klasser, slå ihop klasser, ändra kopplingar,... - Programmet blir bättre (för en programmerare, användaren märker inget) - IntelliJ kan göra en hel del av detta - Genom att vi har tester vågar vi göra ändringar av fungerande kod - vi kör alla tester efter varje förändring. Alla skall lyckas!

Formell Verifikation Formell verifikation används för att bevisa att program är korrekta*) - Mycket komplicerat (logisk bevis) - Vissa informella formella resonemang kan dock hjälpa till - Vi skall titta på invarianter och förvillkor - Vi förenklar och gör på vårt sätt (finns andra sätt (åsikter) ) - Exempel: scrabbleformalexception *) Vissa program lägger man väldigt stora resurser på att verkligen bevisa korrektheten, t.ex. mjukvara i raketer, flygplan

Tillstånd Ett objekt har tillstånd - Tillstånd = Mängden av alla värden för alla instansvariabler - Vissa tillstånd är inte giltiga, d.v.s då variablerna har dessa värden har något blivit fel - Ju färre tillstånd ett objekt kan ha desto färre otillåtna tillstånd d.v.s. minimera tillståndet, använd lokala variabler och final Alla tillstånd Giltiga tillstånd

Invariant En invariant är något som inte förändras - Invarianter skrivs som booleska uttryck - Uttrycket skall alltid vara sant (vad som än händer då vi kör programmet) - Skrivs som kommentar överst i klassen med en Java liknande syntax // Inv: path!= null public class NNN { private... path =...

Användning av Invarianter Vi använder invarianter för att ange vilka tillstånd som är giltiga för ett objekt (vilka värden som instansvariablerna inte får ha) - Vi måste kontrollera att invarianten är sann då objektet precis har skapats och att den är sann vad vi än gör (vilka metoder som än körs) - om så är objektet alltid i ett giltigt tillstånd - Exempel: ScrabbleFormalException

Förvillkor En del metoder kräver att vissa villkor är uppfylld om de skall exekveras korrekt, ett förvillkor (precondition) - Endast om förvillkoret är uppfyllt lovar metoden att utföra sitt uppdrag, om ej är resultatet odefinierat (metoden lovar ingenting) - Skrivs också som ett boolesk uttryck (i en metodkommentar ovanför metoden) - Exempel: TileBag, remove-metoden // Pre: tiles.size() > 0 public Tile remove() { if (tiles.size() > 0) { int i = r.nextint(tiles.size()); return tiles.remove(i); } else { return null; // Pre cond. failed } }

Undantag Ett typiskt programmeringsproblem är hur ett objekt skall bete sig då det inte kan utföra en uppgift - Utifrån invarianter och förvillkor kan vi identifiera problematiska situationer - Kan ev. undvikas - returnera ett värde som är omöjligt, t. ex. -1 eller null (måste kontrolleras efter anrop). Ibland svårt att hitta omöjligt värde - returnera sant eller falskt (boolean) om det gick bra respektive inte. - eventuellt generera att undantag

// Class Holder from Scrabble // Pre: tile!= null public boolean add(tile tile) { if( tile == null){ throw new IllegalArgumentException("Tile null"); } for (int i = 0; i < tiles.length; i++) { if (tiles[i] == null) { tiles[i] = tile; actualsize++; return true; } } return false; }} CHALMERS TDA540 Förvillkor och Undantag Utifrån förvillkoren lägger man in tester för metodens indata - Om indata bryter mot något förvillkor kan ett undantag genereras - Viss indata leder direkt till fel då man anropar något objekt i koden isf behöver man inte själv kasta ett undantag.

Rep: Undantag i Java I Java finns två sorters undantag, unchecked exceptions och checked exceptions Vid undantag skapas automatisk instanser av dessa klasser Subklasser

Rep: Undantag i Java, forts Checked exceptions används för situationer programmet måste hantera (t.ex. filen saknas ) - Checked exception måste fångas (hanteras), kontrolleras att så sker vid kompilering Unchecked exceptions används för fel som programmeraren kan göra (NullPointerException) - Kontrolleras inte vid kompilering - Unchecked fångas vanligen inte, har vi gjort fel så skall det smälla så snabbt och högt som möjligt (programmet skall krascha så att vi märker felet direkt)

Flöde Undantag Då en anropad metod är klar sker alltid ett återhopp till den rad där metoden anropades - Om vi däremot kastar ett undantag så ändras flödet - Programmet kommer att passera genom alla metodanrop för att slutligen nå main(), där programmet kommer att avbrytas med en felutskrift - Ett sätt att stoppa detta är att fånga undantaget. Kan ske i vilken metod som helst på vägen - Ofta låter man undantaget vandra hela vägen upp till GUI:et där man visar en dialogruta (fångar och visar)

try catch Används för att fånga exceptions - Aldrig lämna catch-grenen tom, då räknas undantaget som fångat men inget händer/syns