Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Begreber og Redskaber 11. Plan for idag Lidt afrunding: Collections Framework i Java Noget om oversættere og sprog Evaluering Sidste gang øvelser før.

Lignende præsentationer


Præsentationer af emnet: "Begreber og Redskaber 11. Plan for idag Lidt afrunding: Collections Framework i Java Noget om oversættere og sprog Evaluering Sidste gang øvelser før."— Præsentationens transcript:

1 Begreber og Redskaber 11

2 Plan for idag Lidt afrunding: Collections Framework i Java Noget om oversættere og sprog Evaluering Sidste gang øvelser før eksamen. Repetitionsgang 27. maj Eksamen 2. juni

3 Collections i Java En ramme til at arbejde med søgning og sortering i datastrukturer. Krav: Objekter skal kunne sammenlignes. Datastrukturer: Lister, mængder, maps Operationer: søgning, sortering, mængde- operationer, min, max, gennemløb,..

4 Sammenligning interface Comparable public int compareTo(Object o) 0 større f.eks class Person implements Comparable{ String navn; public int compareTo(Object o){ return navn.compareTo(((Person) o).navn); } Person(String navn){this.navn=navn;} public String toString(){return navn;} }

5 Datastrukturer Collection –List (indicering, rækkefølge) –Mængde ( Set ) (unikke elementer) –(alternativ til Vector ) Map –Nøgle-værdi par –(alternativ til HashTable ) Collections, Arrays –Statiske standard metoder

6 List List lst = new ArrayList(); // eller List lst = new LinkedList(); lst.add("D");lst.add("B");lst.add("A");lst.add("C"); System.out.println(lst); Collections.sort(lst); System.out.println(lst); Collections.reverse(lst); System.out.println(lst); Collections.shuffle(lst); System.out.println(lst); // [D, B, A, C] // [A, B, C, D] // [D, C, B, A] // [B, A, D, C]

7 Interface List,Set, Map er interfaces Kan implementeres på mange måder med forskellig effektivitet afhængig af brug – tabeller, hægtede lister,rød-sorte træer, hashing, mm. Anvendelsen uafhængig af implementation og algoritmer.

8 Tabel som liste Person[] ps ={ new Person("Ham"), new Person("Hende"), new Person("Den anden"), new Person("En anden") }; List l = Arrays.asList(ps); p(l); Collections.sort(l);p(l); Collections.reverse(l);p(l); Collections.shuffle(l);p(l);

9 Uddata Tabel: [Ham, Hende, Den anden, En anden] Sort: [Den anden, En anden, Ham, Hende] Reverse: [Hende, Ham, En anden, Den anden] Shuffle: [En anden, Ham, Hende, Den anden]

10 Operationer på lister public interface List extends Collection Object get(int index); Object set(int index, Object element); void add(int index, Object element); Object remove(int index); int indexOf(Object o); int lastIndexOf(Object o); List subList(int from, int to); Object[] toArray();

11 Flere operationer Kopiering af liste new ArrayList(Collection c); new LinkedList(Collection c); f.eks. List lst = new ArrayList(l); Liste konkatenering abstract boolean addAll(Collection c); f.eks. lst.addAll(l)

12 Flere sorteringer Sorter efter andre sammenligninger: class NavnLen implements Comparator{ public int compare(Object o1,Object o2){ Person p1 = (Person) o1; Person p2 = (Person) o2; return p1.navn.length()-p2.navn.length(); }} //f.eks cpr nummer, fornavn, efternavn,.. Collections.sort(l,new NavnLen());

13 Mængder public interface Set { int size(); boolean isEmpty(); boolean contains(Object element); boolean add(Object element); boolean remove(Object element); Iterator iterator(); boolean containsAll(Collection c); boolean addAll(Collection c); boolean removeAll(Collection c); boolean retainAll(Collection c); void clear();

14 Mængdeopertioner Nye kopier – new HashSet(Collection c) – new TreeSet(Collection c) TreeSet er repræsenteret som en sorteret mængde Mulighed for udtrække delmængder: headSet(toObj), tailSet(fromObj), subSet(fromObj,toObj)

15 Mængde operationer Set s1 = new HashSet(), s2= new HashSet(); for(int i=0;i<10;i+=2)s1.add(new Integer(i)); for(int i=0;i<10;i+=3)s2.add(new Integer(i)); System.out.println(s1+" "+s2); Set union = new HashSet(s1); union.addAll(s2); System.out.println(union); Set intersection = new HashSet(s1); intersection.retainAll(s2); System.out.println(intersection); Set difference = new HashSet(s1); difference.removeAll(s2); System.out.println(difference);

16 Mængde operationer //Set s1 = new HashSet(), s2= new HashSet(); [8, 6, 4, 2, 0] [9, 6, 3, 0] [9, 8, 6, 4, 3, 2, 0] [6, 0] [8, 4, 2] //Set s1 = new TreeSet(), s2= new TreeSet(); [0, 2, 4, 6, 8] [0, 3, 6, 9] [0, 2, 3, 4, 6, 8, 9] [0, 6] [2, 4, 8]

17 class Collections Object max(Collection coll) Object min(Collection coll) copy(List dest, List src) List nCopies(int n, Object o) reverse(List l) shuffle(List list) Set singleton(Object o) sort(List list) sort(List list, Comparator c) int binarySearch(List list, Object key)

18 Class Arrays List asList(Object[] a) int binarySearch(int[] a, int key) int binarySearch(Object[] a, Object key) fill(int[] a, int val) fill(Object[] a, Object val) sort(int[] a) sort(Object[] a) sort(Object[] a, Comparator c)

19 Og mere.. Iteration gør det muligt at ændre struktur under gennemløb (modsat Enumeration) –next, hasNext, remove asList gør at tabellen kan bruges som liste. Ændres listen så ændres tabellen også

20 Map: HashMap, TreeMap public interface Map { Object put(Object key, Object value); Object get(Object key); Object remove(Object key); boolean containsKey(Object key); boolean containsValue(Object value); int size(); boolean isEmpty(); // Bulk Operations void putAll(Map t); void clear(); // Collection Views public Set keySet(); public Collection values(); public Set entrySet();

21 Map Map mp= new TreeMap(); mp.put("Mads","Mads Rosendahl"); mp.put("Karl","Karl Børgesen"); System.out.println(mp); mp.put("Mads"+"","Rosendahl, Mads"); System.out.println(mp); System.out.println(mp.get("Karl")); System.out.println(mp.keySet()); System.out.println(mp.values()); // {Karl=Karl Børgesen, Mads=Mads Rosendahl} // {Karl=Karl Børgesen, Mads=Rosendahl, Mads} // Karl Børgesen // [Karl, Mads] // [Karl Børgesen, Rosendahl, Mads]

22 Lidt om oversættere og sprog Lidt historie Noget om oversættere Noget om analyse af programmeringssprog Mulige udvidelser af Java

23 Historie - oversættere 1944 von Neumann programmer i maskinens lager 1945 PlankalkülKonrad Zuse 1946 JohniacJohn von Neumann 1948 EdsacWilkes et al. 1950 Assemblersamler et hovedprogram med delrutiner 1951 order codesWilkes, Wheeler Gill 1951 ”assembler”Wilkes, Wheeler Gill 1952 A-0-compilerGrace Hopper 1954 ”compiler”Hopper, Wilkes 1954 Fortran Backus et al. 1957 Fortran I Backus et al. 1960 Algol 60 Naur et al. 1962 makroer Makro assemblere

24 Programmeringssprog Ada Maskinkode Assembler Fortran Cobol 1958 1960 1962 1964 1966 1968 1970 1972 Algol 60 PL/I Algol W Algol 68 Pascal CPL BCPL B C Modula 2 Simula C++

25 Simula Simula: (1968) Klasser, nedarvning, overskrivning Parameteroverførsel: navn, værdi, reference Blokstruktureret – klasser i klasser Ikke: overlæsning

26 C++ C++: (1986) Klasser, strukturerede typer, simple typer Pointere (adresser) til obj, strukturer, proc. Templates, operator overloading Multipel nedarvning Globale variable og metoder Både proceduralt og OO sprog

27 Oversætterstruktur leksikalsk analyse tegnfølge følge af ``tokens'' syntaksanalyse parsetræ oversættelse mellemkode el. assembler maskinkode optimering assembler bytekode JVM

28 Optimering "inlining" (udfoldning) af metodekald. Normalt kun muligt hvis metoderne er " final ". Flytte konstante udtryk ud af løkker. Forenkle operationer i løkker ved brug af induktionsvariable/løkkevariable. "hale-rekursion" hvis sidste operation i en metode er et rekursivt kald kan det erstattes med et hop til starten af metoden. Finde konstantudtryk.. let med static final.

29 Analyse af programmer De fleste "interessante" analyser af programmer er uafgørlige. Det er nødvendigt at gøre dem "konservative" (dvs. formulere dem så usikre resultater er acceptable). Analyse af hægter: hvilke "new"-kald kan en given hægtevariabel pege på. Kan en hægte pege på "null” ? Uafgørligt om en hægtevariable er "null". Tree t = null; if(x^3+y^3=z^3) t = new Tree(..); p(t) /* er t == "null"? */

30 Konservative analyser i Java I Java undersøges det om variable garanteret bliver initialiseret. Det undersøges også om al kode er tilgængelig. Begge undersøgelser er "konservative"

31 Køretids typekontrol i Java Typekontrol på oversættelsestidspunkt Begrebet kendes som "templates" i C++ Undgå en del polymorfi (Object) og konvertering class Stak{ private Object array... public Object pop(){...} public void push(Object o){...} } Stak s; s.push(Integer(3)) Integer I = (Integer) s.pop();

32 Parametriske typer Mulig udvidelse til Java: Parametriske typer class Stak(Type T){ private T array... public T pop(){...}; public void push(T t){...} } Stak(int) s = new Stak(int); s.push(3); int i = s.pop();

33 Algebraiske typer Hægter kan være "null" og det skal checkes på kørselstidspunktet abstract class Tree{} class Node extends Tree{...} class Branch extends Tree{Tree v; Tree h;...} Tree t = new Branch(new Node( ),new Node( )) Tree t1 = null; Tree t2 = new Branch(t1,t1);

34 Algebraiske typer Mulig udvidelse til Java: Datatype Tree = Node(int)| Branch(Tree,Tree) Tree t = Branch(Node(3),Node(4)) " null " er ikke en mulig værdi Test: switch (t) { case Node(int i) :.. case Branch(Tree t1,Tree t2) :.. } Kan kombineres med parametriske typer så datatypen kan parametriseres.


Download ppt "Begreber og Redskaber 11. Plan for idag Lidt afrunding: Collections Framework i Java Noget om oversættere og sprog Evaluering Sidste gang øvelser før."

Lignende præsentationer


Annoncer fra Google