Einführung in die Programmierung Generische Programmierung. Thomas R. Gross. Department Informatik ETH Zürich

Größe: px
Ab Seite anzeigen:

Download "Einführung in die Programmierung Generische Programmierung. Thomas R. Gross. Department Informatik ETH Zürich"

Transkript

1 Einführung in die Programmierung 10.0 Generische Programmierung Thomas R. Gross Department Informatik ETH Zürich Copyright (c) Pearson 2013 and Thomas Gross 2016 All rights reserved.

2 Uebersicht 10.5 Iteratoren 2

3 Uebung 1. Schreiben Sie ein Programm, das zählt wieviele verschiedene Wörter in einem Text auftauchen. Speichern Sie die Wörter in einer (An)Sammlung und geben Sie die Anzahl der aufgetretenen Wörter aus. Nach dem Einlesen des Textes sollte es möglich sein, festzustellen ob ein bestimmtes Wort im Text auftritt. 2. Geben Sie jedes Wort das mindestens 1000mal auftritt aus (sortiert nach der Häufigkeit (von 1000 an aufwärts)) und entfernen es aus der Menge.

4 Die Schweizerische Eidgenossenschaft schuetzt die Freiheit und die Rechte des Volkes und wahrt die Unabhaengigkeit und die Sicherheit des Landes. 4

5 Lösung der 1. 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("book.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); } }

6 Set<String> allwords = wordcount.keyset(); System.out.println("Words seen = " + allwords.size()); 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."); 6

7 Mit den Elementen einer Menge (Map) arbeiten Auf die Elemente eines Java Sets oder einer Java Map kann nicht mittels eines Indexes zugegriffen 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); }

8 Die "for each Schleife Syntax: for (type name : collection) { } statements; Definiert einen Loop über alle Elemente einer beliebigen Collection (z.b., Set, List, Array oder andere) Beispiel Set<Double> temperatures = new HashSet<Double>();... for (double measured : temperatures) { System.out.println( Measured Temp (F): " + measured); }

9 Die "for each Schleife Problem: Die foreach Schleife ist "read-only", d.h. die Menge darf nicht modifiziert werden während der Loop ausgeführt wird. for (int score : scores) { if (score >= 1000) { // throws a ConcurrentModificationException scores.remove(score); } } 9

10 Iteratoren Iterator ("iterator"): Ein Objekt das einem Klienten erlaubt, die Elemente einer Ansammlung zu besuchen Erinnert sich an die (aktuelle) Position and erlaubt es auf das Element an dieser Position zuzugreifen das Element an dieser Position zu entfernen abzufragen ob es weitere Elemente gibt zur nächstenposition vorzurücken

11 11

12 list index value iterator size 6 current element: 9 current index: set "the" "to" "we" "from" iterator current element: "from" next element: "the" 12

13 13

14 Iterator Methoden hasnext() returns true if there are more elements to examine next() 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) Iterator ist ein Interface in java.util Jede Ansammlung stellt die iterator() Methode zur Verfügung, die einen Iterator liefert mit dem die Elemente besucht werden können. Set<String> set = new HashSet<String>();... Iterator<String> itr = set.iterator();

15 15

16 Iterator Beispiel 1 Set<Integer> scores = new TreeSet<Integer>(); scores.add(94); scores.add(38); // Kim scores.add(87); scores.add(43); // Marty scores.add(72);...

17 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 grades if (score < 60) { itr.remove(); } System.out.println(scores); // [72, 87, 94] 17

18 18

19 Iterator Beispiel 2 Map<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);...

20 20

21 21

22 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} 22

23 23

24 LinkedList und ArrayList Gleiches Verhalten (Menge von Methoden, Effekt der Methoden) Unterschiedliche Implementation der List Collection Kosten der Operationen sind (können) unterschiedlich (sein) Speicherbedarf ist (kann) unterschiedlich (sein) 24

25 Runtime Efficiency (13.2) efficiency: A measure of the use of computing resources by code. can be relative to speed (time), memory (space), etc. most commonly refers to run time Assume the following: Any single Java statement takes the same amount of time to run. A method call's runtime is measured by the total of the statements inside the method's body. A loop's runtime, if the loop repeats N times, is N times the runtime of the statements in its body.

26 Methoden von ArrayList und LinkedList add(value) add(index, value) clear() indexof(value) get(index) remove(index) set(index, value) size() tostring() appends value at end of list inserts given value at given index, shifting subsequent values right removes all elements of the list returns first index where given value is found in list (-1 if not found) returns the value at given index removes/returns value at given index, shifting subsequent values left replaces value at given index with given value returns the number of elements in list returns a string representation of the list such as "[3, 42, -7, 15]"

27 Methoden von List add(value) add(index, value) clear() indexof(value) get(index) remove(index) set(index, value) size() tostring() appends value at end of list inserts given value at given index, shifting subsequent values right removes all elements of the list returns first index where given value is found in list (-1 if not found) returns the value at given index removes/returns value at given index, shifting subsequent values left replaces value at given index with given value returns the number of elements in list returns a string representation of the list such as "[3, 42, -7, 15]"

28 Methoden von List Was fehlt in dieser Zusammenfassung? add(value) add(index, value) clear() indexof(value) get(index) remove(index) set(index, value) size() tostring() appends value at end of list inserts given value at given index, shifting subsequent values right removes all elements of the list returns first index where given value is found in list (-1 if not found) returns the value at given index removes/returns value at given index, shifting subsequent values left replaces value at given index with given value returns the number of elements in list returns a string representation of the list such as "[3, 42, -7, 15]"

29 a) Einige Methoden fehlen. b) c) 29

30 a) Einige Methoden fehlen. b) Information über Laufzeitkosten c) Information über Annahmen und Anforderungen (wann kann eine Methode verwendet werden, was sind legale Parameterwerte) a) Ist aber in der Dokumentation verfügbar 30

31 31

32 Stacks Manchmal brauchen wir eine Collection die weniger anbietet (als z.b. ArrayList) aber diese Operationen effizient durchführt. Hier ist eine besondere Collections: Stack Stack: Elemente werden in der umgekehrten Reihenfolge entfernt in der sie hinzugefügt wurden.

33 Abstrakte Daten Typen (ADT) Abstrakter Daten Typ (ADT): Spezifikation einer Ansammlung von Daten und der Operationen, die mit diesen Daten ausgeführt werden können. Beschreibt was eine Ansammlungmacht (oder mir ihr getan werden kann) nicht wie sie es macht Wir wissen nicht wie ein XXXX implementiert ist, und wir brauchen dies auch nicht zu wissen. Wir müssen nur das Konzept der Ansammlung verstehen, sowie die Operationen, die damit ausgeführt werden können.

34 Abstrakte Daten Typen (ADT) In Java (insb. im Collection Framework) beschreiben wir ADTs mit Interfaces: Collection, Deque, List, Map, Queue, Set, SortedMap Ein ADT kann dann auf durch verschiedene Klassen implementiert sein: ArrayList und LinkedList implementiert List HashSet und TreeSet implementiert Set LinkedList, ArrayDeque, etc. implementiert Queue

35 Arbeiten mit ADT Interfaces Es ist eine gute Idee die Variablen für Ansammlungen als Variable des ADT Interface Typs zu deklarieren: List<String> list = new ArrayList<String>(); Genauso sollten Methoden entsprechende Parameter mit ADT Interface Typen deklarieren: public void stutter(list<string> list) { }...

36 Arbeiten mit ADT Interfaces Es ist eine gute Idee die Variablen für Ansammlungen als Variable des ADT Interface Typs zu deklarieren: List<String> list = new ArrayList<String>(); Genauso sollten Methoden entsprechende Parameter mit ADT Interface Typen deklarieren: public void stutter(list<string> list) { }... Flexibilität! Wir können diesen Code wiederverwenden

37 Warum sollten wir ADT verwenden? Wer will mehr als eine Art von Listen, Warteschlangen, etc? Jede Implementation kann für bestimmte Aufgaben effizienter sein ArrayList ist schneller wenn wir Elemente am Ende einfügen/entfernen; LinkedList ist schneller wenn wir Elemente in der Mitte einfügen/entfernen; HashSet findet einen Wert in einer grossen Menge in kurzer Zeit; TreeSet speichert die Werte sortiert.

38 Warum unterschiedliche Collections? Manchmal brauchen wir eine Collection die weniger anbietet (als z.b. ArrayList) aber diese Operationen effizient durchführt. Die Methoden des ADT müssen implementiert werden Hier ist eine besondere Collections: Stack Stack: Elemente werden in der umgekehrten Reihenfolge entfernt in der sie hinzugefügt wurden.

39 Stacks Stack: Eine Ansammlung zu der Elemente hinzugefügt werden können und aus der Elemente entfernt werden können. Elemente werden in der umgekehrten Reihenfolge entfernt in der sie hinzugefügt wurden. Last-In, First-Out ("LIFO") Die Elemente werden in der Reihefolge gespeichert in der sie hinzugefügt wurden, aber Elemente haben keine (fixe) Position Also auch keinen Index

40 Stacks Stack: Eine Ansammlung zu der Elemente hinzugefügt werden können und aus der Elemente entfernt werden können. Elemente werden in der umgekehrten Reihenfolge entfernt in der sie hinzugefügt wurden. Last-In, First-Out ("LIFO") Die Elemente werden in der Reihefolge gespeichert in der sie hinzugefügt wurden aber Elemente haben keine (fixe) Position Also auch keinen Index

41 Stacks Ein Klient kann nur Elemente hinzufügen/entfernen/das zuletzt hinzugefügte (d.h. oberste) Element inspizieren (der "top oder TOS [ top of stack ]). Verhalten (Operationen): push: Hinzufügen eines Elements (ist jetzt oberstes Element) pop: Entfernen des obersten Elements peek: Untersuchen/abfragen des obersten Elements. 41

42 Stacks in der Informatik Compiler und Programmiersprachen: Jeder Methoden Aufruf braucht Platz für die lokalen Variablen dieser wird auf einem Stack zur Verfügung gestellt (call=push, return=pop) Compiler brauchen Stacks um einen (arithmetischen oder logischen) Ausdruck zu evaluieren * 6 method3 method2 method1 return var local vars parameters return var local vars parameters return var local vars parameters

43 Zuordnung von Symbolen: Ist ein String ein Palindrome? Prüfen Sie ob in einer Datei die Klammern { } ausgeglichen sind Verwandeln Sie einen "infix" Ausdruck in einen "postfix" oder "prefix Ausdruck Klevere Algorithmen: Suchen Sie einenpfad durcheinlabyrinth mit Backtracking" Viele Programme unterhalten einen "undo stack mit ausgeführten Operationen 43

44 Die Klasse Stack Stack<E>() push(value) pop() peek() size() isempty() constructs a new stack with elements of type E places given value on top of stack removes top value from stack and returns it; throws EmptyStackException if stack is empty returns top value from stack without removing it; throws EmptyStackException if stack is empty returns number of elements in stack returns true if stack has no elements

45 Beispiel Stack<Integer> s = new Stack<Integer>(); s.push(42); s.push(-3); s.push(17); // bottom [42, -3, 17] top System.out.println(s.pop()); // 17 Stack unterstützt auch andere Methoden aber diese dürfen Sie (jetzt) nicht verwenden. 45

46 Stack Einschränkungen und Einsatz Zur Erinnerung: Man kann nicht die Elemente mit einem for- Loop besuchen/inspizieren Stack<Integer> s = new Stack<Integer>();... for (int i = 0; i < s.size(); i++) { do something with s.get(i); }

47 Stattdessen muss man den Inhalt aus dem Stack nehmen um ihn zu untersuchen Uebliches Muster: Ein Element nach dem anderen wird entfernt bis der Stack leer ist. Stack<Integer> s = new Stack<Integer>();... while (!s.isempty()) { do something with s.pop(); } 47

48 Uebung Wir haben eine Ansammlung von Ergebnissen für Personen in (lexikographisch) umgekehrter Reihenfolge Yeilding Janet 87 White Steven 84 Todd Kim 52 Tashev Sylvia 95 Schreiben Sie ein Programm das die Namen alphabetisch ausgibt (mit den Ergebnissen). Was wenn wir die Daten nach der Ausgabe weiter bearbeiten wollen?

49 Uebung Wir haben einen Stack mit Integer Werten. Wir wollen die grösste Zahl finden. 49

50 Wo ist mein Stack? Wir lösen das Problem in einer Method max, die einen Stack mit Integers als Parameter akzeptiert, und liefern die grösste Zahl ab. Diese Lösung sieht korrekt aus: // s.size() > 0 public static int max(stack<integer> s) { int maxvalue = s.pop(); } while (!s.isempty()) { int next = s.pop(); maxvalue = Math.max(maxValue, next); } return maxvalue;

51 Wo ist mein Stack? Das Programm zerstört den Stack um die Antwort zu finden. Um dieses Problem zu umgehen muss man den Inhalt (des Stacks) speichern und nachher zurücksetzen:

52 public static int max(stack<integer> s) { Stack<Integer> backup = new Stack<Integer>(); int maxvalue = s.pop(); backup.push(maxvalue); while (!s.isempty()) { int next = s.pop(); backup.push(next); maxvalue = Math.max(maxValue, next); } while (!backup.isempty()) { s.push(backup.pop()); } return maxvalue; } 52

53 53

54 Abstrakte Daten Typen (ADT) In Java (insb. im Collection Framework) beschreiben wir ADTs mit Interfaces: Collection, Deque, List, Map, Queue, Set, SortedMap Ein ADT kann dann auf durch verschiedene Klassen implementiert sein: ArrayList und LinkedList implementiert List Stack implementiert??? Ooops Stacks wurden vergessen, es gibt nur eine Klasse (bzw List)

55 55

56 Abstraktion Prozedural : Details des Verhaltens (Prozeduren, z.b. der Methoden) nicht sichtbar Spezifikation des Verhaltens ist die Abstraction Müssen die Spezifikation mit einer Implementation erfüllen Darstellung: Details der Datendarstellung nicht sichtbar Auch ein Weg Eigenschaften zu spezifizieren Ein Ansatz über Programm + Daten zu folgern Standard Terminologie: Abstrakte Data Typen, oder ADT 56

57 Warum ist Daten Abstraktion so wichtig Arbeiten mit Daten zentrales Thema vieler Anwendungen "Datenverarbeitung" Data Science Entwickeln (und Beschreiben) von Algorithmen seltener Ueberlegen Sie sich welchen Datenstrukturen Sie brauchen Wie werden die wichtigen Daten organisiert? Welche Operationen dürfen Klienten mit den Daten machen? 57

58 Warum ist Daten Abstraktion so wichtig Mögliche Probleme die sich beim Ausarbeiten der Abstraktion der Datendarstellung ergeben können: Entscheidungen für/gegen eine Datenstruktur werden zu früh gemacht Unnötige Wiederholungen (insbesonderenwenn Transformationen gemacht werden) Spätere Aenderungen der (Kern) Datenstrukture(n) oft schwierig bzw aufwending Gliederung in Module hilft ist aber nicht einfach 58

59 Ein ADT definiert Operationen ADT abstrahiert die Organization und betont die Bedeutung der Daten ADT ändert Fokus von Struktur auf Gebrauch Darstellung sollte für den Klienten nicht wichtig sein Daher sollte sie nicht sichtbar sein! class RightTriangle { double base, altitude; } Denken im Raum der Operationen class RightTriangle { double base, hypot, angle; } Instanzieren, getbase, getangle,. 59

60 Sind diese Klassen gleich? class Point { class Point { public double x; public double r; public double y; } } public double theta; (Nein) Unterschiedlich: können nicht die eine Klasse durch die andere in einem Programm ersetzen (Ja) Gleich : Beide Klassen implementieren die Idee eines "Punktes in einer 2-dim Ebene" 60

61 Warum ADTs? Der Klient sollte mit Operationen (Methode) arbeiten Nicht direkt mit Daten dann muss die Darstellung bekannt sein Ziel der ADT Methodologie ist es, die Gleichheit (auf der vorherigen Seite) auszudrücken: Klienten sollten mit Idee eines "Punktes in einer 2-dim Ebene" arbeiten Und nicht mit der Darstellung 61

62 Vorteile eines Fokus auf ADTs Wenn Klienten die Datenabstraktion respektieren (oder respektieren müssen) z.b. arbeitet mit einem "Punkt in einer 2-dim Ebene mit diesen Operationen" Entscheidung über die Implementation des ADT kann aufgeschoben werden Können Fehler durch Aenderung der Darstellung beheben Algorithmen können geändert werden Um (bessere) Leistung zu erhalten Um besondere Situationen auszunutzen 62

63 Idee eines 2-d Punktes, als ein ADT class Point { // A 2-d point exists in the plane,... public double x() { }; public double y() { }; public double r() { }; public double theta() { }; Observers //... can be created,... public Point() {... }; // new point at (0,0) public Point centroid(set<point> points) { }; Creators/ Producers 63

64 Idee eines 2-d Punktes, 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) { }; Mutators // attributes private double x; private double y; } 64

65 ADT = Objekte + Operationen Rest des Programms Klienten Point x y r theta translate scale_rot "Abstraction barrier" Implementation Implementation ist nicht sichtbar (versteckt) Für Objekte des Typs gibt es nur die Operationen, die von der Abstraktion zugelassen sind 65

66 Abstraktion und ADT Zentrales Thema für die Entwicklung von Software Systemen "Wenn Klienten die Datenabstraktion respektieren (oder respektieren müssen)" 66

67 Abstraktion und ADT Zentrales Thema für die Entwicklung von Software Systemen "Wenn Klienten die Datenabstraktion respektieren (oder respektieren müssen)" 67

68 Abstraktion und ADT Zentrales Thema für die Entwicklung von Software Systemen "Wenn Klienten die Datenabstraktion respektieren (oder respektieren müssen)" Programmiersprache stellt verschiedene Mittel zur Verfügung den Klienten zu zwingen, die Datenabstraktion zu respektieren private Keyword hatten wir schon kennen gelernt aber nicht die ganze Geschichte 68

69 Java Packages Paket ( package ): Eine Ansammlung von zusammengehörenden Klassen. Kann auch Unter-Pakete (sub-packages) enthalten. Sub-packages können ähnliche Namen haben sind aber nicht wirklich in einerpackage enthalten java.awt enthält nicht java.awt.event Gebrauch von Java Packages: Weg zusammengehörende Klassen zu bündeln Schafft einen Raum für Namen (` namespace ) um Nameskonflikte zu vermeiden Kontrolliert Zugriff bzw bietet Schutz vor unerwünschten Zugriffen Erlaubt Gliederung eines grossen Software Projektes

70 Packages und Dateienverzeichnisse Package ßà Verzeichnis ( directory, folder ) Klasse ßà Datei Eine Klasse mit Namen D in der Package a.b.c sollte in dieser Datei gespeichert sein: a/b/c/d.class (relativ zur Root Ihres Projektes) Das "root" Verzeichnis der Package Hierarchie wird vorgeben durch den class path oder ist das Verzeichnis von dem aus java aufgerufen wurde.

71 Classpath class path: Der Ort (Directory) bzw. die Orte in dem/denen Java class Files sucht..class File: übersetzte.java File Der Class Path kann beinhalten: Das aktuelle "working directory" in dem javac / java aufgerufen wurde Bzw. Eclipse die Uebersetzung durchführt Andere Verzeichnisse JAR Archive (JAR: Java Archive) URLs...

72 Classpath Konfiguriert in Eclipse Kann explizit gesetzt werden wenn man Java von der Shell aus startet: java -cp /home/eprog/libs:/foo/bar/jbl MyClass 72

73 Deklaration einer Package package packagename; public class classname {... } Beispiel: package pacman.model; public class Ghost extends Sprite {... } Files Ghost.java und Sprite.java sollten im Folder pacman/model sein.

74 Import einer Package import packagename.*; // all classes Beispiel: package pacman.gui; import pacman.model.*; public class PacManGui {... Ghost blinky = new Ghost(); }

75 Import einer Package PacManGui muss die model Package importieren um die Klassen verwenden zu können PacManGui muss im Folder pacman.gui liegen 75

76 Import einer Klasse import packagename.classname; // one class Beispiel: package pacman.gui; import pacman.model.ghost; public class PacManGui { Ghost blinky = new Ghost(); }

77 Import von Klassen vs. Import einer Package (Klassen)Namenskonflikte werden unterschiedlich behandelt: Import einer einzelnen Klasse gibt der Klasse einen hohen Stellenwert: Mit import foo.* gilt: eine Klasse mit dem selben Name in dieser Package überschreibt (verdeckt) die importierte Klasse Mit import foo.classname gilt: die Klasse mit dem selben Namen verdeckt nicht die importierte Klasse 77

78 Static import import static packagename.classname.*; Example: import static java.lang.math.*;... double angle = sin(pi / 2) + ln(e * E);

79 Arbeiten mit Packages Auch ohne import können wir uns auf eine Klasse beziehen. packagename.classname Beispiel: java.util.scanner console = new java.util.scanner(java.lang.system.in);

80 Arbeiten mit Packages Sie können sich auf Klassen (Typen) anderer Packages beziehen (ohne import) wenn Sie den vollständigen Namen angeben. Dies ist manchmal praktisch wenn es Namenskonflikte gibt: Beispiel: java.awt.list und java.util.list Oder eine Klasse importieren (und dann für die andere den vollständigen Namen verwenden) 80

81 Arbeiten mit Packages Die Package Angabe muss immer als erstes in einer.java Datei erscheinen Vor der ersten Klasse/ dem ersten Interface Nur einmal pro Datei Was passiert wenn wir (wie bisher) keine Package deklarieren? 81

82 Die default Package Dateien (d.h., die Klassen/Interfaces in der Datei), die keine Package Deklaration enthalten, gehören in eine namenlose default Package. Klassen in der default Package: Können nicht importiert werden Können nicht von anderenklassen in anderenpackages verwendet werden. Kein Problem für einfache Programme

83 Der default Import Die Package java.lang wird implizit von allen Packages (und damit Programmen) importiert. import java.lang.*; 83

84 Packages und Sichtbarkeit In Java gibt es die folgenden Zugriffsmodifizierer ( access modifiers ): public : Sichtbar für alle anderen Klassen (nach Import). private : Sichtbar nur in dieser Klasse (und ggf. in eingeschlossenen Klassen/Typen später mehr). protected : Sichtbar nur in dieser Klasse, allen Unterklassen der Klasse, und allen anderen Klassen/Typen die in dieser Package deklariert sind. default (package): Sichtbar in dieser Klasse und allen anderen Klassen/Typen die in dieser Package deklariert sind.

85 Packages und Sichtbarkeit Damit ein Attribut/eine Methode die default Sichtbarkeit hat, brauchen Sie keinen Modifizierer anzugeben. package pacman.model; public class Sprite { int points; // default: visible to pacman.model.* String name; // default: visible to pacman.model.* } public class Xray { int direction; String name; } // default: visible in default package // default: visible in default package 85

86 Das IntList Interface // Represents a list of int(egers). public interface IntList { public void add(int value); public void add(int index, int value); public int get(int index); public int indexof(int value); public boolean isempty(); public void remove(int index); public void set(int index, int value); public int size(); } public class ArrayIntList implements IntList {... public class LinkedIntList implements IntList {...

87 Verschiedene Klassen Wir haben diese beiden Klassen implementiert, die Listen (An)sammlungen realisierten: ArrayIntList LinkedIntList index value front data next 42 data next -3 data next 17

88 Probleme Wir wollen Instanzen dieser Klassen im Klienten gleich behandeln Die Listen können nur int Werte speichern, nicht beliebige Objekte Einige Methoden sind in beiden Klassen durch identischen Code implementiert (Redundanz). Die Variante der LinkedIntList musste noch die zusätzliche Klasse der IntNodes deklarieren. 88

89 Gemeinsamer Code Einige der Methoden können für beide Klassen durch den selben Code implementiert werden (d.h. sind identisch für die Array-basierte als auch die Ketten-basierte Klasse) add(value) contains isempty

90 Auszug aus ArrayIntList und LinkedIntList public void add(int value) { add(size(), value); } public boolean contains(int value) { return indexof(value) >= 0; } public boolean isempty() { return size() == 0; } 90

91 Sollten wir unser Interface in eine Klasse umwandeln? Warum/Warum nicht? Können wir auf andere Weise diese (häufige) Situation behandeln? 91

92 Abstrakte Klassen ( Abstract Classes ) abstract class: Eine spezielle Klasse die eine Mischform zwischen Interface und Klasse ist. Definiert einen Superclass-Typ mit Methodendeklarationen (wie ein Interface) und vollständigen Methoden (mit Rumpf/Body) (wie eine Klasse). Wie Interfaces können abstrakte Klassen nicht instanziert werden (d.h. der new Operator kann nicht Objekte dieses Typs generieren).

93 Was gehört in eine abstrakte Klasse? Implementation gemeinsamen Zustandes (Attribute) oder gemeinsamen Verhaltens das von allen Subclasses geerbt werden soll (abstrakte Klassen sind Superclasses/Eltern in der Ableitungshierarchie) Schreiben Verhalten vor, dass Subklasses implementieren müssen (Rolle eines Interfaces) 93

94 Abstract Class Syntax // declaring an abstract class public abstract class name {... // declaring an abstract method // (any subclass must implement it) public abstract type name(parameters); }

95 Eine Klasse kann als abstract deklariert werden auch wenn sie keine abstrakten Methoden enhält. Es ist erlaubt, Variable (aber nicht Objekte) des abstrakten Typs zu deklarieren Wie beiinterfaces Eine Erweiterung (mittels extends) ist auch wieder abstrakt (und muss als abstract deklariert sein) sofern nicht alle abstrakten Methoden implementiert sind. 95

96 Abstract Classes vs. Interfaces Normale Klassen die behaupten, ein Interface zu implementieren, müssen alle Methoden des Interfaces implementieren: public class Empty implements IntList {} // error Abstract classes können behaupten, ein Interface zu implementieren ohne Code fürdie Methoden zu enthalten die Subclasses müssen die Methoden implementieren. public abstract class Empty implements IntList {} // ok public class Child extends Empty {} // error

97 Uebung Definieren sie eine geignete abstrakte Klasse fürdie Listen. 97

98 Auszug aus ArrayIntList und LinkedIntList public void add(int value) { add(size(), value); } public boolean contains(int value) { return indexof(value) >= 0; } public boolean isempty() { return size() == 0; } 98

99 Das IntList Interface // Represents a list of int(egers). public interface IntList { public void add(int value); public void add(int index, int value); public int get(int index); public int indexof(int value); public boolean isempty(); public void remove(int index); public void set(int index, int value); public int size(); } public class ArrayIntList implements IntList {... public class LinkedIntList implements IntList {...

100 Eine abstrakte Listen Klasse // Superclass with common code for a list of integers. public abstract class AbstractIntList implements IntList { public void add(int value) { add(size(), value); } } public boolean contains(int value) { return indexof(value) >= 0; } public boolean isempty() { return size() == 0; } public class ArrayIntList extends AbstractIntList { public class LinkedIntList extends AbstractIntList {...

101 Abstrakte Klassen vs. Interfaces Warum gibt es in Java abstrakte Klassen und Interfaces? Eine abstrakte Klasse kann alles machen was ein Interface kann, und mehr. Warum sollten wir je Interfaces verwenden? Antwort: Java erlaubt nur Einfachvererbung. Können nur eine Superclass verwenden Können viele Interfaces implementieren Interfaces erlauben es uns, eine Klasse Teil einer Hierarchie sein zu lassen (wichtig für Polymorphismus) ohne dass wir Vererbung einschränken.

102 Abstrakte Klassen vs. Interfaces Auch Interfaces erlauben es, für Methoden eine Implementation anzugeben Aber wir können keine Variable deklarieren (gleich welchen Typs) Kein Thema für einfaches Beispiel 102

103 Verschiedene Klassen Wir haben diese beiden Klassen implementiert, die Listen (An)sammlungen realisierten: ArrayIntList LinkedIntList index value front data next 42 data next -3 data next 17

104 Probleme Wir wollen Instanzen dieser Klassen im Klienten gleich behandeln Die Listen können nur int Werte speichern, nicht beliebige Objekte Einige Methoden sind in beiden Klassen durch identischen Code implementiert (Redundanz). Die Variante der LinkedIntList musste noch die zusätzliche Klasse der IntNodes deklarieren. 104

105 Probleme Wir wollen Instanzen dieser Klassen im Klienten gleich behandeln Die Listen können nur int Werte speichern, nicht beliebige Objekte Einige Methoden sind in beiden Klassen durch identischen Code implementiert (Redundanz). Die Variante der LinkedIntList musste noch die zusätzliche Klasse der IntNodes deklarieren. 105

106 Inner classes Innere Klasse ( inner class ): Eine Klasse die innerhalb einer anderen Klasse definiert ist. Können als static oder non-static Klassen definiert werden Wir betrachten hier nur die einfachen (Standard) non-static (geschachtelt, "nested") inneren Klassen Warum: Innere Klassen sind nicht sichtbar für andere Klassen (Abkapselung) Innere Objekte können die Attribute des äusseren Objekts lesen/modifizieren

107 Inner classes Innere Klasse ( inner class ): Eine Klasse die innerhalb einer anderen Klasse definiert ist. Können als static oder non-static Klassen definiert werden Wir betrachten hier nur die einfachen (Standard) non-static (geschachtelt, "nested") inneren Klassen Warum: Innere Klassen sind nicht sichtbar für andere Klassen (Abkapselung) Innere Objekte können die Attribute des äusseren Objekts lesen/modifizieren

108 Inner Class Syntax // outer (enclosing) class public class outername {... } // inner (nested) class private class innername {... }

109 Innere Klassen Nur der Code in dieser Datei kann die innere Klasse sehen oder instanzieren. Jedes innere Objekt ist mit dem äusseren Objekt, welches es instanzierte, verbunden und kann so die Attribute/Methoden des äusseren Objektes lesen/modifizieren/aufrufen. Wenn nötig kann das äussere Objekt über die Referenzvariable OuterClassName.this erreicht werden. Uebung: Aendern Sie die LinkedIntList so dass eine innere Klasse verwendet wird. 109

110 Type Parameters (Generics) ArrayList<Type> name = new ArrayList<Type>(); Recall: When constructing a java.util.arraylist, you specify the type of elements it will contain between < and >. We say that the ArrayList class accepts a type parameter, or that it is a generic class. ArrayList<String> names = new ArrayList<String>(); names.add("marty Stepp");

111 Implementing generics // a parameterized (generic) class public class name<type> {... } By putting the Type in < >, you are demanding that any client that constructs your object must supply a type parameter. You can require multiple type parameters separated by commas.

112 Generics and arrays (15.4) public class Foo<T> { private T myfield; // ok public void method1(t param) { error myfield = new T(); // error T[] a = new T[10]; //

113 Generics und innere Klassen public class Outer<T> { private class Inner<T> {} // incorrect } private class Inner {} // correct Wenn die äussere Klasse einen Typparameter deklariert dann kann dieser Typparameter auch von den inneren Klassen verwendet werden. Innere Klassen sollten nicht den Typparameter erneut deklarieren (dies würde einen 2. Typparameter deklarieren der den 1. verdeckt).

114 114

115 115

116 116

117 Exercise Modify the Book Search program from last lecture to eliminate any words that are plural or all-uppercase from the collection. Modify the TA quarters experience program so that it eliminates any TAs with 3 quarters or fewer of experience.

118 Exercise Write a program to count the occurrences of each word in a large text file (e.g. Moby Dick or the King James Bible). Allow the user to type a word and report how many times that word appeared in the book. Report all words that appeared in the book at least 500 times, in alphabetical order. How will we store the data to solve this problem?

Einführung in die Programmierung. 9.0 Generische Programmierung. Thomas R. Gross. Department Informatik ETH Zürich

Einführung in die Programmierung. 9.0 Generische Programmierung. Thomas R. Gross. Department Informatik ETH Zürich 252-0027 Einführung in die Programmierung 9.0 Generische Programmierung Thomas R. Gross Department Informatik ETH Zürich Copyright (c) Pearson 2013 and Thomas Gross 2016 All rights reserved. 10 Übersicht

Mehr

Einführung in die Programmierung I. 12:00 Finale. Thomas R. Gross. Department Informatik ETH Zürich

Einführung in die Programmierung I. 12:00 Finale. Thomas R. Gross. Department Informatik ETH Zürich 252-0027 Einführung in die Programmierung I 12:00 Finale Thomas R. Gross Department Informatik ETH Zürich Copyright (c) Pearson 2013 and Thomas Gross 2016 All rights reserved. Uebersicht 12.1 Prüfungsstoff

Mehr

Einführung in die Programmierung I Systematisches Programmieren. Thomas R. Gross. Department Informatik ETH Zürich

Einführung in die Programmierung I Systematisches Programmieren. Thomas R. Gross. Department Informatik ETH Zürich 252-0027 Einführung in die Programmierung I 10.0 Systematisches Programmieren Thomas R. Gross Department Informatik ETH Zürich Copyright (c) Pearson 2013 and Thomas Gross 2016 All rights reserved. Uebersicht

Mehr

Einführung in die Programmierung I Abstrakte Datentypen. Thomas R. Gross. Department Informatik ETH Zürich

Einführung in die Programmierung I Abstrakte Datentypen. Thomas R. Gross. Department Informatik ETH Zürich 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. Uebersicht 11.1

Mehr

Einführung in die Programmierung Generische Programmierung. Thomas R. Gross. Department Informatik ETH Zürich

Einführung in die Programmierung Generische Programmierung. Thomas R. Gross. Department Informatik ETH Zürich 252-0027 Einführung in die Programmierung 10.0 Generische Programmierung Thomas R. Gross Department Informatik ETH Zürich Copyright (c) Pearson 2013 and Thomas Gross 2016 All rights reserved. Uebersicht

Mehr

Einführung in die Programmierung I. 9.0 Generische Programmierung. Thomas R. Gross. Department Informatik ETH Zürich

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

Mehr

7.0 Arbeiten mit Objekten und Klassen

7.0 Arbeiten mit Objekten und Klassen 252-0027 Einführung in die Programmierung I 7.0 Arbeiten mit Objekten und Klassen Thomas R. Gross Department Informatik ETH Zürich Copyright (c) Pearson 2013. and Thomas Gross 2016 All rights reserved.

Mehr

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1 IT I: Heute abstrakte Methoden und Klassen Interfaces Interfaces List, Set und Collection 22.11.2018 IT I - VO 7 1 Wissensüberprüfung Überschreiben von Methoden: Aufruf der Methode der Oberklasse ist oft

Mehr

Faulheit professionell: Fertige Datenbehälter. Das Java-Collections-Framework Typsicherheit Generische Klassen

Faulheit professionell: Fertige Datenbehälter. Das Java-Collections-Framework Typsicherheit Generische Klassen Faulheit professionell: Fertige Datenbehälter Das Java-Collections-Framework Typsicherheit Generische Klassen Das Java Collections Framework Grundlegende Interfaces Das Interface List Das Interface List

Mehr

11.0 Systematisches Programmierung

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

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java Vorlesung 05: Generics Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2015 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1 / 19 Inhalt Generics

Mehr

Einführung in die Programmierung Finale. Thomas R. Gross. Department Informatik ETH Zürich

Einführung in die Programmierung Finale. Thomas R. Gross. Department Informatik ETH Zürich 252-0027 Einführung in die Programmierung 2.0 Finale Thomas R. Gross Department Informatik ETH Zürich Copyright (c) Pearson 203 and Thomas Gross 206 All rights reserved. Uebersicht 2. Informationen zur

Mehr

7.0 Arbeiten mit Objekten und Klassen

7.0 Arbeiten mit Objekten und Klassen 252-0027 Einführung in die Programmierung 7.0 Arbeiten mit Objekten und Klassen Thomas R. Gross Department Informatik ETH Zürich Copyright (c) Pearson 2013. and Thomas Gross 2016 All rights reserved. Uebersicht

Mehr

Einführung in die Programmierung I. 2.4 Felder. Thomas R. Gross. Department Informatik ETH Zürich

Einführung in die Programmierung I. 2.4 Felder. Thomas R. Gross. Department Informatik ETH Zürich 252-0027 Einführung in die Programmierung I 2.4 Felder Thomas R. Gross Department Informatik ETH Zürich Uebersicht 2.4 Felder (Vektoren, "array"s) 2.5 Verschachtelte Schleifen 2.6 "if" Anweisungen 2.7

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Java Generics und Java API (1/2) Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck https://www.itm.uni-luebeck.de/people/fischer Datenstrukturen In vielen Sprachen

Mehr

Einführung in die Programmierung Generische Programmierung. Thomas R. Gross. Department Informatik ETH Zürich

Einführung in die Programmierung Generische Programmierung. Thomas R. Gross. Department Informatik ETH Zürich 252-0027 Einführung in die Programmierung 10.0 Generische Programmierung Thomas R. Gross Department Informatik ETH Zürich Copyright (c) Pearson 2013 and Thomas Gross 2016 All rights reserved. Uebersicht

Mehr

Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe

Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe Maximale Größe?! Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um Dynamische Anpassung der Größe Praktische Informatik I, HWS 2009, Kapitel 10 Seite

Mehr

Einführung in die Programmierung Systematisches Programmieren. Thomas R. Gross. Department Informatik ETH Zürich

Einführung in die Programmierung Systematisches Programmieren. Thomas R. Gross. Department Informatik ETH Zürich 252-0027 Einführung in die Programmierung 11.0 Systematisches Programmieren Thomas R. Gross Department Informatik ETH Zürich Copyright (c) Pearson 2013 and Thomas Gross 2016 All rights reserved. 1 Übersicht

Mehr

16. Dynamische Datenstrukturen

16. Dynamische Datenstrukturen Datenstrukturen 6. Dynamische Datenstrukturen Eine Datenstruktur organisiert Daten so in einem Computer, dass man sie effizient nutzen kann. Verkettete Listen, Abstrakte Datentypen Stapel, Warteschlange

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa AG Softech FB Informatik TU Kaiserslautern Lernziele Abstrakte Datentypen Stack und Queue zu implementieren und anzuwenden Vorteile von parametrischer Polymorphie

Mehr

Informatik II Übung 7 Gruppe 7

Informatik II Übung 7 Gruppe 7 Informatik II Übung 7 Gruppe 7 Leyna Sadamori leyna.sadamori@inf.ethz.ch Informatik II Übung 7 Leyna Sadamori 10. April 2014 1 Administratives Nächste Übung fällt leider aus! Bitte eine andere Übung besuchen.

Mehr

Programmieren 2 16 Java Collections und Generizität

Programmieren 2 16 Java Collections und Generizität Programmieren 2 16 Java Collections und Generizität Bachelor Medieninformatik Wintersemester 2015 Dipl.-Inform. Ilse Schmiedecke schmiedecke@beuth-hochschule.de 1 Faulheit professionell: Fertige Datenbehälter

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Java Generics und Java API (2/2) Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck https://www.itm.uni-luebeck.de/people/fischer #2 Listen Bisher: Collections

Mehr

Grundlagen der Programmierung Prof. H. Mössenböck. 15. Pakete

Grundlagen der Programmierung Prof. H. Mössenböck. 15. Pakete Grundlagen der Programmierung Prof. H. Mössenböck 15. Pakete Idee Paket = Sammlung zusammengehöriger Klassen (Bibliothek) Zweck mehr Ordnung in Programme bringen bessere Kontrolle der Zugriffsrechte (wer

Mehr

II.4.4 Exceptions - 1 -

II.4.4 Exceptions - 1 - n 1. Unterklassen und Vererbung n 2. Abstrakte Klassen und Interfaces n 3. Modularität und Pakete n 4. Ausnahmen (Exceptions) n 5. Generische Datentypen n 6. Collections II.4.4 Exceptions - 1 - Ausnahmen

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 15 Einstieg in die Informatik mit Java Collections Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 15 1 Überblick Collections 2 Hierarchie von Collections 3 Verwendung

Mehr

Kapitel 5: Iterierbare Container

Kapitel 5: Iterierbare Container Kapitel 5: Iterierbare Container Foreach-Schleife Interface Iterator Interface Iterable Iterator-Schleife und Foreach-Schleife Generische Liste mit Iteratoren Prof. Dr. O. Bittel, HTWG Konstanz Programmiertechnik

Mehr

ADT: Java Collections und ArrayList

ADT: Java Collections und ArrayList ADT: Java Collections und ArrayList Überblick der Klassen Object File Collections Map List Set ArrayList LinkedList SortedSet HashSet SortedSet Methode ArrayList Klasse I Beschreibung void add(int position,

Mehr

1. Die rekursive Datenstruktur Liste

1. Die rekursive Datenstruktur Liste 1. Die rekursive Datenstruktur Liste 1.6 Die Datenstruktur Stapel Ein Stack, auch Stapel oder Keller genannt, ist eine Datenstruktur, bei der die Elemente nur an einem Ende der Folge eingefügt bzw. gelöscht

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern Überblick Parametrisierte Datentypen mit Java Generics Java Collections Framework Parametrisierte

Mehr

2.4 Datenabstraktion und Objektorientierung Datenabstraktion in Programmiersprachen

2.4 Datenabstraktion und Objektorientierung Datenabstraktion in Programmiersprachen 2.4 Datenabstraktion und Objektorientierung 2.4.1 Datenabstraktion in Programmiersprachen Datenabstraktion: zur Beherrschung von Komplexität unerlässlich. In jeder Programmiersprache kann man gemäß den

Mehr

Informatik II Übung 6

Informatik II Übung 6 Informatik II Übung 6 Gruppe 2 Carina Fuss cfuss@student.ethz.ch 11.4.2018 Carina Fuss 11.4.2018 1 Übung 6 Nachbesprechung Übung 5 Objektorientierung Vererbung, Polymorphie, abstrakte Klassen, Interfaces,

Mehr

Übung Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen Übung Algorithmen und Datenstrukturen Sommersemester 2017 Marc Bux, Humboldt-Universität zu Berlin Agenda 1. (Sortierte) Listen 2. Stacks & Queues 3. Datenstrukturen 4. Rekursion und vollständige Induktion

Mehr

Stacks, Queues & Bags. Datenstrukturen. Pushdown/Popup Stack. Ferd van Odenhoven. 19. September 2012

Stacks, Queues & Bags. Datenstrukturen. Pushdown/Popup Stack. Ferd van Odenhoven. 19. September 2012 , Queues & Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 19. September 2012 ODE/FHTBM, Queues & 19. September 2012 1/42 Datenstrukturen Elementare Datenstrukturen

Mehr

JAVA KURS COLLECTION

JAVA KURS COLLECTION JAVA KURS COLLECTION COLLECTIONS Christa Schneider 2 COLLECTION Enthält als Basis-Interface grundlegende Methoden zur Arbeit mit Collections Methode int size() boolean isempty() boolean contains (Object)

Mehr

Datenstrukturen. Ziele

Datenstrukturen. Ziele Datenstrukturen Ziele Nutzen von Datenstrukturen Funktionsweise verstehen Eigenen Datenstrukturen bauen Vordefinierte Datenstrukturen kennen Hiflsmethoden komplexer Datenstrukten kennen Datenstrukturen

Mehr

Programmiermethodik 1. Klausur

Programmiermethodik 1. Klausur Programmiermethodik 1. Klausur 27. 6. 2013 Name Matrikelnummer Aufgabe mögliche Punkte erreichte Punkte 1 21 2 20 3 19 4 19 5 21 6 20 Gesamt 120 1 Seite 2 von 18 Aufgabe 1) Objekt-Orientierung und Vererbung

Mehr

Einführung in die Programmierung I Systematisches Programmieren. Thomas R. Gross. Department Informatik ETH Zürich

Einführung in die Programmierung I Systematisches Programmieren. Thomas R. Gross. Department Informatik ETH Zürich 252-0027 Einführung in die Programmierung I 10.0 Systematisches Programmieren Thomas R. Gross Department Informatik ETH Zürich Copyright (c) Pearson 2013 and Thomas Gross 2016 All rights reserved. Uebersicht

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Tafelübung 03 Vererbung, Polymorphie, Sichtbarkeit, Interfaces Clemens Lang T2 11. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/26 Klassen und Objekte Klassen und Objekte

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1 Kapitel 11 Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 2 Ziele Implementierungen für

Mehr

Java Einführung Collections

Java Einführung Collections Java Einführung Collections Inhalt dieser Einheit Behälterklassen, die in der Java API bereitgestellt werden Wiederholung Array Collections (Vector, List, Set) Map 2 Wiederholung Array a[0] a[1] a[2] a[3]...

Mehr

Java I Vorlesung Generics und Packages

Java I Vorlesung Generics und Packages Java I Vorlesung 9 Generics und Packages 21.6.2004 Generics Packages Qualifizierte Namen Mehr zu Zugriffsklassen Generics (Java 1.5) Die Klassen im Java Collections Framework sind mit dem Typ ihrer Elemente

Mehr

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen Aufgabenblatt 4 Aufgabe 1 1. Erläutern Sie in eigenen Worten die Begriffe Datenstruktur, Datentyp und abstrakter Datentyp. Nutzen Sie das Beispiel

Mehr

7.0 Arbeiten mit Objekten und Klassen

7.0 Arbeiten mit Objekten und Klassen 252-0027 Einführung in die Programmierung 7.0 Arbeiten mit Objekten und Klassen Thomas R. Gross Department Informatik ETH Zürich Copyright (c) Pearson 2013. and Thomas Gross 2016 All rights reserved. Uebersicht

Mehr

Programmieren in Java -Eingangstest-

Programmieren in Java -Eingangstest- Programmieren in Java -Eingangstest- Nummer: 1. Studiengang: Informatik B.Sc. Informatik M.Sc. ESE B.Sc. ESE M.Sc. Sonstiges: Fachsemester: Bitte Fragen, die Sie nicht beantworten können unbedingt mit

Mehr

Informatik - Übungsstunde

Informatik - Übungsstunde Informatik - Übungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zürich Woche 08-25.04.2018 Lernziele const: Reference const: Pointer vector: iterator using Jonas Lauener (ETH Zürich) Informatik

Mehr

B2.1 Abstrakte Datentypen

B2.1 Abstrakte Datentypen Algorithmen und Datenstrukturen 21. März 2018 B2. Abstrakte Datentypen Algorithmen und Datenstrukturen B2. Abstrakte Datentypen B2.1 Abstrakte Datentypen Marcel Lüthi and Gabriele Röger B2.2 Multimengen,

Mehr

Einführung in die Programmierung. 8.0 Vererbung. Thomas R. Gross. Department Informatik ETH Zürich

Einführung in die Programmierung. 8.0 Vererbung. Thomas R. Gross. Department Informatik ETH Zürich 252-0027 Einführung in die Programmierung 8.0 Vererbung Thomas R. Gross Department Informatik ETH Zürich Copyright (c) Pearson 2013 and Thomas Gross 2016 All rights reserved. Uebersicht 8.2 Selektiv Verhalten

Mehr

1. Welches Interface ist nicht von Collection abgeleitet? A. B. C. D. List Set Map SortedSet. 2. Welche Aussagen sind richtig?

1. Welches Interface ist nicht von Collection abgeleitet? A. B. C. D. List Set Map SortedSet. 2. Welche Aussagen sind richtig? Prof. Dr. Detlef Krömker Ashraf Abu Baker Robert-Mayer-Str. 10 60054 Frankfurt am Main Tel.: +49 (0)69798-24600 Fax: +49 (0)69798-24603 EMail: baker@gdv.cs.uni-frankfurt.de 1. Welches Interface ist nicht

Mehr

ALP II Dynamische Datenmengen Datenabstraktion

ALP II Dynamische Datenmengen Datenabstraktion ALP II Dynamische Datenmengen Datenabstraktion O1 O2 O3 O4 SS 2012 Prof Dr Margarita Esponda M Esponda-Argüero 1 Dynamische Datenmengen Dynamische Datenmengen können durch verschiedene Datenstrukturen

Mehr

Modularisierung in Java: Pakete Software Entwicklung 1

Modularisierung in Java: Pakete Software Entwicklung 1 Modularisierung in Java: Pakete Software Entwicklung 1 Annette Bieniusa, Mathias Weber, Peter Zeller Um zusammengehörende Klassen, Interfaces, etc. gemeinsam zu verwalten, Sichtbarkeiten einzugrenzen und

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1 Kapitel 13 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1 Kapitel 12 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch

Mehr

Stapel (Stack, Keller)

Stapel (Stack, Keller) Stapel (Stack, Keller) Eine wichtige Datenstruktur ist der Stapel. Das Prinzip, dass das zuletzt eingefügte Element als erstes wieder entfernt werden muss, bezeichnet man als LIFO-Prinzip (last-in, first-out).

Mehr

Java Tools JDK. IDEs. Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation

Java Tools JDK. IDEs.  Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation Java Tools JDK http://www.oracle.com/technetwork/java/javase/ Downloads IDEs Java SE 8 Java SE 8 Documentation Eclipse http://www.eclipse.org IntelliJ http://www.jetbrains.com/idea/ NetBeans https://netbeans.org/

Mehr

14. Java Objektorientierung

14. Java Objektorientierung Objektorientierung: Verschiedene Aspekte Daten Typhierarchie Objekte 14. Java Objektorientierung Code Vererbung Unter- und Oberklassen Klassen, Vererbung, Kapselung Methoden überschreiben Unterklassen

Mehr

Beispiel: die Klasse Brüche

Beispiel: die Klasse Brüche Universität München, Hans-Peter Kriegel und Thomas Seidl Informatik II -138 Beispiel: die Klasse Brüche class Fraction { int num; Int denom; // numerator // denominator Fraction (int n, int d) { num =

Mehr

13. Dynamische Datenstrukturen

13. Dynamische Datenstrukturen Motivation: Stapel. Dynamische Datenstrukturen Verkettete Listen, Abstrakte Datentypen Stapel, Warteschlange, Sortierte Liste 40 40 Motivation: Stapel ( push, pop, top, empty ) Wir brauchen einen neuen

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa AG Softech FB Informatik TU Kaiserslautern Klassenattribute und -methoden Bieniusa Software Entwicklung 1 2/ 23 Beispiel: Klassenattribute I class Uebungsgruppe

Mehr

Einführung in die Programmierung mit Java

Einführung in die Programmierung mit Java Einführung in die Programmierung mit Java Teil 14: Verkettete Listen Martin Hofmann Steffen Jost LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München Stack 18.

Mehr

7. Verkettete Strukturen: Listen

7. Verkettete Strukturen: Listen 7. Verkettete Strukturen: Listen Java-Beispiele: IntList.java List.java Stack1.java Version: 4. Jan. 2016 Vergleich: Schwerpunkte Arrays verkettete Listen Listenarten Implementation: - Pascal (C, C++):

Mehr

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen Schwerpunkte 7. Verkettete Strukturen: Listen Java-Beispiele: IntList.java List.java Stack1.java Vergleich: Arrays verkettete Listen Listenarten Implementation: - Pascal (C, C++): über Datenstrukturen

Mehr

public interface Stack<E> { public void push(e e); public E pop();

public interface Stack<E> { public void push(e e); public E pop(); ADS Zusammenfassung René Bernhardsgrütter 02.04.2012 1 Generics Gewähren Typsicherheit und können für verschiedene Datentypen ohne Casts verwendet werden. Beim Erstellen der Klasse werden Platzhalter für

Mehr

Propädeutikum Programmierung in der Bioinformatik

Propädeutikum Programmierung in der Bioinformatik Propädeutikum Programmierung in der Bioinformatik Java Collections Thomas Mauermeier 15.01.2019 Ludwig-Maximilians-Universität München Collections? Was ist eine Collection? Container für mehrere Objekte

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java Vorlesung 02: Methoden Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2017 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1 / 17 Inhalt Scanner

Mehr

Schnittstellen, Stack und Queue

Schnittstellen, Stack und Queue Schnittstellen, Stack und Queue Schnittstelle Stack Realisierungen des Stacks Anwendungen von Stacks Schnittstelle Queue Realisierungen der Queue Anwendungen von Queues Hinweise zum Üben Anmerkung: In

Mehr

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung Warum Objektorientierung Daten und Funktionen möglichst eng koppeln und nach außen kapseln Komplexität der Software besser modellieren

Mehr

Data Structures. Christian Schumacher, Info1 D-MAVT Linked Lists Queues Stacks Exercise

Data Structures. Christian Schumacher, Info1 D-MAVT Linked Lists Queues Stacks Exercise Data Structures Christian Schumacher, chschuma@inf.ethz.ch Info1 D-MAVT 2013 Linked Lists Queues Stacks Exercise Slides: http://graphics.ethz.ch/~chschuma/info1_13/ Motivation Want to represent lists of

Mehr

19 Collections Framework

19 Collections Framework Collection = Containterklasse, die andere Objekte enthält. Inhalte: Schnittstellen Implementierungen Algorithmen Vorteile: Einheitlicher Zugriff auf Containerobjekte. Abstraktion von den Implementierungsdetails.

Mehr

Wiederholung. Klassenhierarchie:

Wiederholung. Klassenhierarchie: Wiederholung Klassenhierarchie: class Unter extends Ober {... Die Unterklasse Unter erweitert die Funktionalität ihrer Oberklasse Ober. Objekte der Klasse Unter können anstelle von Objekten der Klasse

Mehr

Kapitel Was ist ein Header? Was ist ein Body? Header: public Account(String newowner, int newpin)

Kapitel Was ist ein Header? Was ist ein Body? Header: public Account(String newowner, int newpin) Kapitel 2.6 1. Was ist ein Header? Was ist ein Body? Header: public Account(String newowner, int newpin) Body: Alles im Block darunter: [...] 2. Geben Sie die Methodensignaturen der TicketMachine (Code

Mehr

Objektorientierte Programmierung. Kapitel 21: Einführung in die Collection Klassen

Objektorientierte Programmierung. Kapitel 21: Einführung in die Collection Klassen Stefan Brass: OOP (Java), 21. Collection Klassen 1/30 Objektorientierte Programmierung Kapitel 21: Einführung in die Collection Klassen Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester

Mehr

OCP Java SE 8. Collections

OCP Java SE 8. Collections OCP Java SE 8 Collections Collections (Interfaces) Iterable Collection Set List Queue SortedSet Deque Collection List erlaubt Duplikate und null behält die Reihenfolge Set erlaubt keine Duplikate Queue

Mehr

Info B VL 11: Innere Klassen/Collections

Info B VL 11: Innere Klassen/Collections Info B VL 11: Innere Klassen/Collections Objektorientiere Programmierung in Java 2003 Ute Schmid (Vorlesung) Elmar Ludwig (Übung) FB Mathematik/Informatik, Universität Osnabrück Info B VL 11: Innere Klassen/Collections

Mehr

14. Java Objektorientierung

14. Java Objektorientierung Objektorientierung: Verschiedene Aspekte Daten Typhierarchie Objekte 14. Java Objektorientierung Code Vererbung Unter- und Oberklassen Klassen, Vererbung, Kapselung Methoden überschreiben Unterklassen

Mehr

Kapitel 4: Datentyp Keller und Schlange

Kapitel 4: Datentyp Keller und Schlange Kapitel 4: Datentyp Keller und Schlange Keller (Stack) Schlange (Queue) 4-1 Definition Keller und seine Operationen Ein Keller (engl. Stack; Stapel) ist eine endliche Menge von Elementen mit einer LIFO-Organisation

Mehr

12 Abstrakte Klassen, finale Klassen und Interfaces

12 Abstrakte Klassen, finale Klassen und Interfaces 12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,

Mehr

EINFÜHRUNG IN DIE PROGRAMMIERUNG

EINFÜHRUNG IN DIE PROGRAMMIERUNG EINFÜHRUNG IN DIE PROGRAMMIERUNG GRUNDLAGEN Tobias Witt!! 24.03.2014 ORGANISATORISCHES 09:00-10:30! Täglich Übungen zur Vertiefung! Laptop hier nicht erforderlich! Linux, OS X! Freitag: http://hhu-fscs.de/linux-install-party/

Mehr

14. Java Objektorientierung. Klassen, Vererbung, Kapselung

14. Java Objektorientierung. Klassen, Vererbung, Kapselung 427 14. Java Objektorientierung Klassen, Vererbung, Kapselung Objektorientierung: Verschiedene Aspekte 428 Daten Typhierarchie Objekte Code Vererbung Unter- und Oberklassen Methoden überschreiben Unterklassen

Mehr

Informatik II. Giuseppe Accaputo, Felix Friedrich, Patrick Gruntz, Tobias Klenze, Max Rossmannek, David Sidler, Thilo Weghorn FS 2017

Informatik II. Giuseppe Accaputo, Felix Friedrich, Patrick Gruntz, Tobias Klenze, Max Rossmannek, David Sidler, Thilo Weghorn FS 2017 1 Informatik II Übung 6 Giuseppe Accaputo, Felix Friedrich, Patrick Gruntz, Tobias Klenze, Max Rossmannek, David Sidler, Thilo Weghorn FS 2017 Heutiges Programm 2 1 Klassen - Technisch 2 Prediscussion

Mehr

Algorithmen und Programmierung III

Algorithmen und Programmierung III Musterlösung zum 5. Aufgabenblatt zur Vorlesung WS 2006 Algorithmen und Programmierung III von Christian Grümme Aufgabe 1 Implementieren von ADTs Testlauf der Klasse TestDeque in der z05a1.jar: 10 Punkte

Mehr

Ausdrücke in Scala. Funktionale Programmierung. Christoph Knabe FB VI

Ausdrücke in Scala. Funktionale Programmierung. Christoph Knabe FB VI Ausdrücke in Scala Funktionale Programmierung Christoph Knabe FB VI 17.10.2014 Inhalt Einfache Ausdrücke Infix-Notation für Methodenaufruf Sonderzeichen in Bezeichnern Schlüsselwörter Konstanten Variablen

Mehr

Programmieren 2 15 Abstrakte Datentypen

Programmieren 2 15 Abstrakte Datentypen Programmieren 2 15 Abstrakte Datentypen Bachelor Medieninformatik Sommersemester 2015 Dipl.-Inform. Ilse Schmiedecke schmiedecke@beuth-hochschule.de 1 Verallgemeinerte Datenbehälter Typ, der eine variable

Mehr

Rechtsbelehrung. Java und OOP Das Buch Christian Silberbauer 144

Rechtsbelehrung. Java und OOP Das Buch Christian Silberbauer   144 Rechtsbelehrung Dieser Foliensatz ist urheberrechtlich geschützt. Änderungen an den Folien sind untersagt. Ausschließlich eine nicht-kommerzielle Nutzung ist kostenfrei. Andernfalls wird eine Gebühr fällig.

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung WS 2006/2007 Klassen und Vererbung in Java Walter Binder Universität Lugano 2006-11-23 Objektorientierte Programmierung 1 Überblick Konstruktoren Verdecken versus Überschreiben

Mehr

Wiederholung: Zusammenfassung Felder. Algorithmen und Datenstrukturen (für ET/IT) Definition Abstrakter Datentyp. Programm heute

Wiederholung: Zusammenfassung Felder. Algorithmen und Datenstrukturen (für ET/IT) Definition Abstrakter Datentyp. Programm heute Wiederholung: Zusammenfassung Felder Algorithmen und Datenstrukturen (für ET/IT) Wintersemester / Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Ein Feld A kann repräsentiert

Mehr

Heute. Nachbetrachtung Wissensüberprüfung. Sortieren Interface Comparable TreeSet Sortieren von Arrays: Arrays.sort() 3.12.

Heute. Nachbetrachtung Wissensüberprüfung. Sortieren Interface Comparable TreeSet Sortieren von Arrays: Arrays.sort() 3.12. Heute Nachbetrachtung Wissensüberprüfung Sortieren Interface Comparable TreeSet Sortieren von Arrays: Arrays.sort() 3.12.2015 IT I - VO 9 1 Organisatorisches Zwischentest findet am 16.12. von 17:30 bis

Mehr

Algorithmen und Datenstrukturen CS1017

Algorithmen und Datenstrukturen CS1017 Algorithmen und Datenstrukturen CS1017 Th. Letschert TH Mittelhessen Gießen University of Applied Sciences Datenstruktur, Datentyp, Datenabstraktion Abstrakter Datentyp / Datenabstraktion Kollektionen

Mehr

Kapitel 3: Datentyp Keller und Schlange

Kapitel 3: Datentyp Keller und Schlange Kapitel 3: Datentyp Keller und Schlange Keller (Stack) Schlange (Queue) Prof. Dr. O. Bittel, HTWG Konstanz Programmiertechnik II Datentyp Keller und Schlange SS 2019 3-1 Definition Keller und seine Operationen

Mehr

Java Generics & Collections

Java Generics & Collections Praktikum Effizientes Programmieren (Sommersemester 2018) Dennis Reuling 1 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018) Agenda Teil 1 Generics 2 / 1 Praktikum Effizientes Programmieren

Mehr

2.2 Spezifikation abstrakter Datentypen. 2.3 Implementierung und Anwendung von ADT. 2.4 Datenabstraktion und Objektorientierung

2.2 Spezifikation abstrakter Datentypen. 2.3 Implementierung und Anwendung von ADT. 2.4 Datenabstraktion und Objektorientierung Inhaltsverzeichnis (update) 2 Datenabstraktion 2.1 Begriffe 2.2 Spezifikation abstrakter Datentypen 2.2.1 Algebraische Spezifikation 2.2.2 Modellierende Spezifikation 2.3 Implementierung und Anwendung

Mehr

Lineare Datenstrukturen: Felder, Vektoren, Listen Modelle: math. Folge (a i ) i=1.. mit Basistyp T oder: [T]

Lineare Datenstrukturen: Felder, Vektoren, Listen Modelle: math. Folge (a i ) i=1.. mit Basistyp T oder: [T] Teil II: Datenstrukturen Datenstrukturen Lineare Datenstrukturen: Felder, Vektoren, Listen Modelle: math. Folge (a i ) i=1.. mit Basistyp T oder: [T] Nichtlineare Datenstrukturen: Bäume Modell(e): spezielle

Mehr

19 Collections Framework

19 Collections Framework Collection = Containterklasse, die andere Objekte enthält. Inhalte: Schnittstellen Implementierungen Algorithmen Vorteile: Einheitlicher Zugriff auf Containerobjekte. Abstraktion von den Implementierungsdetails.

Mehr

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke Institut für Programmierung und Reaktive Systeme Java 6 Markus Reschke 13.10.2014 OOP Objekte = Verhalten (durch Methoden) + Daten (durch Attribute) Klassen = Baupläne für Objekte Kapselung von Programmteilen

Mehr

ListElement (E i n f o, ListElement<E> prev, ListElement<E> next ) {

ListElement (E i n f o, ListElement<E> prev, ListElement<E> next ) { TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen SS 2011 Einführung in die Informatik I Übungsblatt 11 Prof. Dr. Helmut Seidl, A. Lehmann, A. Herz,

Mehr

Informatik für Mathematiker und Physiker Woche 7. David Sommer

Informatik für Mathematiker und Physiker Woche 7. David Sommer Informatik für Mathematiker und Physiker Woche 7 David Sommer David Sommer 30. Oktober 2018 1 Heute: 1. Repetition Floats 2. References 3. Vectors 4. Characters David Sommer 30. Oktober 2018 2 Übungen

Mehr