Datastrukturer och algoritmer

Relevanta dokument
Datastrukturer och algoritmer

Datastrukturer och algoritmer

Datastrukturer och algoritmer. Innehåll. Tabell. Tabell - exempel. Gränsyta till Tabell. Tabell. Modell. Hashtabell Relation, lexikon.

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

Datastrukturer och algoritmer

Innehåll. Mina målsättningar. Vad krävs för att nå dit? Obligatoriska uppgifter. Websajten. Datastrukturer och algoritmer

Introduktionsmöte Innehåll

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö

Föreläsning 14 Innehåll

Datastrukturer och algoritmer

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

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

Föreläsning 15: Repetition DVGA02

Datastrukturer och algoritmer

Objektorienterad programmering. Grundläggande begrepp

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

EDAA01 Programmeringsteknik - fördjupningskurs

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15

Datastrukturer och algoritmer

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

Prov i DAT 312: Algoritmer och datastrukturer för systemvetare

Innehåll. Föreläsning 10. Specifikation. Mängd. Specifikation. Konstruktion av mängd. Mängd Lexikon Hashtabell

729G75: Programmering och algoritmiskt tänkande. Tema 1, föreläsning 1 Jody Foo

Teoretisk del. Facit Tentamen TDDC (6)

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

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

Innehåll. F7: Tabell, hashtabell, relation & lexikon. Gränsyta till Tabell. Tabell. Tabell Hashtabell Relation Lexikon.

SKOLFS. beslutade den -- maj 2015.

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

729G75: Programmering och algoritmiskt tänkande. Tema 1. Föreläsning 1 Jody Foo

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

Classes och Interfaces, Objects och References, Initialization

Innehåll. Inblandade personer. ÿkurspresentation Inblandade personer Administration Målsättning Förkunskaper Kursutvärdering Upplägg Översikt

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Programmeringsteknik II

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

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

Facit Tentamen TDDC (7)

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

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

729G06 Föreläsning 1 Objektorienterad programmering

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

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

LÖSNINGSFÖRSLAG TENTAMEN PROGRAMMERING I ETT FUNKTIONELLT SPRÅK ML, 5P

Objektorienterad programmering, allmänt

Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha?

Tentamen, Algoritmer och datastrukturer

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

Objektorienterad programmering

Mer OOP. Variation i typ. Medlen repetition. Generiska klasser. Gränssnitt - Interface. Mer om klasser Några exempel UML

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

TDDC30/725G63. Objektorienterad programmering i Java, datastrukturer och algoritmer

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

Länkade strukturer, parametriserade typer och undantag

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

Datastrukturer. föreläsning 10. Maps 1

Seminarium 13 Innehåll

TDDC30 Programmering i Java, datastrukturer och algoritmer

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

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

Föreläsning 4 Datastrukturer (DAT037)

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18

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

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Tentamen TEN1 HI

Tentamen Datastrukturer (DAT036)

Imperativ programmering. Föreläsning 4

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 8 Om abstrakta datatyper och binära sökträd

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Dataabstraktion. TDDD73 Funktionell och imperativ programmering i Python Föreläsning 12. Peter Dalenius Institutionen för datavetenskap

Tentamen i Algoritmer & Datastrukturer i Java

Objekt-orienterad programmering och design. DIT953 Niklas Broberg, 2018

Objektorienterad programmering Föreläsning 8. Copyright Mahmud Al Hakim Agenda (halvdag)

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

TDDI16 Datastrukturer och algoritmer. Prioritetsköer, heapar, Union/Find

Sätt att skriva ut binärträd

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Specifikationer för tabellfunktionerna. Operationer på tabellen

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

Datastrukturer och algoritmer. Innehåll. Trie. Informell specifikation. Organisation av Trie. Föreläsning 13 Trie och Sökträd.

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

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

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

Datastrukturer, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5

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

Övningsuppgifter kapitel 8

Föreläsning 1 Datastrukturer (DAT037)

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Implementering av tabellen. Operationer på tabellen

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

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

Översikt. Programmering tillämpningar och datastrukturer. Vad kursen täcker. Lärare. Rekommenderad litteratur. Kursmål 729G58 (HKGBB7)

DAI2 (TIDAL) + I2 (TKIEK)

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

Översikt 5 delar. 1: Fysisk representation. Binär, oktal och hexadecimal representation

Programmering = modellering

Dataabstraktion. TDDD73 Funktionell och impterativ programmering i Python Föreläsning 12. Peter Dalenius Institutionen för datavetenskap

Föreläsning Datastrukturer (DAT036)

Transkript:

Innehåll Datastrukturer och algoritmer Föreläsning 14 Objektorientering Abstrakta datatyper Generella teorier 469 470 Java och C++ Programmeringsspråken C++ och java bygger båda på C. Förutom de grundläggande konstruktionerna i C så har man också lagt till begreppet objektorienterad programmering. Båda språken har också försökt förbättra en del C konstruktioner som ej har ansetts så bra. 471 Imperativa språk/oop Imperativa programmering Fokuserar på vad programmet gör, alltså algoritmerna. Delar upp den uppgift som programmet ska utföra i mindre steg, och de stegen blir moduler. Sen kan man dela upp stegen i ännu mindre steg, och så vidare tills stegen är så små och enkla att det blir lätt att skriva. Objektorienterade programmering Fokuserar på de data som programmet arbetar med. Tex enkla saker som tal och strängar, eller mer komplexa saker som ofta motsvarar objekt i verkligheten: personer, flygplan, kurser vid ett universitet. Varje sak kallas ett objekt, och varje typ av sak, till exempel "person" och "flygplan", kallas en klass. 472 Objektorientering Ett objekt är något som har: Tillstånd - egenskaper (ungefär variabler) Beteenden - vad det kan göra, eller utsättas för (ungefär funktioner). Identitet (vi kan skilja dem åt) Klasser Mallar för hur man skapar objekt. Inte helt olika struct i C, men definierar också de funktioner som kan använda sig av datat. Arv Hjälper till med återanvändning av kod Man utökar en redan befintlig klass eller förändrar beteenden hos den. 473 Syfte med objektorientering Att bidra till inkapsling; dvs endast de funktioner som behöver använda visst data skall ha tillgång till detta (jämför tex lokala/globala variabler i C) Samla data på ett sätt som liknar hur vi tänker på dem i verkligheten (utanför datorn) Öka kodåteranvändningen. Göra så att man slipper återuppfinna hjulet flera ggr. 474 1

Object vs. struct Ett behändigt namn på en instans av en struct är "objekt". I Java innehåller objekt även "funktioner" men i C ligger dessa funktioner utanför själva objektet. Tex (om g är graf objektet) i Java och C++: g.insertedge(1, 2, 3); I C: graph_insertedge(g, 1, 2, 3). I C är funktionens första parameter själva objektet, för att kunna koppla funktion till objekt, vilket sker mer eller mindre implicit med Javas och c++ syntax. 475 Arv och abstraktion 476 Arv Definiera gemensamma attribut och metoder en enda gång i en superklass Ärver dessa attribut och metoder till nya subklasser Lägg till specifika attribut och metoder i subklasserna Subklassen är en mer specifik version av superklassen Figure Square Triangle Circle 477 Polymorfism Innebär att man kan använda flera olika typer av objekt på samma sätt. Arv används för att visa vilka objekt som kan användas var. Om man låter klassen Fågel ärva klassen Djur, så innebär polymorfism att allt som man kan göra med ett djur, det kan man också göra med en fågel. Om vi redan har skrivit programkod som räknar eller sorterar djur, så kan vi använda samma programkod för att räkna eller sortera fåglar. 478 Innehåll Abstrakta datatyper Lista, Cell, Fält, Tabell, Stack, Kö, Träd (ordnade och binära), Graf, Mängd, Lexikon, Prioritetskö, Heap, Trie, Binärt sökträd, AVL-träd, B-tree, Relation Algoritmdesign Traversering, Sökning, Sortering, Maximalt flöde, Minimalt uppspännande träd, Kortaste vägen etc Tids- och rumskomplexitet Vad finns det för generella teorier? 479 Abstrakta datatyper Ett koncept för att kunna diskutera och jämföra olika typer av datastrukturer. Ligger på en hög abstraktionsnivå. Främst intresserad av struktur och organisation, inte implementation. Operationerna ger datatypen karaktär och specifikationen visar datatypens uttrycksfullhet. 480 2

Operationskategorier (l) Konstruktorer - skapar/bygger upp och returnerar ett objekt av aktuell ADT Grundkonstruktorer som saknar argument av den aktuella ADT:n Empty, Make, Create Vidareutvecklande konstruktorer som tar ett argument av den aktuella ADT:n List-Insert, Stack-Push Kombinerande konstruktorer som tar flera argument av den aktuella ADT:n Set-Union 481 Operationskategorier (2) Inspektorer - Undersöker ett objekts inre uppbyggnad på olika sätt Avläsning eller sondering av elementvärden eller strukturella förhållanden Inspect-value, Stack-Top, Table-Lookup, Set-Choose Test av olika extremfall av struktur och värden Binary-tree-has-left-child, Set-member-of Mätning av objekt Isempty, Has-value 482 Operationskategorier (3) Modifikatorer Ändrar ett objekt struktur och/eller elementvärden Insättning, borttagning, tilldelning omstrukturering Array-Set-Value, Table-Remove, Stack-Pop, Set-Insert Navigatorer Används för att ta fram ett objekts struktur Landmärken (kända positioner), lokala förflyttningar, traverseringar List-First, List-End, List-kext, Binary-tree-left-child Komparatorer jämför objekt av den aktuella ADTn med varandra Equal, Set-Subset 483 Uttrycksfullhet Abstrakt datatyp = objekt + konstruktion av gränsytan. Frågor att fundera kring vid skapande av ADT: Vilken är värdemängden? Vilka interna resp. externa egenskaper har objekten? Vad ska man göra med objekten? Specificera en gränsyta informellt och formellt. Överväga olika implementationsmöjligheter. Kan jag göra det jag vill kunna göra med objekten?? Uttrycksfullhet 484 Uttrycksfullhet Datatypsspecifikationen har två roller: Slå fast hur datatypen är beskaffad, vilka egenskaper den har. Fungerar som en regelsamling för användningen av datatypen. Specifikationens uttrycksfullhet kan mätas med tre begrepp Objektfullständighet Algoritmfullständighet Rik gränsyta 485 Objektfullständighet Är det svagaste kriteriet. Det ska vara möjligt att konstruera och skilja mellan alla objekt som anses höra till datatypen. Man ska kunna skilja på två objekt A och B med en sekvens av operationer I O l O 2 O n (n 0) (I = Inspektor, O = Operation) Om vi tittar på en tabell Empty, Insert och Max (största definierade tabellvärdet) är inte objektfullständigt. Kan inte skilja på två tabeller med samma max-värde. Empty, Insert och Lookup räcker! 486 3

Algoritmfullständighet (Expressive completeness) Starkare än (och implicerar) objektfullständighet. Man ska kunna implementera alla algoritmer i denna datatyp. Dvs allt som man kan göra med datatypen ska också gå att implementera utifrån specifikationens operatorer. Räcker att visa att man kan implementera ett test av likhet mellan två dataobjekt med hjälp av operationerna. Vill man veta varför: Läs artikeln (Kapur, Srivas Computability and implementability issues in abstract data types ). Alltså: Algoritmfullständighet = objektfullständighet + likhetstest Rik gränsyta (Expressive richness) Starkaste kriteriet, implicerar både objektfullständighet och algoritmfullständighet. Även om man har algoritmfullständighet så kan vissa algoritmer bli hopplöst ineffektiva. Krav: Man ska med hjälp av gränsytan kunna implementera speciella analysfunktioner som kan Ta fram all information som krävs ur ett dataobjekt för att sedan kunna rekonstruera objektet med enbart komposition av analysfunktionerna. De olika analysfunktionerna får varken innehålla iteration eller rekursion i sin definition. 487 488 Rik gränsyta-exempel Stack-specifikationen har en rik gränsyta. Isempty kan avgöra om stacken är Empty eller konstruerad som push(x, s) för något x och s. Top ger x och Pop ger s. För vilken stack som helst kan ändliga kompositioner av dessa analysfunktioner plocka ut vart och ett av elementen i stacken hitta strukturen, ordningen på dem utifrån detta kan stacken återskapas 489 Praktisk uttrycksfullhet Vi har teoretiska mått på uttrycksfullhet Objektfullständighet, algoritmfullständighet och rik gränsyta. Måste man uppfylla alla tre kraven? Ibland blir en rik gränsyta opraktisk, man saknar vissa operationer. Utskrifter, längdfunktioner eller kopieringsfunktioner tex. Hur skapar man en gränsyta? 490 Att utforma en gränsyta Man utgår från de operationer som bidrar till att ge ADTn sin speciella karaktär. Sedan applicerar man de teoretiska begreppen. Lägger till vissa operationer och tar bort andra. Målet är att operationerna Ger en objektfullständig gränsyta Är primitiva (kan inte delas upp i mindre operationer) Ger en algoritmfullständig gränsyta Är oberoende, kan inte ta bort en enda operation och ändå ha kvar en algoritmfullständig gränsyta. Detta ger en rätt stram yta med få operationer. 491 Fördelar med en stram gränsyta Utbytbarhet Man kan börja med enkla implementationer och sedan byta ut mot allt effektivare. Portabilitet Mindre problem att flytta ett program med få op. Integritet Mindre risk för att operationer läggs till som strider mot grundidén med ADTn. 492 4

Programspråksstöd för ADTs Många språk ger mycket litet eller inget stöd alls. Då krävs: Konventioner Namngivning Operationsval God dokumentation av olika val som görs. Disciplin Inte gå in och peta i interna strukturer 493 5