58
252-0027 Einführung in die Programmierung I 11.0 Abstrakte Datentypen Thomas R. Gross Department Informatik ETH Zürich Copyright (c) Pearson 2013 and Thomas Gross 2016 All rights reserved.

252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT

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

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

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

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

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

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

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

9

Page 9: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT

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

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

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

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

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

15

Page 15: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT

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

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

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

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

§ 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

21

Page 21: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT

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

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

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

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

∀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

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

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

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

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

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

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

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

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

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

37

Page 36: 252-0027 Einführungin dieProgrammierungI 11.0 ... · §Der KlientsolltemitOperationen(Methode) arbeiten §NichtdirektmitDaten–dannmuss die Darstellungbekanntsein §Zielder ADT

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

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

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

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

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

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

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

§ 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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