Collections og opremsning Nye typer collections, objektorienteret sweep.

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
Advertisements

07 – Kort om OO Introduktion.
Perspektiverende Datalogi Internetalgoritmer MapReduce Gerth Stølting Brodal.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Datastrukturer og Collections Oversigt og forskel imellem Jave og.net Collections library Collection interfaces ArrayList IList interface Hashtable Hashtable.
Array vs. ArrayList. Arrays Et array er en struktureret metode til at gemme flere værdier af den samme datatype. Data’en i et array ligger op ad hinanden.
Grundlæggende programmering Efterår 2001
Arv Idéen i arv et at kunne genbruge gennem generalisering
GP5, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 5 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
NOEA/IT - FEN1 Typeparametisering/Genericity Generics i.NET 2 og C#
Begreber og Redskaber 5. Collections i Java 1.2 Framework: samling af datastrukturer og algoritmer som generelt værktøj. En ramme til at arbejde med søgning.
Forelæsning 3.1 Collections Javas for-each løkke
Delphi og C++ Builder C++ Builder. C++ Historie Sproget blev designet for AT&T af danskeren Bjarne Stoustrup En objektorienteret videreudvikling.
Lektion 7 Læsestof: Kopier fra Caranno
Fundamentale datastrukturer
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
FEN KbP/seminar2: design11 Kontraktbaseret programmering Seminar 2 Klassedesign – grundprincipper Eksempler: Stack Dictionary.
Forelæsning 5.1 Brug af klassen Collections og interfacet Comparable samt parametriserede typer Projektuge: Ants and Spiders / Lommeregner dIntProg,
Objekter og klasser Rasmus D. Lehrmann DM
FEN IntroJava AAU1 Loops og algoritmer Sweep – for-loop Søgning – while-loop.
10. Datastrukturer. 2 Nordjyllands Erhvervakademi Collections library Datastrukturer i.NET kaldes normalt Collections Findes i namespace System.Collections.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
FEN IntroJava AAU1 Endnu mere om Klasser og Objekter Mange til mange relationer Student-Course v3.
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
C#: Udtryk og metoder Kilde: Joe Hummel. 2 Nordjyllands Erhvervakademi – 2008 Indhold “With regards to programming statements and methods, C# offers what.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
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.
Forelæsning 7.1 – repetition
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
 Jens Bennedsen 2002Objektorienteret systemudvikling GRASP mønstre Basale ansvarsplaceringsregler.
DAIMIIntroducerende objektorienteret programmering4C.1 Systemdesign Design med flere klasser, En kaffeautomat.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
Checklister Comparable og Comparator. dIntProg, E08Checklister.2 Checkliste for Comparable Antagelse –vi har en liste med elementer af typen T: List lst;
DAIMIIntroducerende objektorienteret programmering4B.1 Typer og tilstand i Java Typer, tilstand, erklæring, variable, primitive datatyper, reference- og.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Henrik B. Christensen, 1999Introducerende objektorienteret programmering8B.1 Interfaces En ren kontrakt.
 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt.
DAIMIIntroducerende Objektorienteret Programmering1 Collections og opremsning Nye typer collections, objektorienteret sweep.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
 Henrik Bærbak, 2000Introducerende objektorienteret programmering11B.1 Destilleret UML Oversættelse fra UML til Java.
DAIMIIntroducerende objektorienteret programmering4B.1 Grundlæggende og Reference Typer i Java Typer, tilstand, erklæring, reference- og værdi semantik,
Interfaces Afkobling af programkomponenter (eksempel: Comparable)
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Collectionklasser Klassifikation og anvendelse. dIntProg, F08Collectionklasser.2 Samlinger af objekter Objektreferencer –for at holde fast i et objekt.
Interfaces – hvorfor, hvad og hvordan?.  Michael E. Caspersen 2003IOOPInterfaces.2 Oversigt Interfaces, hvorfor –Separering af specifikation (interface)
 Jens Bennedsen 2001Multimedie programmering10B.1 Interfaces En ren kontrakt.
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation,
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.1 Sweep-algoritmer Programmering med invarianter og uden kaniner.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.
DAIMI, AUIntroducerende objektorienteret programmering11A.1 Destilleret UML Oversættelse fra UML til Java.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.1 Sweep-algoritmer Programmering med invarianter og uden kaniner.
Containerklasser – klassifikation og brug.  Michael E. Caspersen, 2003IOOPContainerklasser.2 Mange objekter Containerklasser –antag at man skal repræsentere.
Forelæsning Uge 5 – Mandag
Forelæsning Uge 6 – Mandag
Forelæsning Uge 5 – Mandag
Forelæsning Uge 12 – Torsdag
Forelæsning Uge 6 – Mandag
Parametrisering En kort introduktion.
Præsentationens transcript:

Collections og opremsning Nye typer collections, objektorienteret sweep

 Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.2 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) Bag(uordnet, vilkårlige objekter)  ”A collection is an object that represents a group of objects”

 Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.3 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;

 Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.4 Collections i Java (1.)2  Java 2 har udvidet antallet og funktionaliteten af collections voldsomt, bl.a. kan de håndtere ordnede mængder. 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

 Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.5 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() ); }

 Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.6 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 (map), hvilket er Java 1.2 navnet: Map

 Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.7 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

 Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.8 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.

 Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.9 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") );

 Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.10 Sweep  Hvad nu hvis vi vil gennemløbe alle par i ordbogen?  for ( int i = 0; i < d.size(); i++ ) {  d.get( hvad????);  }  En ordbog er ikke indekseret, derfor er der heller ikke nogen naturlig sweep-variabel...

 Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.11 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

 Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.12 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:

 Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.13 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

 Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.14 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())

 Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.15 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.

 Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.16 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.

 Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.17 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)

 Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.18 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

 Henrik B. Chrsitensen, 1999Introducerende objektorienteret programmering8C.19 Mere information  En oversigt over de nye collections kan du finde på:  C:\ioop\jdk\docs\guide\collections\overview.html  C:\ioop\jdk\docs\guide\collections\reference.html  Se endvidere programmet ”J12Collections.java” i ugesedlens zip som viser nogle eksempler... 