F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

Relevanta dokument
F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

Föreläsning REPETITION & EXTENTA

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

Tentamen ID1004 Objektorienterad programmering December 15, 2012

OOP Objekt-orienterad programmering

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

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

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

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

Föreläsning 9 Innehåll

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Länkade strukturer. (del 2)

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Algoritmer. Två gränssnitt

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

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

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

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

Föreläsning 2 Datastrukturer (DAT037)

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

Länkade strukturer, parametriserade typer och undantag

OOP Objekt-orienterad programmering

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

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

Kopiering av objekt i Java

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

Subtyping, co- och contra-variance. Objekt-orienterad programmering och design Alex Gerdes, 2016

Classes och Interfaces, Objects och References, Initialization

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

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

Objektorienterad programmering. Grundläggande begrepp

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

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

Rekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254

Repetition av OOP- och Javabegrepp

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

Klasshierarkier - repetition

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

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

Föreläsning 13 Innehåll

Repetition av OOP- och Javabegrepp

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

Introduktion till arv

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

Föreläsning 4 Innehåll

Laboration 1 - Grunderna för OOP i Java

Konstruktion av klasser med klasser

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

Föreläsning 11 Datastrukturer (DAT037)

Exempeltenta GruDat 2002/2003

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Föreläsning 9. Sortering

Objektorienterad programmering i Java

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

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

Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 12 Innehåll

F7 - Arrayer. ID1004 Objektorienterad programmering Fredrik Kilander

Objektorienterad programmering med Java, Generics

Sätt att skriva ut binärträd

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

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

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

Objektsamlingar i Java

DAT043 - föreläsning 8

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

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Sortering. Föreläsning 12 Innehåll. Sortering i Java. Sortering i Java Exempel. Sortering

Föreläsning 6 Innehåll. Rekursion. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursiv problemlösning. Rekursion. Rekursivt tänkande:

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

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

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

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

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

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

Föreläsning 12 Innehåll

Föreläsning 15: Repetition DVGA02

Objektorienterad programmering Föreläsning 12. Copyright Mahmud Al Hakim

TDDD78, TDDE30, 729A Typhierarkier del 3 När och hur vill vi använda dem? Några Best Practices

Sökning och sortering

Teoretisk del. Facit Tentamen TDDC (6)

Objektorienterad programmering Föreläsning 10. Copyright Mahmud Al Hakim Sorteringsalgoritmer

Objektorienterad Programmering (TDDC77)

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

Laboration 13, Arrayer och objekt

Föreläsning 11 Innehåll

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

Sökning i ordnad lista. Sökning och sortering. Sökning med vaktpost i oordnad lista

Arrayer. results

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

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

Transkript:

F9 - Polymorfism ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se

Polymorfism - flerformighet Vi vet vad metoden heter (signaturen) Men vi vet inte vid anropet exakt vilken metod som faktiskt kommer att köras Detta beror på vilken klass objektet tillhör Object o =... ; // Något objekt String str1 = o.tostring();

Polymorfism - flerformighet Polymorfism genom arv Subklasser ärver och åsidosätter metoder Polymorfism genom interface Subklasser har metoder med samma namn (signatur) men eget beteende

Polymorfism genom arv Vi betraktar ett objekt som lite mer generellt t ex: Boxer är en Hund t ex: Circle är en Shape Hund Shape Boxer Tax Circle Rectangle

Polymorfism genom arv En variabel av typen Shape kan referera till både Circle och Rectangle Shape myshape = null;... myshape = new Circle();... myshape = new Rectangle(); Shape Circle Rectangle

Polymorfism genom arv Med en referens till en generellare typ kan typens subklasser behandlas uniformt Vi kan använda samma kod, oavsett om det är en Circle, Rectangle, Triangle, etc. Men, bara använda det som syns i den generella typen

Polymorfism genom arv Alla Shape har en egen version av draw() Vilken som anropas beror på instansens klass Shape myshape = null;... myshape = new Circle(); myshape.draw();... myshape = new Rectangle(); myshape.draw(); Shape draw() draw() Circle Rectangle draw()

Polymorfism med interface En klass kan implementera ett (eller flera) interface I och med deklarationen så måste alla metoder i interfacet vara med class Person implements Comparable {... public int compareto(person p) {... }... } class Car implements Comparable {... public int compareto(car c) {... }... }

Polymorfism med interface Med en referens till en interface-typ kan alla implementerande klasser behandlas uniformt Vi kan använda samma kod för alla Men, bara använda det som syns i interfacet void sort(comparable [] ar) {... if (ar[i].compareto(ar[j]) < 0) { } }...

Kort om sortering Valet av sorteringsmetod beror på: Vilka implementationer som finns Hur mycket data som ska sorteras Går det att sortera i minnet eller måste man ut på disk? Hur ofta måste det sorteras? Hur lång tid får det ta?

Bubble sort Byt plats på intilliggande element tills dess att inga byten har gjorts O(n 2 ) Pinsamt ineffektiv

Selection sort För varje element e i listan, finn det minsta elementet g i resten av listan, och om g<e byt plats på e och g O(n 2 ) I praktiken effektivare än bubble sort. Endast för små datamängder pga O(n 2 )

Insertion sort Tag ut varje element ur listan och stoppa in det på rätt plats i den sorterade dellistan som växer från början O(n 2 ) Effektiv för korta listor (n<=10)

Quicksort Välj ett pivot-värde p (t ex det mittersta elementets värde) flytta alla element mindre än p till vänster om p, och element större än p till höger om p anropa Quicksort(vänster) anropa Quicksort(höger) O(n log n)

Sortering i Java Använd inbyggda rutiner java.util.arrays.sort(e []) java.util.collections.sort(list<t> list) Använd Collections (samlingar) som håller objekten sorterade, t ex: java.util.treeset java.util.treemap

Sökning Att hitta ett visst element i en datastruktur En oordnad datastruktur tvingar oss att inspektera alla element Ibland finns det bara ett rätt element Ibland räcker det att hitta det första Ibland vill man hitta alla matchande element Ibland finns inget matchande element

Linjär sökning alla träffar Titta i alla element List<Integer> indexof(int [] nums, int key) { ArrayList<Integer> hits = new ArrayList<Integer>(); } for (int i = 0; i < nums.length ; i++) { if (key == nums[i]) { hits.add(i); } } return hits; * * 5 17 11 13 13 14 Antal jämförelser: N, N = antal element att söka igenom

Linjär sökning första träffen Titta i alla element tills det blir träff int indexof(int [] nums, int key) { } for (int i = 0; i < nums.length ; i++) { if (key == nums[i]) { return i; } } return -1; * 5 17 11 13 13 14 Förväntat antal jämförelser: N/2 (funnen) N (ej funnen), N = antal element att söka igenom

Linjär sökning sorterad data Sluta söka när ingen träff kan finnas int indexof(int [] nums, int key) { } for (int i = 0; i < nums.length ; i++) { if (key < nums[i]) { continue; // För litet, nästa } else if (key == nums[i]) { return i; // Träff } else { return -1; // För stort, finns inte } * } return -1; 5 7 11 13 13 14 Förväntat antal jämförelser: N/2, N = antal element att söka igenom

Binärsökning sorterad data Halvera sökrymden vid varje jämförelse Sökt tal 11 i=3 Börja i mitten, i = N/2 9<11, ta större halvan 1 5 7 9 11 13 14 i=5 i = mitten 11<13, ta mindre halvan 1 5 7 9 11 13 14 i = mitten 11 == 11, träff! 1 5 7 9 i=4 11 13 14 N = 7 Antal jämförelser: log2(n), N = antal element att söka igenom

Binärsökning sorterad data java.util.collections.binarysearch(list, key) Nyckeln och elementen måste vara jämförbara med varandra Integer.compareTo(Integer) // Helt ok String.compareTo(String) // Helt ok Integer.compareTo(String) // Går inte! De måste vara ömsesidigt jämförbara (mutually comparable)

Designa för polymorfism Polymorfism kan ge generell kod Kod som kan användas till flera klasser underlättar återanvändning Onödiga detaljer och egenheter kapslas in Renare design och tydligare struktur... a consistent approach to inconsistent behaviour. Lewis & Loftus, 6th ed, pg 546

Designa för polymorfism Medvind: Enkla operationer och algoritmer Liknande egenskaper Motvind: Komplexa algoritmer, många specialfall Heterogenitet

Var finns polymorfismen? Olika typer av fordon rör sig på olika sätt

Var finns polymorfismen? Ett hotell behöver planera restaureringen av alla rum

Sammanfattning En polymorfisk referens kan referera till objekt av olika typ under programmets exekvering List list ArrayList LinkedList Vector

Sammanfattning Bindningen mellan anrop och metod sker först vid exekvering List list ArrayList LinkedList add(object o) add(object o) list.add(element) Vector add(object o)

Sammanfattning En referensvariabel kan referera till sin typ och alla typens subklasser Hund h Husdjur Hund Katt Tax t Tax Boxer Perser Huskatt

Sammanfattning Variabelns typ avgör vilka metoder som kan anropas; variabeln når bara sin dekl. typ Husdjur h Hund u Tax t Husdjur Hund Tax

Sammanfattning Objektets typ (inte variabelns) avgör vilken metod som kommer att anropas h = new Tax( Fido ); h.sound(); Husdjur h Husdjur sound() Hund sound() Katt sound() Tax Boxer Perser Huskatt Fido sound() sound() sound() sound()

Sammanfattning Interface är också giltiga datatyper En variabel kan deklareras som en interfacetyp Den kan då referera till alla objekt som implementerar interfacet Variabeln når bara metoder i interfacet List shuffle(list tlist) { }

Sammanfattning Polymorfism genom arv eller interface Sortera och sök med standardbiblioteket Polymorfism är en kraftfull mekanism, och kräver därför god design

polly vill ha sylt SLUT/THE END/FINE