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

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

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

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 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

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

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

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

Objektorienterad Programmering (TDDC77)

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

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

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

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

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

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

Subtyping och variance. Objekt-orienterad programmering och design Alex Gerdes, 2018

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

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

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

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

F4. programmeringsteknik och Matlab

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

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

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

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Classes och Interfaces, Objects och References, Initialization

Lösningar för tenta 2 DAT043,

DAT043 - föreläsning 8

Länkade strukturer, parametriserade typer och undantag

Kopiering av objekt i Java

Tentamen Programmering fortsättningskurs DIT950

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

DAT043 - Föreläsning 7

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

DAT043 Objektorienterad Programmering

Objektorienterad Programmering (TDDC77)

TENTAMEN: Objektorienterad programmering. Läs detta! Börja varje hel uppgift på ett nytt blad. Skriv inte i tesen.

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

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

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

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

Generisk klass med typparameter Inre klass - ListIterator

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

Objektorienterad Programmering (TDDC77)

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

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

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

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

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

OOP Objekt-orienterad programmering

TDDC77 Objektorienterad Programmering

Tentamen ID1004 Objektorienterad programmering May 29, 2012

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

Objektorienterad Programmering (TDDC77)

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

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

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

Föreläsning 10. ADT:er och datastrukturer

Generics och polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

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

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

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

Datastrukturer. föreläsning 3. Stacks 1

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Generics och polymorfism. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Föreläsning 3. Stack

Föreläsning 2 Datastrukturer (DAT037)

Sammansatta datatyper Generics: Parametrisk polymorfism

E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition. Johan Leitet. Kurs: 1dv403 Webbteknik I

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

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 4 Innehåll

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

Listor. Koffman & Wolfgang kapitel 2, avsnitt , och 2.9

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Programmering A. Johan Eliasson

Begreppet subtyp/supertyp i Java. Mera om generik. Generik och arv. Generik och arv. Innehåll

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Algoritmer. Två gränssnitt

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Objektorienterad Programmering (TDDC77)

Lösningsförslag till omtentamen 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

Klasshierarkier - repetition

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

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

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

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

TDA550 Objektorienterad programmering, fortsättningskurs. Föreläsning 1. Introduktion Variabler och typer

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

Länkade strukturer. (del 2)

Repetition av OOP- och Javabegrepp

Transkript:

TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Interface Generiska klasser Undantag 1

Gränssnitt Återbesök hos ordboken public abstract class Dictionary { public abstract boolean lookup(string key); public class MyDictionaryImpl extends Dictionary {... Hmm, en klass helt utan implementerade metoder blir ju bara ett gränssnitt. Finns det inte något elegantare sätt att visa det? Självklart! 2

Gränssnitt(2) Interface och arv, jämförelse public abstract class Dictionary { public abstract boolean lookup(string key); public class MyDictionaryImpl extends Dictionary {... public interface Dictionary { public boolean lookup(string key); public class MyDictionaryImpl implements Dictionary {... 3

Gränssnitt(3) Definition: Interface är en referenstyp, precis som klass, som endast kan innehålla konstanter och metoddeklarationer (och nästlade typer) Egenskaper för interfaces Samtliga metoder är per automatik public abstract -> Programmeraren slipper skriva detta -> Går ej att definiera som protected eller private Samtliga variabler är per automatik public static final (konstanter) En klass som implementerar ett interface måste implementera alla dess metoder (eller lämna dem abstract) En klass kan implementera flera olika interfaces samtidigt 4

Gränssnitt(4) Med andra ord: Ett interface X är att betrakta som ett certifikat. För att en klass skall få kalla sig för en X så måste den uppfylla alla krav i X. På detta sätt kan andra (klasser) med säkerhet räkna med att implementation existerar. Andra interface som vi redan känner till Iterator. För att få kalla sig för en iterator, måste man tillhandahålla metoderna hasnext(), next() och remove(). Iterable. För att få kalla sig för en iterable måste man tillhandahålla metoden iterator(), som skapar en iterator. 5

Gränssnitt(5) Exempel: public interface CertifiedDiver { int maximumdepth = 30; void knowfactsaboutbends(); void emptymask(); void flushregulator(); public static final public abstract public class DivingStudent extends Student implements CertifiedDiver { public class CoastGuard implements CertifiedDiver, BoatDriver { CertifiedDiver billy = new DivingStudent(); CertifiedDiver emma = new CoastGuard(); emma.emptymask(); 6

Gränssnitt(6) Student +study() +solveproblem() <<interface>> CertifiedDiver +knowfactsaboutbends() <<interface>> BoatDriver. DivingStudent CoastGuard CertifiedDiver instructor = hireinstructorfromclub(); instructor.knowfactsaboutbends(); Vi vet inte om vi hyrde in en dykarstudent eller kustbevakare. Det spelar dock ingen roll. 7

Problem: Harry har implementerat en länkad lista för datatypen heltal. public class MyListNode { int data; MyListNode next; Han vill nu använda samma implementation igen, men den här gången för strängar. Hur löses uppgiften utan att kopiera all kod för varje framtida nytt behov? 8

Alla klasser ärver ju från en Object En lösning: Använd arv och spara alla datatyper som en Object. public class MyListNode { Object data; MyListNode next; Men de primitiva datatyperna (int, char, double) är ju inte klasser! Det finns det motsvarande klasser: Integer, Character, Double. (s.k. Wrapperklasser ). Fungerar, men kräver en explicit castning (typomvandling) varje gång ett element ska hämtas // and what if the data really isn t a String.. String data = (String) list.remove(); => Leder ofta till många specialfall 9

Generiska klasser Bättre lösning: Gör klassen generisk! Mall för klasser Exakta utseendet definieras först när klassen används Vi kan tänka på det som en parameter till klassen public class MyListNode<KlassNamn> { KlassNamn data; MyListNode<KlassNamn> next;... MyListNode<String> node = new MyListNode<String>();... String text = node.data; // no casting needed, data is already String 10

Generiska klasser(2) Fördelar: Explicit castning undviks Bättre möjlighet för kompilatorn att kontrollera typer -> Fler buggar upptäcks vid kompilering Tydligare kod Blir ett sätt att tvinga programmeraren att göra rätt Nytt i Java 7: ArrayList<Human> myhumanarr = new ArrayList<Human>(); <>(); 11 Kompilatorn infererar (gissar) vilken datatyp som gäller.

Generiska klasser(3) Ibland uppstår behov av att begränsa vilka typer en generisk klass kan instantieras med (tydlighet, en viss sak måste göras med datan) public class MyListNode<KlassNamn extends Animal> {... KlassNamn kan här bara anta formen av Animal och dess subklasser Vi kan nu anropa Animal-specifika metoder på variabler av typen KlassNamn MyListNode<Cat> node = new MyListNode<Cat>(); // Ok // NO. String is not a subclass of Animal! MyListNode<String> node = new MyListNode<String>(); 12

Jokertecken (en. wildcards) Ibland vet man inte exakt typ, men behöver ändå ange en // Ugly code public void printallanimals(list theanimals) { for (Object o : theanimals) { // Cast Object to Animal before use ((Animal)o).presentYourself(); // Beautiful! public void printallanimals(list<? extends Animal> theanimals) { for (Animal a : theanimals) { a.presentyourself(); 13

Jokertecken (en. wildcards)(2) Exempel: generisk klass och jokertecken public interface List<E> { public void addall(collection<? extends E> c); public boolean containsall(collection<?> c); Samma resultat som <? extends Object> 14

Undantag (en. Exception) Ett typiskt ohanterat undantag 15

Undantag (en. Exception)(2) public boolean lookup(string pnr) throws PnrNotFoundException { for (int i = 0; i < last; ++i) { if (contents[i].getkey().equals(key)) { return contents[i].getvalue(); throw new PnrNotFoundException(key);... Dictionary dictionary = new MyDictionaryImpl(); try { boolean passed = dictionary.lookup( 880725-9505 ); catch (PnrNotFoundException e) { System.out.println(e.getMessage()); 16 Notera: Undantag av typen RuntimeException kräver inte throws, try-catch

Undantag (en. Exception)(3) Anger något som hänt som ligger utanför normal körning Felaktig indata Körfel Hårdvarufel I Java är undantag objekt 17

Undantag (en. Exception)(4) Definiera undantag public class PnrNotFoundException extends Exception { private String pnr; public PnrNotFoundException(String pnr) { super( Could not find the person number + pnr); this.pnr = pnr; public String getpnr() { return pnr; 18

Undantag (en. Exception)(5) Fånga undantag KiaCeedSW erikskia = new KiaCeedSW(Gray, 2010, KPY038 ); try { erikskia.drive(); // Ah, smooth ride. What could go wrong? catch (NoFuelException e) { erikskia.refill(); catch (EngineOverHeatedException e) { erikskia.stop(); throw e; finally { erikskia.getoutofthecar(); Körs oavsettt om undantag uppstått eller ej 19

Undantag (en. Exception)(5) Hur man inte bör göra KiaCeedSW erikskia = new KiaCeedSW(Gray, 2010, KPY038 ); try { erikskia.drive(); // Ah, smooth ride. What could go wrong? catch (Exception e) { // Pretend like nothing happened. Fångar precis alla undantag! Fånga bara de undantag du förväntar dig! 20