252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode)...
Transcript of 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode)...
![Page 1: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/1.jpg)
252-0027Einführung indie Programmierung I
11.0Abstrakte DatentypenThomasR.Gross
DepartmentInformatikETHZürichCopyright(c)Pearson2013andThomasGross2016Allrightsreserved.
![Page 2: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/2.jpg)
Uebersicht
§ 11.1Stacks
§ 11.2Warteschlangen (Queues)
§ 11.3Iterator
§ 11.4Schnittstelle vs.Implementation
2
![Page 3: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/3.jpg)
Abstrakte Daten Typen (ADT)
§ InJava(insb.im CollectionFramework)beschreiben wir ADTsmit Interfaces:§ Collection,Deque,List,Map,Queue,Set,SortedMap
§ Ein ADTkann dann aufdurch verschiedene Klassenimplementiert sein:§ ArrayList undLinkedList implementiert List§ Stack implementiert ???
§ Ooops – Stackswurden vergessen,es gibt nur eine Klasse (bzw List)
![Page 4: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/4.jpg)
Warteschlangen
§ Warteschlange ("Queue):Elemente werden inderReihenfolge entfernt indersie hinzugefuegt wurden§ First-In,First-Out("FIFO")§ Elemente werden inderReihenfolge gespei-chert inderindieSammlung hinzugefuegtwurden aber es gibt keinen Index.
§ Klient kann nur amAnfang hinzufuegen undamEnde entfernen.
![Page 5: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/5.jpg)
Warteschlangen
§ Wassind dieOperationen dieeine Queueanbieten muss?
§ Hinzufügen ("insert")add (enqueue): Ein ElementamSchluss derWarteschlange hinzufügen.
§ Entfernen ("remove")remove (dequeue):Dasvorderste Elemententfernen.
§ Anschauen ("examine")element:Dasvorderste Elementanschauen.
6
![Page 6: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/6.jpg)
Warteschlangen inderInformatik
§ Betriebssysteme:§ QueuederDruckaufträge für einen Drucker§ QueuederProgramme (Prozesse)dieausgeführt werden sollen§ QueuederDatenpackete diezu sendsind bzw.dieempfangen wurden
§ Programmierung:§ Modellierung einer Schlange vonKunden oder Klienten§ Folge vonInstruktionen dieausgeführt werden sollen
![Page 7: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/7.jpg)
Arbeiten mit Queues
Queue<Integer> q = new LinkedList<Integer>();q.add(42);q.add(-3);q.add(17); // front [42, -3, 17] back
System.out.println(q.remove()); // 42
add(value) places given value at back of queueremove() removes value from front of queue and returns it;
throws a NoSuchElementException if queue is empty
element() returns front value from queue without removing it
size() returns number of elements in queueisEmpty() returns true if queue has no elements
![Page 8: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/8.jpg)
9
![Page 9: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/9.jpg)
Warum Interface(undnicht Klasse)?
§ InderPraxisbrauchen wir oftQueuesmit weiterenEigenschaften§ (Dazu später mehr)
§ Wenn wir eine QueueInstanz brauchen müssen wir eine Klasseverwenden,diediesesInterfaceimplementiert.
§ Z.B.können wir LinkedList verwenden
Queue<Integer> q = new LinkedList<Integer>();
§ Queue geht nicht.
10
![Page 10: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/10.jpg)
Erwartungen andenKlienten§ Wassollen wir machen wenn derKlient eine remove
Operationversucht unddieQueueenthält keine Elemente?
11
![Page 11: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/11.jpg)
Erwartungen andenKlienten§ Wassollen wir machen wenn derKlient eine remove
Operationversucht unddieQueueenthält keine Elemente?1. Fehler desKlienten – throwIllegalStateException
Exception2. Kann passieren (z.B.,es gibt keine Arbeit mehr zu erledigen)
– Klient mussinformiert werden aber keine"aussergewöhnliche Situation"
3. ???
12
![Page 12: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/12.jpg)
1. Fehler desKlienten – throwIllegalStateExceptionException
§ Verhalten derremove() Operation
13
![Page 13: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/13.jpg)
3. ???
§ Ein häufiges Einsatzgebiet für Queuesist Kommunikation inparallelen (undverteilten)Systemen
§ Z.B.Lesen vonempfangenen (Netzwerk)Packeten§ Wenn es kein Packetgibt müssen wir warten
§ Z.B.Schicken eines Packets§ Wenn es keinen Platz gibt (oder dasNetzwerk nicht verfügbar ist)
dann wollen wir warten§ Es ist normaldass daswir nicht sofort senden können 14
![Page 14: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/14.jpg)
15
![Page 15: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/15.jpg)
KlassendieQueue implementieren
§ DiverseKlassenimplementieren dasQueueInterface
§ Legen z.B.Verhalten bei voller (insert)undleerer Queue(remove)fest§ ArrayBlockingQueue, LinkedBlockingDeque, SynchronousQueue
§ Arbeitet evtl.dann mit einer festen Anzahl vonQueueSlots("capacity")
16
![Page 16: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/16.jpg)
2. Kann passieren (z.B.,es gibt keine Arbeit mehr zu erledigen)– Klient mussinformiert werden aber keine"aussergewöhnliche Situation"
§ Ein zweiter Satz vonMethoden§ Hinzufügen ("insert")
offer(enqueue):Ein ElementamSchluss derWarteschlangehinzufügen sofern es Platz gibt
§ Entfernen ("remove")poll(dequeue):Dasvorderste Elemententfernen sofern nicht leer
§ Anschauen ("examine")peek:Dasvorderste Elementanschauen.
§ Diese Methoden liefern null oder false anstatt eineExceptionzu generieren 17
![Page 17: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/17.jpg)
Arbeiten mit Queues
Queue<Integer> q = new LinkedList<Integer>();q.offer(42); // could also use addq.add(-3); // front [42, -3] back
System.out.println(q.poll()); // 42, could use remove insteadSystem.out.println(q.poll()); // -3, could use remove insteadSystem.out.println(q.poll()); // null
// remove throws exception
offer(value) places given value at back of queue, returns true if successfulpoll() removes value from front of queue and returns it;
returns null if queue is emptypeek() returns front value from queue without removing it;
returns null if queue is emptysize() returns number of elements in queueisEmpty() returns true if queue has no elements
![Page 18: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/18.jpg)
Einsatz vonQueues
§ Wie bei denStacksmüssen wir denInhalt entfernen umihnanzusehen.
while (!q.isEmpty()) {dosomethingwith q.remove();
}
![Page 19: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/19.jpg)
§ Jedes Elementgenau einmal inspizieren (aber Queuenichtändern).
int size = q.size();for (int i = 0; i < size; i++) {
dosomethingwith q.remove();//undevtl.wieder indieQueue(amEnde!)einfügen
}
§ Warum brauchen wir eine separateVariablesize dievor dem Loopinitialisiert wird?
20
![Page 20: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/20.jpg)
21
![Page 21: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/21.jpg)
Mengen
§ Menge (“set”):Eine Sammlung eindeutiger undeinzigartigerElemente (d.h.,wir lassen keine Duplikate zu undkönnen für 2beliebigeElemente feststellen,obsie gleich oder ungleich sind)für diefolgendeOperationen ausgeführt werden können:§ Hinzufügen (add),Entfernen (remove),Suche (contains)
§ Bei einer Menge erwarten wir keinen Zugriff über einen Indexundeine Reihenfolge spielt keine Rolle
![Page 22: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/22.jpg)
23
set.contains("to") true
set
"the" "of"
"from""to"
"she""you"
"him""why"
"in"
"down""by"
"if"
set.contains("be") false
![Page 23: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/23.jpg)
Set Implementierungen
§ InJavakönnen Mengendurch dasSet Interface(ausjava.util) realisiert werden
§ Set wird durch dieKlassen HashSet undTreeSetimplementiert
![Page 24: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/24.jpg)
Abbildungen (Maps)undMengen (Sets)
§ Eine Menge ist eine Abbildung (map)der Elemente aufbool’sche Werte.§ Set:Ist ”ETH"inder Menge?(true/false)
§ Map: Wasist diePostleitzahl der ”ETH”?
Set”ETH" true
false
Map”ETH" ”8092"
![Page 25: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/25.jpg)
∀Elemente der Menge§ DadieOrdnung derElemente inderMengennicht bekannt ist
müssen wir einen (stabilen)Weg finden,Operationen mitallen Elemente einer Menge auszuführen.§ DieOperationkann einen Testeinschliessen derdann – jenach
Ergebnis – dieOperationen genauer definiert§ Wenn element.hasProperty() dann element.moreOps()
§ Idee:Schleife über alle Elemente einer Menge
26
![Page 26: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/26.jpg)
keySet
§ DieMethode keySet liefert dieMenge (Set)aller “Keys”(Schlüssel)inderAbbildung (Map)§ Kann dieMenge aller Keysineiner foreach Schleife bearbeiten§ Kann denWertderzu einem Keygehört durch Aufruf vonget für die
MaperhaltenMap<String, Integer> ages = new TreeMap<String, Integer>();ages.put(”Roland", 19);ages.put(”Clara", 2); // ages.keySet() returns Set<String>ages.put(”Sarah", 57);for (String name : ages.keySet()) { // Clara -> 2
int age = ages.get(name); // Roland -> 19System.out.println(name + " -> " + age); // Sarah -> 57
}
![Page 27: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/27.jpg)
values
§ DieMethode values liefert eine Ansammlung aller inderMapauftretenden Werte§ Kann über diese Werte mit einer foreach Schleife abarbeiten§ Esgibt keinen einfachen Weg dieSchlüssel für einen Wertzu finden
29
![Page 28: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/28.jpg)
Uebung
§ Schreiben Sie ein Programm,daszählt wieviele verschiedeneWörter ineinem Textauftauchen.§ Speichern Sie dieWörter ineiner (An)Sammlung undgeben Sie die
Anzahl deraufgetretenen Wörter aus.§ Nach dem Einlesen desTextes sollte es möglich sein,festzustellen ob
ein bestimmtes Wortim Textauftritt.
§ Geben Sie jedes Wortdasmindestens 1000malauftritt aus(sortiert nach derHäufigkeit (von1000anaufwärts))undentfernen esaus derMenge.
![Page 29: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/29.jpg)
Mit denElementen einer Menge (Map)arbeiten
§ AufdieElemente eines JavaSetsoder einer JavaMap kannnicht mittels eines Indexzugegriffen werden§ Dafür gibt es den"foreach"Loop:
Set<Integer> scores = new HashSet<Integer>();for (int score : scores) {
System.out.println("The score is " + score);}
![Page 30: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/30.jpg)
Die"foreach”Schleife
Syntax:for (type name : collection) {
statements;}
§ Definiert einen Loopüber alle Elemente einer beliebigenCollection(z.B.,Set,List, Arrayoder andere)BeispielSet<Double> temperatures = new HashSet<Double>();...for (double measured : temperatures) {
System.out.println(”Measured Temp (F): " + measured);}
![Page 31: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/31.jpg)
Die"foreach”Schleife§ Problem: Dieforeach Schleife ist "read-only",d.h.dieMenge darf
nicht modifiziert werden während derLoopausgeführt wird.
for (int score : scores) {if (score >= 1000) {// throws a ConcurrentModificationException
scores.remove(score);}
}
33
![Page 32: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/32.jpg)
Iteratoren
§ Iterator("iterator"):Ein Objekt daseinem Klienten erlaubt,dieElemente einer Ansammlung zu besuchen§ Erinnert sich andie(aktuelle)Positionanderlaubt es
§ aufdasElementandieser Positionzuzugreifen§ dasElementandieser Positionzu entfernen§ abzufragen ob es weitere Elemente gibt§ zur nächsten Positionvorzurücken
![Page 33: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/33.jpg)
35
index 0 1 2 3 4 5 6 7 8 9value 3 8 9 7 5 1
20 0 0 0
size 6
list
current element: 9currentindex:2iterator
set"the"
"to""from"
"we"
current element: "from"next element: "the"iterator
![Page 34: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/34.jpg)
IteratorMethoden
§ Iterator ist ein Interfaceinjava.util§ Jede Ansammlung stellt dieiterator()Methode zur Verfügung,
dieeinen Iteratorliefert mit dem dieElemente besucht werdenkönnen.Set<String> set = new HashSet<String>();...Iterator<String> itr = set.iterator();
hasNext() returns true if there are more elements to examinenext() returns the next element from the collection (throws a
NoSuchElementException if there are none left to examine)remove() removes the last value returned by next() (throws an
IllegalStateException if you haven't called next() yet)
![Page 35: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/35.jpg)
37
![Page 36: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/36.jpg)
Iterator Beispiel 1Set<Integer> scores = new TreeSet<Integer>();scores.add(94);scores.add(38); // Kimscores.add(87);scores.add(43); // Martyscores.add(72);...
![Page 37: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/37.jpg)
Iterator Beispiel 1(Teil 2)Iterator<Integer> itr = scores.iterator();while (itr.hasNext()) {
int score = itr.next();
System.out.println("The score is " + score);
// eliminate any failing gradesif (score < 60) {
itr.remove();}
}
System.out.println(scores); // [72, 87, 94] 39
![Page 38: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/38.jpg)
Iterator Beispiel 2Map<String, Integer> scores = new TreeMap<String, Integer>();
scores.put("Kim", 38);
scores.put("Lisa", 94);
scores.put("Roy", 87);
scores.put("Marty", 43);
scores.put("Marisa", 72);
...
![Page 39: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/39.jpg)
Iterator Beispiel 2 (Teil 2)
Iterator<String> itr = scores.keySet().iterator();
while (itr.hasNext()) {
String name = itr.next();
int score = scores.get(name);
System.out.println(name + " got " + score);
// eliminate any failing students
if (score < 60) {
itr.remove(); // removes name and score
}
}
System.out.println(scores); // {Lisa=94, Marisa=72, Roy=87}
41
![Page 40: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/40.jpg)
DerADT"Map"
§ Map,Abbildung ("map"):Hält eine Menge Schlüssel (keys)undeine (An)Sammlung vonWerten (values),wobei jederSchlüssel mit einemWertassoziiert ist.§ Auch als "dictionary","associativearray","hash"bekannt.
myMap.get("Juliet") returns "Capulet"
![Page 41: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/41.jpg)
DerADT"Map"
§ Wichtigste Operationen:§ put(key,value):Hinzufügen eines Schlüssels mit einemWert
§ get(key):Lesen desWertes dermit dem Schlüssel assoziiert ist.
§ remove(key):Entfernen desSchlüssels (unddesmit ihm assoziiertenWertes)
45
![Page 42: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/42.jpg)
Map Implementation
§ InJava, Abbildungen (“maps”)werden durch Map Interfaceinjava.util unterstützt.
§ Map wird durch dieKlassen HashMap undTreeMapimplementiert
§ HashMap: mit einem Array,dem "hashtable”,implementiert;sehr effizient:O(1) ; Schlüssel sind inirgendeiner Reihenfolgegespeichert.
§ TreeMap: mit einem binärem Baumimplementiert;ziemlich effizient:O(logN) ; Schlüssel sind sortiert gespeichert
![Page 43: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/43.jpg)
§ Eine Abbildung erfordert 2TypeParameter:einen für dieSchlüssel,einen für dieWerte.
// maps from String keys to Integer values
Map<String, Integer> votes =
new HashMap<String, Integer>();
48
![Page 44: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/44.jpg)
MapMethoden
put(key, value) adds a mapping from the given key to the given value;if the key already exists, replaces its value with the given one
get(key) returns the value mapped to the given key (null if not found)
containsKey(key)
returns true if the map contains a mapping for the given key
remove(key) removes any existing mapping for the given keyclear() removes all key/value pairs from the mapsize() returns the number of key/value pairs in the mapisEmpty() returns true if the map's size is 0toString() returns a string such as "{a=90, d=60, c=70}"
![Page 45: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/45.jpg)
MapMethoden
50
keySet() returns a set of all keys in the mapvalues() returns a collection of all values in the mapputAll(map) adds all key/value pairs from the given map to this mapequals(map) returns true if given map has the same mappings as this
one
![Page 46: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/46.jpg)
Einsatz vonAbbildungen§ Eine Abbildung stellt eine Assoziation zwischen Schlüssel und
Werten her.§ Speichert einen Wertfür jeden Index(Schlüssel).
§ Später brauchen wir nur einen Schlüssel angeben underhalten denentsprechenden Wertzurück:
Dannkönnen wir fragen:Wasist dieETHTelefonnummer?
Mapget(”ETH")
"044-632-1111"
Map
// key valueput(”ETH", ”044-632-1111")
![Page 47: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/47.jpg)
Lösung der1.Uebungsaufgabe// read file into a map of [word --> number of occurrences]
Map<String, Integer> wordCount = new HashMap<String, Integer>();
Scanner input = new Scanner(new File("mobydick.txt"));
while (input.hasNext()) {
String word = input.next();
if (wordCount.containsKey(word)) {
// seen this word before; increase count by 1
int count = wordCount.get(word);
wordCount.put(word, count + 1);
} else {
// never seen this word before
wordCount.put(word, 1);
}
}
![Page 48: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/48.jpg)
Scanner console = new Scanner(System.in);
System.out.print("Word to search for? ");
String word = console.next();
System.out.println("appears " + wordCount.get(word) +
" times.");
53
![Page 49: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/49.jpg)
Abstraktion
§ Prozedural :§ DetailsdesVerhaltens (Prozeduren,z.B.derMethoden)nicht sichtbar§ Spezifikation desVerhaltens ist dieAbstraction§ Müssen dieSpezifikation mit einer Implementationerfüllen
§ Darstellung:§ DetailsderDatendarstellung nicht sichtbar§ Auch ein Weg Eigenschaften zu spezifizieren
§ Ein Ansatzüber Programm +Daten zu folgern§ StandardTerminologie:Abstrakte DataTypen,oder ADT 54
![Page 50: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/50.jpg)
Warum ist Daten Abstraktion sowichtig
§ Arbeiten mit Daten zentrales Thema vieler Anwendungen§ "Datenverarbeitung"§ DataScience§ Entwickeln (undBeschreiben)vonAlgorithmen seltener
§ Ueberlegen Sie sich welchen Datenstrukturen Sie brauchen§ Wie werden diewichtigen Daten organisiert?§ Welche Operationen dürfen Klienten mit denDaten machen?
55
![Page 51: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/51.jpg)
Warum ist Daten Abstraktion sowichtig
§ Mögliche Probleme diesich beim Ausarbeiten derAbstraktion derDatendarstellung ergeben können:§ Entscheidungen für/gegen eine Datenstruktur werden zu früh gemacht§ Unnötige Wiederholungen (insbesonderen wenn Transformationen
gemacht werden)§ Spätere Aenderungen der(Kern)Datenstrukture(n)oftschwierig bzw
aufwending§ Gliederung inModulehilft ist aber nicht einfach
56
![Page 52: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/52.jpg)
Ein ADTdefiniert Operationen
§ ADTabstrahiert dieOrganizationundbetont dieBedeutungderDaten
§ ADTändert Fokus vonStruktur aufGebrauch§ Darstellung sollte für denKlienten nicht wichtig sein
§ Daher sollte sie nicht sichtbar sein!
§ Denken im Raum derOperationen§ Instanzieren,getBase,getAngle,…. 57
class RightTriangle {double base, altitude;
}
class RightTriangle {double base, hypot, angle;
}
![Page 53: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/53.jpg)
Sinddiese Klassengleich?class Point { class Point {
public double x; public double r;
public double y; public double theta;
} }
§ (Nein)Unterschiedlich:können nicht dieeine Klasse durch dieandere ineinem Programm ersetzen
§ (Ja)Gleich :Beide Klassenimplementieren dieIdee eines"Punktes ineiner 2-dimEbene"
58
![Page 54: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/54.jpg)
Warum ADTs?
§ DerKlient sollte mit Operationen (Methode)arbeiten§ Nicht direkt mit Daten – dann mussdieDarstellung bekannt sein
§ Ziel derADTMethodologie ist es,dieGleichheit (aufdervorherigen Seite)auszudrücken:§ Klienten sollten mit Idee eines "Punktes ineiner 2-dimEbene"
arbeiten§ Undnicht mit derDarstellung
59
![Page 55: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/55.jpg)
Vorteile eines Fokus aufADTs
§ Wenn Klienten dieDatenabstraktion respektieren (oderrespektierenmüssen)§ z.B.arbeitet mit einem "Punkt ineiner 2-dimEbene mit diesen
Operationen"
§ Entscheidung über dieImplementationdesADTkannaufgeschoben werden
§ Können Fehler durch Aenderung derDarstellung beheben§ Algorithmen können geändert werden
§ Um(bessere)Leistung zu erhalten§ Umbesondere Situationen auszunutzen 60
![Page 56: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/56.jpg)
Idee eines 2-dPunktes,als ein ADTclass Point {
// A 2-d point exists in the plane, ...
public double x() { … };
public double y() { … };
public double r() { … };
public double theta() { … };
// ... can be created, ...
public Point() { ... }; // new point at (0,0)
public Point centroid(Set<Point> points) { … };
61
Observers
Creators/Producers
![Page 57: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/57.jpg)
Idee eines 2-dPunktes,als ein ADT(Teil 2)
// ... can be moved, ...
public void translate(double delta_x, double delta_y) { … };
public void scaleAndRotate(double delta_r,
double delta_theta) { … };
// attributes
private double x;
private double y;
}62
Mutators
![Page 58: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT](https://reader033.fdocuments.in/reader033/viewer/2022041500/5e218e51b49cd34ffe11f454/html5/thumbnails/58.jpg)
Pointxyrthetatranslatescale_rot
Rest desProgramms
"Abstractionbarrier
ADT=Objekte +Operationen
§ Implementationist nicht sichtbar (versteckt)§ Für Objekte desTyps gibt es nur dieOperationen,dievon
derAbstraktion zugelassen sind
Klienten Implementation
63