2003-11-07Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 3: Abstrakta datatyper Algebror Abstrakta datatyper Inkapsling och informationsmaskering.

Slides:



Advertisements
Liknande presentationer
Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Advertisements

© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 4.
1 Listor En sekvens värden av samma typ Nr 5. 2 Listor Sekvens av värden, element Variabelt antal Alla med samma typ Bara första elementet direkt åtkomligt.
Nya typer Konstruerare, selektorer och predikat Rekursiva datatyper
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 11: Funktionella språk Funktioner och variabler i matematiken Funktionella.
Abstrakta datatyper Moduler nr 12
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 4.
Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 10: Objektorientering Objektorientering och abstrakta datatyper Dynamisk bindning.
Polymorfism.
Välkommen Vahid Mosavat
Att programmera i språket Java
Föreläsning 2 Datalogi för E1 2D1343
Föreläsning 4 Python: Definiering av egna funktioner Parametrar
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
Datastrukturer och algoritmer Föreläsning 15. Datastrukturer och algoritmer VT08 Innehåll  Vi har tittat på  Abstrakta datatyper oLista, Cell, Fält,
i olika programmeringsspråk
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv får vänta)  Iden med klasser.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
1 Funktioner Nr 3 Funktionstyper, högre ordningens funktioner och polymorfism.
1 ITK:P1 Föreläsning 7 Algoritmer och datastrukturer DSV Marie Olsson.
Vektorer (klassen Vector) Sortering
Arv.
Programmeringsteknik för Media1 & K1
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 6: Semantik Statisk semantik Attributgrammatiker Dynamisk semantik Axiomatisk.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 10: Objektorientering Objektorientering och abstrakta datatyper Dynamisk bindning Singel mot multipelt.
Föreläsning 8 Arv och abstrakta klasser. Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen ( extends.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
Jonny Karlsson GRUNDKURS I PROGRAMMERING MED JAVA Föreläsning 9 ( ) INNEHÅLL: -Tabeller av klassobjekt -Användning av Java API specifikationen.
Riktade listor i C och Java Lösning till gruppövning 1.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 11: Funktionella språk Funktioner och variabler i matematiken Funktionella språk LISP, ML och.
1 Programmera med strängar nr 9 Tal till sträng Sträng till tal Grep Sträng till lista av ord.
Föreläsning 9 Gränssnitt. Super Super kan användas till anrop av en omdefinierad metod Super kan användas till anrop av konstruktorer i superklassen Super.
William Sandqvist C-programmering ID120V Stack och Kö William Sandqvist
För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.
Datastrukturer och algoritmer
F. Drewes, Inst. f. datavetenskap1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring.
Stack och Kö -Implementering -Tilllämpningar -- Kapitel 16, 11.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
F. Drewes, Inst. f. datavetenskap1 Föreläsning 2: Variabler och datatyper Variabler Bindning Typkontroll Några viktiga datatyper.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 9: Implementering av underprogram Aktiveringsposter Exekveringsstacken Implementera dynamisk räckvidd.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 12: -kalkylen allmänt om -kalkylen syntax semantik att programmera i -kalkylen.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 15: Parallella subrutiner Parallellitet Processer och trådar Semaforer, monitorer.
Lennart Edblom & Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 2: Variabler och datatyper Variabler Bindning Typkontroll Några viktiga datatyper.
ITM1 Kapitel 8 Datastrukturer Grundläggande datavetenskap, 4p Utgående från boken Computer Science av: J. Glenn Brookshear.
TILLÄMPAD DATALOGI (TILDA) Övningsgrupp 2 Marcus Hjelm
TILLÄMPAD DATALOGI (TILDA) Övning 1 Marcus Hjelm
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
F. Drewes, Inst. f. datavetenskap1 Föreläsning 5: Syntaxanalys (parsning) Syntaxanalysens mål Tillvägagångssätt och komplexitet Syntaxanalys.
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
Programmeringsteknik för K och Media
F. Drewes, Inst. f. datavetenskap1 Föreläsning 12: -kalkylen allmänt om -kalkylen syntax semantik att programmera i -kalkylen.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Gruppövning 0.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Funktionsmall template void myfunc(Type * arr, int n) { // kod; // objekt av typ Type kan deklareras.
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
1 Föreläsning 6 Repetition på metoder Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 4: Syntaxdefinition Formell syntaxdefinition Lexikalisk och kontextfri syntax.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 4.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 16.
OOP&M - teori1 OOPM del II– Föreläsning vecka Mer om ärvning.. Abstrakta klasser/metoder Gränssnitt/Interface klasser.
OOP&M - teori1 OOPM del II – Föreläsning vecka Abstrakta klasser/metoder igen Gränssnitt/Interface klasser igen tillämpat.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 13: Resolution Resolution i satslogiken Resolution i predikatlogiken.
Föreläsning 8: Exempel och problemlösning
Föreläsning 12: Exempel och problemlösning
Presentationens avskrift:

Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 3: Abstrakta datatyper Algebror Abstrakta datatyper Inkapsling och informationsmaskering Parametrisering

Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 2 Algebror Definition En algebra A är en tippel A = (D 1,…,D m, f 1,…,f n ) där varje D i är en mängd (kallad domän) och varje f j är en funktion f j mellan domäner (kallad operation), dvs f j :X 1  …  X k  Y där X 1,…,X k,Y  {D 1,…,D m }. Vilka sorters data vill vi kunna prata om? … Vad kan vi göra med dem? …

Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 3 Algebror mot program Tyvärr har program en mycket högre komplexitet. Varför? Ett av problemen: Andra delar i programmet kan utnyttja implementationsdetaljer som inte tillhör funktionaliteten. Ett program beskriver inte bara den abstrakta funktionaliteten utan i första hand – och i minsta detalj – hur den realiseras (= implementeras).  korrektheten beror på godtyckliga ”slumpmässiga” antaganden varje liten detalj kan påverka vilken som helst annan del av programmet

Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 4 Abstrakta datatyper Abstrakta datatyper (ADT:er) är ett försök att överföra algebror till programmeringen: Egenskaper hos data och operationer beskrivs abstrakt, dvs utan att lägga fast hur de implementeras Andra delar av programmet kan inte utnyttja implementationsdetaljer De här målen nås genom dataabstraktion Andra kan endast utnyttja de specificerade abstrakta egenskaperna (som inte förändras) istället för detaljer som beror på implementationen (och är tillfälliga)

Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 5 Inkapsling och informationsmaskering För att uppnå målen måste ADT:er uppfylla två villkor: Inkapsling Definitionen av en ADT specificerar dess namn och vilka operationer som finns i en enda syntaktisk enhet (dvs är inte utspridd över flera ställen). Andra programdelar kan referera till definitionen för att använda ADT:n. Informationsmaskering (”information hiding”) Den interna representationen av data är inte tillgänglig för andra programdelar.

Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 6 equations:isEmpty(empty) = true, isEmpty(push(s, e)) = false, pop(push(s, e)) = s,pop(empty) =  error , top(push(s, e)) = e,top(empty) =  error  ADT stack is elem + boolean + operations:empty:  stack push: stack x elem  stack, pop: stack  stack, top: stack  elem, isEmpty: stack  boolean Exempel på en formell specifikation Algebraisk specifikation av ADT:n stack

Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 7 Exempel: stack i Java import java.util.*; class stack { private Vector s = new Vector(); public void push(elem e) { s.addElement(e); } public void pop() { s.removeElementAt(s.size() - 1); } public elem top() { return s.lastElement(); } public boolean isEmpty() { return s.size() = 0; } }

Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 8 Parametriserade ADT:er Om en ADT bygger på andra, enklare ADT:er är det ofta önskvärt att kunna skapa olika instanser mha parametrar  stack(integer), stack(tree), stack(stack(tree)), …  sortedList(integer), sortedList(string), … …… Observera att de här parametrarna är datatyper! Problem: I vissa språk (t.ex. Java) är det inte möjligt att explicit skapa olika instanser  sortedList(integer) och sortedList(string) hålls inte isär

Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 9 Exempel: stack i ML exception EmptyStack abstype ‘a stack = Stack of ‘a list with val empty = Stack [] fun push (Stack s, e) = Stack (e::s) fun pop (Stack []) = raise EmptyStack | pop (Stack (_::xs)) = Stack xs fun top (Stack []) = raise EmptyStack | top (Stack (x::_)) = x fun isEmpty (Stack s) = s=[] end; val stack1 = push (empty, 1); > val stack1 = -:int stack val stack2 = push(push(empty,(1,”Otto”)),(2,”Olga”)); > val stack2 = -:(int*string)stack

Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 10 Exempel: MinStack i HASKELL module MinStack ( MinStack, empty, push, pop, top, isEmpty, smallest ) where newtype (Ord a) => MinStack a = StackOf [a] empty :: (Ord a) => MinStack a empty = StackOf [] push (StackOf xs) x = StackOf (x : xs) pop (StackOf (x:xs)) = StackOf xs top (StackOf (x:xs)) = x isEmpty (StackOf xs) = xs == [] smallest (StackOf (x:xs)) = getSmallest x xs getSmallest x [] = x getSmallest x (y:ys) | x < y = getSmallest x ys | otherwise = getSmallest y ys syns parametern ska ha en ordningsrelation `<` syns inte! iStack :: MinStack Integer sStack :: MinStack String

Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 11 ML:s modulbegrepp ML har ett ännu kraftfullare, generellare (och därmed svårbegripligt(?)) modulbegrepp: > Structures: paket med deklarationer > Signatures: typning av en struktur > Functors: parametriserade strukturer

Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 12 Exempel: stack i ML igen signature StackItem = sig type item val isequal: item -> item -> bool end; signature Stack = sig type item type stack exception EmptyStack val empty: stack val push: (stack * item) -> stack o.s.v end; functor MkStack(Item:StackItem):> Stack = struct type myitem = Item.item type stack = myitem list exception EmptyStack val empty = [] fun push (s,e) = e::s.....o.s.v end;

Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 13 Exempel: stack i ML igen (2) structure Pair:StackItem = struct type item = int * string fun isequal (i1,s1) (i1,s2) = i1=i2 andalso s1=s2 end; structure PairStack = MkStack(Pair); val mystack = PairStack.push (PairStack.empty, (3,”Haskell”));