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

Relevanta dokument
UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Felsökning. Översikt. Felsökning (debugging) Kodstandard. Kommentarer. Kommentarer. Praktiska råd

Introduktion till Java

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

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

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

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

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

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

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

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

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

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

Objektorienterad Programmering (TDDC77)

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

Laboration 1 - Grunderna för OOP i Java

OOP Objekt-orienterad programmering

Föreläsning 14. Filhantering

Lösningar för tenta 2 DAT043,

Introduktion till Java

Testning av program. Verklig modell för programutveckling

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

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

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

Fördjupad Java. Undantagshantering. Fel

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

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

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

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

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

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

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

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77)

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)

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

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

OOP Objekt-orienterad programmering

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

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

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

Tentamen ID1004 Objektorienterad programmering May 29, 2012

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

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

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

Repetition av OOP- och Javabegrepp

F4. programmeringsteknik och Matlab

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

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

Classes och Interfaces, Objects och References, Initialization

Objektorienterad programmering i Java

Klassen javax.swing.timer

Konstruktion av klasser med klasser

Repetition av OOP- och Javabegrepp

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

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

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

TDDD78 Viktiga begrepp, del 2

Arv (Inheritance) Multipelt arv finns i verkligheten. Överskuggning, metodbindning. Läsanvisning: ! Arv! Object, instanceof! Relationer!

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Objektorienterad Programmering (TDDC77)

Föreläsning 13 Innehåll

Översikt. Programmering tillämpningar och datastrukturer. Vad kursen täcker. Lärare. Rekommenderad litteratur. Kursmål 729G58 (HKGBB7)

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

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

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

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

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

Outline. Objektorienterad Programmering (TDDC77) Laborationsserie del två. Vad händer under HT2. Introduktion HT2 UML.

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

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

DAT043 - Föreläsning 7

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

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

Kopiering av objekt i Java

Föreläsning 3. Stack

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 7/ Exempel: Implementation av Schackpjäser.

Klasshierarkier - repetition

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

OOP Objekt-orienterad programmering

TENTAMEN OOP

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

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

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

Länkade strukturer. (del 2)

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

DAT043 Objektorienterad Programmering

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

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Föreläsning 2. Länkad lista och iterator

Parallellism, återblick

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Tentamen ID1004 Objektorienterad programmering April 7, 2015

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

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

/* * * Lösningsförslag tentamen DIT950 * Datum * */ /* * -1 - */ För samtliga gäller,se föreläsningsanteckningar.

Transkript:

Översikt Felsökning, UML Typomvandling Felsökning Unified Modeling Language (UML) Abstrakta klasser, interface Multipel ärvning Programmering tillämpningar och datastrukturer 2 Java starkt typat Variabler kan inte förändra sin typ under körning Typomvandling (casting) Automatisk typomvandling (ökad noggr) int i = 3; double d = i; Åt andra hållet: manuell typomvandling double d = 4.8; int i = (int) d; // explicit casting (i = 4) Programmering tillämpningar och datastrukturer 3 Programmering tillämpningar och datastrukturer 4 Exempelhierarki Stark typning Object Object Fågel Fågel Kompilatorn kollar alltid om ett uttryck (eller anrop) är kompatibel med variabelns typ En variabel kan dock under körning komma att referera till subklass Fågel fågel = new Pingvin(); // fungerar bra: automatisk upcast Rovfågel Rovfågel Duva Duva Pingvin pingvin = fågel; // får kompilatorfel Pingvin Pingvin Falk Falk Kompilerar inte trots att fågel faktiskt refererar till ett objekt av typen Pingvin Programmering tillämpningar och datastrukturer 5 Programmering tillämpningar och datastrukturer 6

Typomvandling (casting) Typomvandling (downcast) Fågel[] minafåglar = new Fågel[5]; minafåglar[0] = new Pingvin(); minafåglar[1] = new Pingvin(); for (i = 0; i<minafåglar.size(); i++) { minafåglar[i].putsafracken(); // initiering Vi måste explicit typomvandla så att kompilatorn ser att typen är rätt vid anropet Kompilatorfel! Inte definierad för Fågel Programmering tillämpningar och datastrukturer 7 Programmering tillämpningar och datastrukturer 8 Typomvandling (casting) Typomvandling (casting) Fågel[] minafåglar = new Fågel[5]; minafåglar[0] = new Pingvin(); // initiering minafåglar[1] = new Pingvin(); for (i = 0; i<minafåglar.size(); i++) { Pingvin p = minafåglar[i]; p.putsafracken(); Nu är kompilatorn nöjd Kan ge körfel om vi råkar omvandla Fågel till Pingvin! Programmering tillämpningar och datastrukturer 9 Fågel[] minafåglar = new Fågel[5]; minafåglar[0] = new Fågel(); // initiering minafåglar[1] = new Pingvin(); for (i = 0; i<minafåglar.size(); i++) { if minafåglar[i] instanceof Pingvin { Pingvin p = (Pingvin) minafåglar[i]; p.putsafracken(); Programmering tillämpningar och datastrukturer 10 Bra stöd för felsökning i Eclipse Felsökning och debuggning Debug perspective Variables Show logical structure Tasks-fliken Expressions Watch Brakepoints TODO-stöd Programmering tillämpningar och datastrukturer 12

Programfel Exempel på logiskt fel Syntaktiska fel Upptäcks av kompilatorn Fel under körning (exceptions) Upptäcks när programmet kraschar Logiska fel Upptäcks kanske aldrig! Leder kanske inte till krasch, utan till konstigt beteende Ex. avslutar loop efter ett varv Programmering tillämpningar och datastrukturer 13 public boolean containselement(el el, MyList lista) { int i = 0; while (i<lista.size()) { if (lista.get(i)==el) { return true; else { i = i + 1; return false; Programmering tillämpningar och datastrukturer 14 Exempel på logiskt fel public boolean containselement(el el, MyList lista) { int i = 0; while (i<lista.size()) { if (lista.get(i)==el) { return true; else { i = i + 1; return false; Programmering tillämpningar och datastrukturer 15 Undantag (exceptions) Bearbetningen stoppas Fel under körning JVM skapar ett exception-objekt Info om typ av fel Sträng-meddelande Var felet uppstod Kedjan av anrop som ledde hit (stack trace) Variabelbindningar i det ögonblick felet uppstod Exeptions Exceptions genereras genom throw else { throw new NoSuchElementException(); Programmering tillämpningar och datastrukturer 17 Programmering tillämpningar och datastrukturer 18

Typer av exceptions Checked (utanför din kontroll) Beror på yttre omständigheter File not found Unexpected end of file (EOF) IO (t.ex. fel vid inmatning) Unchecked (ofta självförvållat) Mildare programmeringsfel Index out of bounds Totalkrasch Out of memory Exceptions Checked (tom fil, IO-fel, inmatningsfel) Måste hanteras av programmeraren Unchecked (null pointer, index out of bounds) Behöver inte hanteras Unchecked (out of memory) Bör inte hanteras! Ytterligare körning av programmet kan förvärra läget Programmering tillämpningar och datastrukturer 19 Programmering tillämpningar och datastrukturer 20 Hantering av exceptions Try catch try { // fråga efter och läs in ålder från inputfönster catch(ioexception ex) { System.err.println( Inmatningsfel: + ex); ex.printstacktrace(system.out); ålder = DEFAULT_ÅLDER; Multipla catch try { // fråga efter och läs in filnamn catch(filenotfoundexception ex) { catch(ioexception ex) { Programmering tillämpningar och datastrukturer 21 Programmering tillämpningar och datastrukturer 22 Exceptions-hierarkin Mer om catch Error Throwable Exception Hierarki av catch-klausuler i anropskedjan AssertionError VirtualMachineError OutOfMemoryError RunTimeException IOException ArithmeticException EOFException IllegalArgumentException FileNotfoundException NumberFormatException IndexOutOfBoundsException Ska helst fånga upp felet där orsaken finns Störst chans att kunna åtgärda problemet där det uppstod Ex. anrop av metod med argument utanför tillåtet intervall Bäst att hantera fel hos anroparen ArrayIndexOutOfBoundsException NullPointerException Programmering tillämpningar och datastrukturer 23 Programmering tillämpningar och datastrukturer 24

Throws Throw Kanske felet orsakades högre upp i anropshierarkin? Throws: sätt att låta någon annan (t.ex anroparen till anroparen) hantera en exception public void initieradata() { try { ;.läsdata(); catch (EOFxception ex) { ex.printstacktrace(); catch (IOException ex) { System.err.println(... ); public void läsdata throws IOException, EOFException { Programmering tillämpningar och datastrukturer 25 public void lägginnamn(string namn) { if (!rättformat(namn)) { throw new IllegalArgumentException(<meddelande>); // annars fortsätt exekvera Ett eget undantag genereras Programmering tillämpningar och datastrukturer 26 UML Unified Modeling Language (UML) 12 olika diagramtyper, bl.a. Klassdiagram Sekvensdiagram Anropsflödet Användningsfall Programmering tillämpningar och datastrukturer 28 Relationer mellan klasser Är en (arv, inheritance) Känner till (association) Är ett aggregat av (aggregation) Noder i en lista Namn i en e-telefonkatalog Är en sammansättning av (composition) Obligatoriska delar Flygplan måste ha vingar Har inre (nästlad) klass (enclosure) Relationer M:M (1.. 1../0../) Många till många Ex. Ipod - låtar 1:M (1 1../0../) Ett till många Ex. ränta - konton 1:1 (1 1) Ett till ett Ex. student personnummer Programmering tillämpningar och datastrukturer 29 Programmering tillämpningar och datastrukturer 30

Association Association A innehåller referens till ett objekt av typ B a. Kan vara variabel deklarerad i A b. Kan vara parameter i en metod hos A I UML: Om fall a. kan rollen ex.vis. sättas till variabelnamnet Programmering tillämpningar och datastrukturer 31 Programmering tillämpningar och datastrukturer 32 Association (via variabel) public class BankKonto { private static double räntesats; private double saldo; private Kund kontoinnehavare; public double skickasaldobesked() { skrivtill(kontoinnehavare, saldo); Objekt av den här typen har koll på/tillgång till objekt av den här typen Association (via parameter) public class BankKonto { private static double räntesats; private double saldo; Objekt av den här typen har koll på objekt av den här typen public double skickasaldobesked(kund kontoinnehavare) { skrivtill(kontoinnehavare, saldo); Programmering tillämpningar och datastrukturer 33 Programmering tillämpningar och datastrukturer 34 A är ett aggregerat av B:n Lös sammansättning Ofta i form av lista, array, etc. Delarna kommer och går, och samma del kan tillhöra flera helheter Ex. noder Ex. färger (color) Delarna kan existera självständigt utan aggregatet Ofta många till många relation Kontor aggregat av Enheter public class Kontor { // Olika avdelningar på kontoret Enhet[] avdelningar = { new Enhet( fakturor"), new Enhet( order"), ; public Kontor() { // konstruktor Programmering tillämpningar och datastrukturer 35 Programmering tillämpningar och datastrukturer 36

Kontor aggregat av Enheter Består av (sammansättning av) Delarna lever och dör med helheten, dvs. meningslöst att ha delarna när helheten är borta Ex. flygplansvingar Delen kan endast tillhöra en helhet Ex. punkt tillhör en geometrisk form Programmering tillämpningar och datastrukturer 37 Programmering tillämpningar och datastrukturer 38 Dator består av minne, Dator består av minne public class Dator { Minne minne; CPU cpu; public Dator() { // konstuktor Programmering tillämpningar och datastrukturer 39 Programmering tillämpningar och datastrukturer 40 Nästlade klasser (klass i klass) Nästlade klasser public class MyList { private MyNode first; private MyNode last; private int size; private class MyNode { private MyNode previous; private MyNode next; private Object contents; Programmering tillämpningar och datastrukturer 41 Programmering tillämpningar och datastrukturer 42

Sekvensdiagram Sekvensdiagram Visar informationsflöde i pgm:et Vertikal tidsaxel Fokus på följd av händelser Inte exakt timing (men det går också) Visar hur objekt skapas Korta vertikala aktiveringslinjer för olika objekt (fet linje längs tidslinjen) Visar hur länge objektet är aktivt Bearbetar ett meddelande just då Meddelande skickas Svar returneras Programmering tillämpningar och datastrukturer 43 Programmering tillämpningar och datastrukturer 44 Exempel: Djur Sekvensdiagram Djur public static void main(string[] args) { Djur[] alladjur = new Djur[2]; int i; TestaDjur new alladjur kurre vilma new alladjur[0] = new Katt("Kurre"); alladjur[1] = new Hund("Vilma"); new i = 0; while(i < alladjur.length) { alladjur[i].presenteradig(); i = i + 1; tid Message1 presenteradig presenteradig Programmering tillämpningar och datastrukturer 45 Programmering tillämpningar och datastrukturer 46 Användningsfall (use cases) Användningsfall (use cases) Visar hur användare och yttre entiteter (ex.vis. andra system) interagerar med programmet Sätta övre gräns Uppdatera in/ut-balans Används vid analys av användarkrav Utgångspunkt för senare systemtest Test att systemkomponenterna fungerar tillsammans Test att systemet fungerar tillsammans med andra system som kunden kör Huvudansvarig chef Börsmäklare Analysera risk «uses» «uses» Sätta pris Få igenom affär Revisor Värdera Säljare Programmering tillämpningar och datastrukturer 47 Programmering tillämpningar och datastrukturer 48

Paket Visar beroenden mellan paket java.util Abstrakta klasser, interfacer MyList MyLib Programmering tillämpningar och datastrukturer 49 Abstrakta klasser presenteradig() Innehåller en del odefinierade (dvs. abstrakta metoder) Kan inte instansieras P.g.a. att kod fattas Kan dock ärvas av andra klasser Programmering tillämpningar och datastrukturer 51 public static void main(string[] args) { Djur[] alladjur = new Djur[3]; int i; alladjur[0] = new Hund( Laban"); alladjur[1] = new Katt( Kurre"); alladjur[2] = new Katt( Morris"); i = 0; while(i < alladjur.length) { alladjur[i].presenteradig(); i = i + 1; Anropas aldrig för Djur, men måste finnas i Djur (annars kompilatorfel) Programmering tillämpningar och datastrukturer 52 Abstrakta klasser Vill inte definiera när jag vet att koden aldrig kommer att utföras Det är de specifika djurarterna (subklasserna) som vet bäst hur de ska presentera sig, så låt definitionen ligga endast i subklasserna men, måste finnas för att möjliggöra generellt anrop Djur som abstrakt klass public abstract class Djur { private String namn; private int födelseår; private static int ålder; private static int nuvarandeår = 2005; public Djur(String namn, int ålder) { this.namn = namn; Djur.ålder = ålder; //födelseår = nuvarandeår - ålder; public abstract void presenteradig(); // defineras inte Programmering tillämpningar och datastrukturer 53 Programmering tillämpningar och datastrukturer 54

Interface Interface Alla metoder är abstrakta Finns inga definitioner i klassen Kan inte instansieras Kan inte heller ärvas Finns ingen kod att ärva Kan implementeras av andra klasser All metoder måste implementeras av klassen Kontrakt om implementeringen av ett visst protokoll Ex.vis. mellan Java:s skapare och APIprogrammerare Mellan programmeringsteam som är ansvariga för olika delar av ett system public MyList List implements List{ Programmering tillämpningar och datastrukturer 55 Programmering tillämpningar och datastrukturer 56 Interface Adapters Specificerar signatur hos ett antal metoder Signatur = namn + parametrar Explicit krav på att den klass som implementerar interfacet inkluderar alla specifierade metoder Annars får man kompilatorfel Abstrakt klass som ger grundläggande implementation av interfacet Programmeraren behöver bara överskugga enstaka metoder Resten kan ärvas från adaptern Programmering tillämpningar och datastrukturer 57 Programmering tillämpningar och datastrukturer 58 Inget multipelt arv i Java Multipelt arv? Om en klass hade ärvt från flera superklasser Problem Antag att samma variabel eller instansmetod i både klasserna Ex. klasserna Pingvin och Falk har var sitt namn, varsitt sätt att ta sig fram Vilken av dessa ska ärvas av gemensam subklass? Programmering tillämpningar och datastrukturer 60

Java Hade velat ha Tillåter inte multipel ärvning Men, finns sätt att implementera detta m.h.a. interfaces Klasser kan implementera multipla interfaces Löser samtidigt problemet med vilka variabler och metoder som ska ärvas Du anger själv vilka Programmering tillämpningar och datastrukturer 61 Programmering tillämpningar och datastrukturer 62 Multipel ärvning via interface Måste kod skrivas två gånger? StudentInterface LärareInterface StudentInterface LärareInterface Student Kursass Lärare Student Kursass Lärare Programmering tillämpningar och datastrukturer 63 Programmering tillämpningar och datastrukturer 64 public class Kursass { Student student; Lärare lärare; public Kursass(String namn, int arbetstimmar) { student = new Student(namn, ); lärare = new Lärare(arbetstimmar,...); public int hämtaarbetstimmar() { return lärare.hämtaarbetstimmar(); Delegering StudentInterface Delegering LärareInterface Student 1 1 Kursass Lärare 1 1 Programmering tillämpningar och datastrukturer 65 Programmering tillämpningar och datastrukturer 66