Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
2013-02-27 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 2013-02-27 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; } } } Klass Beskrivs av Instantierar Objekt 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 2013-02-27 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 2013-02-27 Statiska metoder & attribut Klassmetoder • Instansmetoder kommer åt static både klass- och instansvariabler • Klassmetoder kommer endast åt klassvariabler • En instansvariabel hör till en specifik instans • En klassvariabel delas mellan alla instanser Klassvariabler Klass Beskrivs av Instantierar Objekt Dessutom: Instansmetoder • 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 • Har just fyllt nio • Gillar att lösa problem med en väl skriven programmeringsalgoritm • Gillar huvudbonader och att gå ut på rast 8 4 2013-02-27 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 2013-02-27 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 2013-02-27 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 2013-02-27 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 15 Välj den lösning som är mest effektiv i just ditt fall 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 2013-02-27 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 ABCDE F G H 17 right 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 2013-02-27 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 20 Givet att trädet är väl balanserat (ej fallet ovan) blir söktiden O(logn) 10 2013-02-27 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ö 1 2 • • • • Insättning Borttagning Skapa Representation 3 7 3 8 5 9 7 1 2 • Komplexitet 3 8 5 5 9 9 7 5 8 5 8 3 9 3 7 2 7 8 21 9 Sortering • Allmänt • Vi har studerat O(n2) och O(nlog(n)) • O(n2)-algoritmer kan vara bra i vissa fall • Selectionsort • Alltid O(n2) – alltid dålig • Insertionsort • Bästa fall O(n), värsta fall O(n2) • Bra på små arrayer (<50) eller där data är nästan sorterad • Lätt att implementera 22 11 2013-02-27 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(n2), O(n1.5), O(n1.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 2013-02-27 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 25 L (tredje minsta finns någonstans här) E G 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 2013-02-27 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 2013-02-27 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