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 den kan göra Inkapsling Samarbete Gränssnitt 2
FÖ1-2:Klasser Beskriver en typ av objekt public class PacManBaddie { int color; Point position; boolean isvulnerable;... boolean caneat() { if (isvulnerable) { 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.
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.introduceyourself(); TestClass.nullify(c); c.introduceyourself(); // NullPointerException?! 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.
Statiska metoder & attribut Instansmetoder kommer åt både klass- och instansvariabler Klassmetoder kommer endast åt klassvariabler static 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
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
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, inom en instans Arv Överskuggning Skriva över funktioner Polymorfism Olika subklasser som kan behandlas som basklass Explicit typkonvertering final Abstrakta klasser och metoder 11
UML Beskrivning av en klass + public - private # protected ~ package private understruken static Italic abstrakt / derived Klassnamn Attribut Metoder 12
UML Beskrivning av relationer mellan klasser Association A använder en B Aggregation A har en B Komposition A äger en B OBS vag definition inom Java, undvik att använda Generalisering (arv) A ärver från B (A kan användas som en B) Realisering (interface) A implementerar B Beroende A är beroende av B Multiplicitet exempel: En A använder en eller flera B 13
UML Exempel: UML-beskrivning av Studentklasserna 14
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ångna i kursen Ordbok Lista Länkad Enkellänkad Dubbellänkad Cirkulär Array Stack Kö Träd Binära Sorterade Binärt sökträd Heap
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 left right Träd som ett fält: A B C D E F G H 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
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
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 implementation till prioritetskö Insättning Borttagning Skapa Representation 7 2 3 5 2 9 8 1 9 7 3 5 1 9 3 2 8 Komplexitet 7 3 5 9 8 7 3 5 8 7 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
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
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
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 Om övre och undre gräns är densamma 27
Tentamen 4 timmar En teoridel (penna och papper), ca 60% En praktisk del (dator), ca 40% Ej tillgång till internet, ni får relevant API som bilaga till tentamen om det behövs för uppgiften Inga övriga hjälpmedel Javas bibliotek (förutom java.lang) får ej användas om ej uttryckligen angivet i uppgiften 28
Tentamen(2) Kopiera givna filer till ditt konto Skapa ett nytt projekt för varje uppgift Skicka frågor till kursledare via studentklienten MEN.. Skicka inte in uppgifter, lämna kvar dessa på kontot när du är klar Markera tydligt vilket projekt som är svaret, om det finns fler Lämna in de teoretiska svaren på papper Båda bonus-uppgifterna => full poäng på en praktisk deluppgift, värd 3 poäng Har man fått bonusen går det ej att få extra poäng genom att göra uppgiften ändå Gäller bara den uppkommande tentan, i direkt anslutning till kursen Undantag: Om en extra tenta sätts in för de som inte fick plats, gäller bonusen istället bara där för de studenterna 29
Tentamen(3) Två tillfällen 2015-03-19 kl 08-12 2015-03-19 kl 14-18 Insläpp börjar 30 minuter innan tentamens början Tenta-anmälan stänger 2015-03-09, på måndag! 30
Lycka till på tentan! 31