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

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

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, 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

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

Objektorienterad Programmering (TDDC77)

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

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

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

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

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 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

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

Lösningar för tenta 2 DAT043,

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

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

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

Länkade strukturer, parametriserade typer och undantag

DAT043 - Föreläsning 7

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

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

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

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

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

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

Generisk klass med typparameter Inre klass - ListIterator

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

OOP Objekt-orienterad programmering

DAT043 Objektorienterad Programmering

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

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

Kopiering av objekt i Java

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

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

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

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Imperativ programmering. Föreläsning 4

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)

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

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

Föreläsning 3. Stack

Tentamen Programmering fortsättningskurs DIT950

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

Datastrukturer. föreläsning 3. Stacks 1

Generiska konstruktioner. Kursbokens kapitel 13

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

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

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

DAT043 - föreläsning 8

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

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

OOP Objekt-orienterad programmering

Objektorienterad Programmering (TDDC77)

F4. programmeringsteknik och Matlab

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

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

Den som bara har en hammare tror att alla problem är spikar

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

Fördjupad Java. Undantagshantering. Fel

Föreläsning 15: Repetition DVGA02

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

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

Principles of subclasses. Objekt-orienterad programmering och design Alex Gerdes, 2018

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Repetition av OOP- och Javabegrepp

Classes och Interfaces, Objects och References, Initialization

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

Java-syntax (arv) Exempel: public class Crow extends Bird {... } Jämför med Lab 1: public class FirstApp extends Frame {... }

Objektorienterad programmering med Java, Generics

Algoritmer. Två gränssnitt

Repetition av OOP- och Javabegrepp

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

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

TDDC76 - Programmering och Datastrukturer

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

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Lösningsförslag till tentamen

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

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

Föreläsning 14 Innehåll

Programmering för språkteknologer II, HT2014. Rum

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

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

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

1 Comparator & Comparable

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

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

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

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

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

Föreläsning 3. Stack

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

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

Transkript:

TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, 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 bool lookup(string key); Hmm, en klass helt utan implementerade metoder blir ju bara ett gränssnitt. Finns det inte något elegantare sätt att visa det? JAJAMEN! 2 1

Gränssnitt(2) Interface och arv, jämförelse public abstract class Dictionary{ public abstract bool lookup(string key); public class MyDictionaryImpl extends Dictionary{... public interface Dictionary{ public bool lookup(string key); public class MyDictionaryImpl implements Dictionary{... 3 Gränssnitt(3) God programmeringssed Ett interface är att betrakta som ett kontrakt mellan implementeraren och användaren Interfacet lovar att för evigt supporta dess metoder och aldrig ändra sig Men jag vill förbättra mitt program, ju Lösning: Skapa ett nytt interface som ärver från det gamla Bryt inte kontraktet! 4 2

Gränssnitt(4) 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 konstanter är per automatik public final En klass som implementerar ett interface måste implementera alla dess metoder. 5 Gränssnitt(5) Exempel: public interface Eatable{ int BEINGEATENCOLOR = 0xFF3333; void eat(); public abstract 6 Tack till Daniel Persson för illustrationen 3

Problem: Harry har implementerat en ringbuffer med en cirkulärt länkad lista för datatypen heltal 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 ny datakod? 7 En lösning: Använd polymorfism och spara alla datatyper som en Object. Alla klasser är ju en Object public class MyCircularLinkedListNode{ Object data; MyCircularLinkedListNode next; 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) ringbuffer.remove(); 8 4

Generiska klasser Bättre lösning: Generiska klasser Mall för klasser Exakta utseendet definieras först när klassen används public class MyLinkedListNode<T>{ T data; MyLinkedListNode<T> next;... MyLinkedListNode<String> node =new MyLinkedListNode<String>();... String text = node.data; //no casting needed, data is already String 9 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 10 5

Generiska klasser(3) Ibland uppstår behov av att begränsa vilka typer en generisk klass kan instantieras med (tydlighet) public class MyLinkedListNode<T extends Animal>{... MyLinkedListNode kan nu bara spara Animal och dess subklasser MyLinkedListNode<Cat> node = new MyLinkedListNode<Cat>(); //ok //NO. String is not a subclass of Animal! MyLinkedListNode<String> node = new MyLinkedListNode<String>(); 11 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){ ((Animal)o).presentYourself(); /* Beautiful!*/ public void printallanimals(list<? extends Animal> theanimals){ for(animal a : theanimals){ a.presentyourself(); 12 6

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> 13 Undantag (en. Exception) Anger något som hänt som ligger utanför normal körning Felaktig indata Körfel Hårdvarufel I Java är undantag objekt 14 7

Undantag (en. Exception)(2) Definiera undantag public class WordNotFoundException extends Exception{ private String word; public WordNotFoundException(String word){ super( Could not find the word + word); this.word = word; public String getword(){ return word; 15 Undantag (en. Exception)(3) Använda undantag public E lookup(string key) throws WordNotFoundException{ for(int i = 0; i < last; i++){ if(contents[i].getkey().equals(key)){ return contents[i].getvalue(); throw new WordNotFoundException(key);... Dictionary<String> dictionary = new ArrayDictionary<String>(); try{ String translation = dictionary.lookup( Hej ); catch(wordnotfoundexception e){ System.out.println(e.getMessage()); Notera: Undantag av typen RuntimeException kräver inte throws, try, catch 16 8

Undantag (en. Exception)(4) Fånga undantag Dictionary<String> dictionary = new ArrayDictionary<String>(); Car anderscar = new Car(); try{ anderscar.drive(); catch(nofuelexception e1){ anderscar.refill(); catch(engineoverheatedexception e2){ anderscar.stop(); throw e2; 17 9