TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 12 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Repetition Om tentamen 1 FÖ1-2: Objektorientering Attribut (en. field) Information/egenskaper Metoder (en. method) Vad kan den göra Inkapsling Samarbete Gränssnitt 2 1
FÖ1-2:Klasser Beskriver en typ av objekt class PacManBaddie { int color; Point position; boolean isblue;... boolean trytoeatme() { if (isblue) { return true; else { return false; Beskrivs av Klass Objekt Instantierar 3 Hitta felet! public class Human { int age; public void printage(){ System.out.println("Jag är " + age + " år gammal"); public static void main(string args[]){ Human human; human.printage(); Ett objekt måste instantieras innan det kan användas. 2
Objekt vs referens public class TestClass { public static void nullify(cat c){ c = null; public static void main(string[] args) { Cat c = new Cat( Kurre ); c.sayhello(); TestClass.nullify(c); c.sayhello(); //NullPointerException! (or is it..) 5 Statiska metoder & attribut Hitta felet! public class Human { int age = 0; static int sum(int a, int b){ return a + b; static void increaseage(int addition){ age = age + addition; public static void main(string args[]){ Human human = new Human(); human.increaseage(1); Statiska metoder kommer inte åt instansvariabler. 3
Statiska metoder & attribut Instansmetoder kommer åt static både klass- och instansvariabler Klassmetoder kommer endast åt klassvariabler Klassmetoder Klassvariabler Klass En instansvariabel hör till en specifik instans En klassvariabel delas mellan alla instanser Dessutom: Beskrivs av Instansmetoder Objekt Instantierar Man behöver (bör) inte gå via en instans för att komma åt en klassmetod/klassvariabel Instansvariabler 7 Arv Möt tre studenter Gymnasiestudenten Anna Högskolestudenten Harry Impulsive Ivar Gillar att lösa problem med penna och papper Har just läst TDDC30 Gillar att lösa problem med en väl skriven programmeringsalgoritm Har just fyllt nio Gillar huvudbonader och att gå ut på rast 8 4
Polymorfism poly-morf (grek.) = många former public class PolyMorphExample{ public static void morphschool(student student) { student.study(); student.solveproblem("what is the matrix"); Kan vara vilken subklass som helst Dröjer tills körningsögonblicket innan det bestäms Endast det som är deklarerat i Student är tillgängligt public static void main(string args[]){ Student anna = new HighSchoolStudent(); morphschool(anna); 9 Arv(2) Alla studenter bör kunna studera och lösa uppgifter Men den perfekte studenten är ett abstrakt koncept.. public abstract class Student { public void study(){ System.out.println("I am studying very hard."); // this method has to be implemented by concrete // students public abstract String solveproblem(string problem); 10 5
Objektorientering Objekt skapas med en klass som mall Vid skapandet anropas en konstruktor Objekt vs referens till objekt == och equals null refererar till inget objekt this refererar till objektet själv Arv Överskuggning Polymorfism Explicit typkonvertering final Abstrakta klasser och metoder 11 UML Beskrivning av en klass + public - private # protected ~ package / derived understruken static Italic abstrakt Klassnamn Attribut Metoder 12 6
UML Beskrivning av relationer mellan klasser Association Har en referens till Aggregation - äger en OBS vag definition, undvik att använda Komposition A består av B Generalisering (arv) A ärver från B A kan användas som en B Realisering (interface)-a implementerar B A kan användas som en B Beroende Multiplicitet exempel: A har minst en referens till B 13 UML Exempel: UML-beskrivning av Studentklasserna 14 7
Abstrakta Datatyper (ADT) Sammanfattning: ADT:er säger vad som ska göras För att bestämma hur det ska göras Välj datastruktur Konstruera algoritmer för ADT:ns operationer Samma ADT kan implementeras med Olika datastrukturer Olika algoritmer Välj den lösning som är mest effektiv i just ditt fall 15 ADT:er & datastrukturer genomgågna i kursen Ordbok Lista Länkad Enkellänkad Dubbellänkad Array Cirkulär Stack Kö Träd Binära Sorterade Binärt sökträd Heap 8
Träd Definition: Ett träd är en riktad acyklisk graf Består av noder & bågar Finns enn väg till varje nod Representation som länkar eller med ett fält Parent(optional) data A B C D E F G H left right 17 Några fler termer Fullt binärt träd: Samtliga noder har noll eller två barn Perfekt träd: Ett fullt träd med alla löv på samma djup Fullständigt binärt träd: Ett perfekt träd med skillnaden att den får sakna några av de högraste löven 18 9
Traversering Traversering: ett systematiskt sätt att besöka alla noder i ett träd Djupet-först Preorder, inorder, postorder Bredden-först Levelorder 19 = Delträd Binärt sökträd För varje nod gäller följande: Alla element till vänster är mindre än nodens värde Alla element till höger är större än nodens värde insert remove - - + - - - - + - - + - + - Givet att trädet är väl balanserat (ej fallet ovan) blir söktiden O(logn) 20 10
Heap En heap är ett fullständigt binärt träd h = log(n) För varje nod har dess förälder lika eller mindre nyckel => Den minsta nyckeln finns alltid i roten Används ofta som impl. till prioritetskö Insättning Borttagning Skapa Representation Komplexitet 7 3 5 7 2 3 9 5 8 2 9 7 8 3 1 5 9 8 7 3 7 5 1 9 3 2 8 5 8 21 9 Sortering Allmänt Vi har studerat O(n 2 ) och O(nlog(n)) O(n 2 )-algoritmer kan vara bra i vissa fall Selectionsort Alltid O(n 2 ) alltid dålig Insertionsort Bästa fall O(n), värsta fall O(n 2 ) Bra på små arrayer (<50) eller där data är nästan sorterad Lätt att implementera 22 11
Sortering(2) Shellsort Utnyttjar insertionsorts bra sidor och försöker undvika de dåliga Tänjer på insertionsorts gränser Svår att analysera, beror på vald lucksekvens O(n 2 ), O(n 1.5 ), O(n 1.33 ), O(nlog(n)) Mergesort Optimal algoritm: O(nlog(n)) Kräver minne O(n) Ideal för sortering på externt minne färre diskåtkomster Quicksort I medelfallet snabbaste sorteringsalgoritmen O(nlog(n)) Vanlig i klassbibliotek (börjar dock ersättas av t ex Timsort) Dålig i värstafallet, använd ej i realtidsapplikationer 23 Sortering(3) Heapsort Mycket snabb - O(nlog(n)) I praktiken långsammare än quicksort i medelfallet Bäst i värstafallet Bra för realtidsapplikationer! Countsort, Bucketsort Ej jämförande algoritmer Bra om nyckelmängden är liten och kan avbildas på heltal Snabbare än Quicksort och Heapsort O(n) Radixsort Bra när nycklarna kan delas in i delnycklar I övrigt som Bucketsort 24 12
Quickselect Välj pivot Partionera i tre delar L element mindre än pivot E element lika med pivot G element större än pivot Partionera igen med enn av partitionerna beroende på m L (tredje minsta finns någonstans här) E G 25 Komplexitetsteori En algoritm ska fungerar för indata av godtycklig storlek Beräkna exekveringstiden som en funktion av storleken på indata T(n) Fokusera på värstafallet Ibland även bästafallet, medelfallet, amorterad komplexitet Ignorera konstanta faktorer Analysen ska vara maskinoberoende Kraftfulla maskiner ökar hastigheten med en konstant Studera skalbarheten (asymptotiska beteendet) för stora problemstorleka Fokusera på dominerande faktor Konstant, logaritmisk, kvadratisk, kubisk, exponentiell, faktoriell, polynomisk Rumskomplexitet 26 13
Komplexitetsteori(2) for(int i = 0; i < data.length/3; i++){ System.out.println(data[i]); for(int i = 0; i < mylist.size(); i++){ int j = i + mylist.get(i); mylist.set(i,j); //replace element with j Ordo övre gräns Omega undre gräns Theta övre och undre gräns 27 Tentamen 4 timmar En teoridel (penna och papper) En praktisk del (dator) Ej tillgång till internet, ni får relevant API som bilaga till tentamen Inga övriga hjälpmedel Javas bibliotek (förutom java.lang) får ej användas om ej explicit uttryckt i uppgiften Möjlighet att anhålla om svar på vissa deluppgifter för att kunna lösa annan deluppgift (praktiska delen) Fyll i motsvarande blankett och lämna till tentavakt Får ej poäng för den deluppgiften 28 14
Tentamen(2) Kopiera givna filer till ditt konto Skapa ett nytt projekt för varje uppgift Skicka frågor till examinator via studentklienten MEN Skicka inte in uppgifter, lämna kvar dessa på kontot när du är klar 29 15