Download præsentationen
Præsentation er lastning. Vent venligst
Offentliggjort afArthur Damgaard Redigeret for ca. et år siden
1
DAIMIIntroducerende Objektorienteret Programmering1 Collections og opremsning Nye typer collections, objektorienteret sweep
2
DAIMIIntroducerende Objektorienteret Programmering2 Collections Vi har set nogle få eksempler på klasser, hvis formål er at opbevare andre objekter Sequence(ordnet, kan opbevare heltal) Vector(ordnet, vilkårlige objekter) ”A collection is an object that represents a group of objects”
3
DAIMIIntroducerende Objektorienteret Programmering3 Collections i Java 1.1 Der findes et række forskellige typer collections med forskellige karakteristika og effektivitet: Lister, køer, deques, mængde, hashtabeller, ordbog… Java 1.1 bibliotekerne har en del af disse: java.util.Stack; java.util.Dictionary; java.util.Hashtable;
4
DAIMIIntroducerende Objektorienteret Programmering4 Collections i Java (1.)2 Java 2 har udvidet antallet og funktionaliteten af collections voldsomt, bl.a. kan de håndtere ordnede mængder (dersom de indeholdte objekter implementerer Comparable interfacet – og det gør alle klasser i Java, specielt String). Men... Det er også blevet temmelig kompliceret... Derfor – vil vi holde os til Java 1.1’s klasser, som stadig findes i Java (1.)2
5
DAIMIIntroducerende Objektorienteret Programmering5 Stack En stack er en collection, hvor du kun kan udtage og indsætte elementer fra ’toppen’, ligesom i et spil kort. Som ved Vector er den referencebaseret. Vector Stack Stack s = new Stack(); s.push( "Første" ); s.push( "Anden" ); s.push( "Tredje" ); s.push( "Fjerde" ); s.push( "Femte" ); for ( int i = 0; i < 5; i++ ) { System.out.println( s.pop() ); }
6
DAIMIIntroducerende Objektorienteret Programmering6 Dictionary Dictionary er en “ordbogs-collection”. Den gemmer et objekt (element) som indekseres ved hjælp af en nøgle (key). Disse danner dermed et (key,element) par. Eks: ( “Lecture”, “Forelæsning” ) ( “Student”, “Elev” ) ( “Class”, “Klasse” ) Denne type collection hedder ofte også en afbildning (eng: map), hvilket er Java 1.2 navnet: Map
7
DAIMIIntroducerende Objektorienteret Programmering7 Dictionary Både key og element kan være objekter af vilkårlige klassebaserede typer som implementere metoden equals. Metoder: Object put(Object key, Object element) Indsætter (key,element) parret i collectionen, returnerer null, hvis et element med identisk key ikke allerede findes i collectionen, ellers returneres det gamle element. Object get(Object key) Return element med givne key, ellers null
8
DAIMIIntroducerende Objektorienteret Programmering8 Dictionary Dictionary er en abstrakt klasse, dvs. der skal en nedarvet klasse til at udfylde den konkrete implementation. Java tilbyder en sådan, nemlig Hashtable. Vi vil ikke gå i detaljer med denne type collection, blot vise brugen.
9
DAIMIIntroducerende Objektorienteret Programmering9 Dictionary eksempel Dictionary d = new Hashtable(); // Indsæt en række ord i vores ordbog d.put( "Java", "A hype programming language" ); d.put( "C++", "Industrial standard OO language - a better C" ); d.put( "Pascal", "Successful research language - good for teaching" ); d.put( "Basic", "Once king of personal microcomputers" ); d.put( "Fortran", "Oldest programming language, still widely used" ); d.put( "LISP", "Interpreted list processing language" ); // Opslag i ordbogen: System.out.println( "Opslag på Basic: "+d.get("Basic") ); System.out.println( "Opslag på C++: "+d.get("C++") ); System.out.println( "Opslag på C: "+d.get("C") );
10
DAIMIIntroducerende Objektorienteret Programmering10 Sweep Hvad nu hvis vi vil gennemløbe alle par i ordbogen? int i = 0; while ( i != d.size() ) { d.get( hvad????); i++; } En ordbog er ikke indekseret, derfor er der heller ikke nogen naturlig sweep-variabel...
11
DAIMIIntroducerende Objektorienteret Programmering11 Sweep analyse Analyse af et sweep:... i 0b.size() i = 0;... while ( i != b.size() ) { // behandl b.elementAt(i) i++; } // i == b.size() b: i er et index (altså en reference) til elementet under inspektion
12
DAIMIIntroducerende Objektorienteret Programmering12 Objektorienteret sweep startenslutningen i = starten ;... while ( ! i nået til slutningen ) { // behandl element udpeget af i lad i referere til næste element ; } // i == b.size() b: reference til inspicerede element i:
13
DAIMIIntroducerende Objektorienteret Programmering13 Opremsning Java’s “util” bibliotek indeholder en sådan objektorienteret opremser, en enumerator. (import java.util.Enumeration) En enumeration har to vigtige metoder: boolean hasMoreElements() true, hvis der er flere elementer tilbage at opremse Object nextElement() returnerer næste element fra collectionen
14
DAIMIIntroducerende Objektorienteret Programmering14 Enumeration objekt Javas collections indeholder en metode, der returnerer et enumerator objekt, denne hedder oftest: Enumeration elements(); returnerer en enumerator for denne collection og sætter denne til at pege på første element. (Dictionary har to: keys() og values())
15
DAIMIIntroducerende Objektorienteret Programmering15 Eksempel: Vector & Dictionary Enumeration e; Vector v = setupVector(); System.out.println ( "--- Vector opremsning ---" ); e = v.elements(); while ( e.hasMoreElements() ) { String s = (String) e.nextElement(); System.out.println( ">>>> " + s ); } Dictionary d = setupDictionary(); System.out.println ( "--- Dictionary opremsning ---" ); e = d.keys(); while ( e.hasMoreElements() ) { String s = (String) e.nextElement(); System.out.println( ">>>> " + s+ ","+d.get(s) ); } Pointen er her: Koden er stort set identisk trods det er vidt forskellige collections, der opremses i.
16
DAIMIIntroducerende Objektorienteret Programmering16 Opremsning af “tokens” En ofte forekommende problemstilling er at dele en streng op i logiske “bidder”, f.eks. at dele et afsnit op i sætninger, sætninger op i ord, osv. Java har en klasse, der kan dele og opremse en streng: StringTokenizer. StringTokenizer t = new StringTokenizer("Dette er en tekst."," "); while ( t.hasMoreTokens() ) { System.out.print( t.nextToken() + "-" ); } Resultat: Dette-er-en-tekst.
17
DAIMIIntroducerende Objektorienteret Programmering17 Java 1.2 – alligevel Java 1.1’s collections baserede sig på konkrete klasser. Java 1.2’s er baseret på interfaces og en række konkrete implementationer. Det interessante (som brugere) er interfaces: Vectormodsvares af List interfacet Dictionarymodsvares af Map interfacet Enumerationmodsvares af Iterator interfacet Setrepræsenterer en mængde (ej i Java 1.1)
18
DAIMIIntroducerende Objektorienteret Programmering18 Algoritmer List collections (f.eks. Vector) tilbyder nogle gode algoritmer: sort(List) - Sorts a list using a merge sort algorithm, which provides average-case performance comparable to a high-quality quicksort, guaranteed O(n*log n) performance (unlike quicksort), and stability (unlike quicksort). (A stable sort is one that does not reorder equal elements.) sort(List) binarySearch(List, Object) - Searches for an element in an ordered list using the binary search algorithm. binarySearch(List, Object) reverse(List) - Reverses the order of the elements in the a list. reverse(List) shuffle(List) - Randomly permutes the elements in a list. shuffle(List) o.a. Sortering kræver naturligvis en naturlig ordning af elementerne. Dette kan elementerne angive ved at implementere interfacet Comparable: public int compareTo(Object o)Object
19
DAIMIIntroducerende Objektorienteret Programmering19 Mere information Konsulter JavaDoc for java.util biblioteket Og kig på eksemplerne i Java projekterne til denne lektion.
Lignende præsentationer
© 2024 SlidePlayer.dk Inc.
All rights reserved.