Programmieren II. Datenstrukturen / Das Collection-Framework. Heusch 14 Ratz Institut für Angewandte Informatik

Größe: px
Ab Seite anzeigen:

Download "Programmieren II. Datenstrukturen / Das Collection-Framework. Heusch 14 Ratz Institut für Angewandte Informatik"

Transkript

1 Programmieren II Datenstrukturen / Das Collection-Framework Heusch 14 Ratz

2 Datenstrukturen (1) Datenstrukturen sind strukturierte Sammlungen von Daten die dazu dienen, Informationen im Speicher zu verwalten. Bereits seit JDK 1.0 gibt es verschiedene vordefinierte Datenstrukturen. Das Paket java.util enthält die Klassen Hashtable, Vector, Stack und das Interface Enumeration. Außerdem ist es schon seit JDK 1.0 möglich, mithilfe von verketteten Verweisen benutzerdefinierte Datenstrukturen zu implementieren. Für viele Anwendungen reichten diese Datenstrukturen bzw. Möglichkeiten jedoch nicht aus, bzw. die Implementierung der Anwendung war mit ihnen relativ aufwendig. 2 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

3 Datenstrukturen (2) Aus diesem Grund wird seit JDK 1.2 das Java Collection- Framework mitgeliefert. Dieses Framework enthält eine Reihe von Klassen und Interfaces für oft benötigte Sammlungen von Objekten. Außerdem enthält es zugehörige Algorithmen. In Java 1.5 wurden diese um sog. Generics (generische Datentypen) erweitert. Im Folgenden werden zunächst das Collection-Framework sowie grob die Datenstrukturen des JDK 1.0 vorgestellt. Danach lernen wir dann Generics kennen. 3 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

4 Das Java Collection-Framework Das Java Collection-Framework stellt eine Bibliothek zur Verfügung, die viele häufig benötigte Datenstrukturen enthält (im Package java.util). Das Collection-Frameworks umfasst unterschiedliche Teile: In Interfaces sind die (abstrakten) Methoden für unterschiedliche Arten von Datensammlungen definiert (z.b. im Interface List für Listen). Die Interfaces definieren aber nur die Schnittstellen für den Zugriff. Implementierungen der Interfaces realisieren diese Methoden entsprechend einer bestimmten Speicherungsstrategie der Daten. Z. B. kann eine Liste mit einem Array oder aber durch Verkettung der Elemente realisiert werden. Die Klasse Collections bietet darüber hinaus zusätzliche Algorithmen für Daten-Kollektionen, z.b. für das Sortieren von Kollektionen. 4 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

5 Interfaces des Collection-Frameworks Das Collection-Framework enthält die folgenden Interfaces: Collection: Interface für eine beliebige Sammlung von Objekten. Die Interfaces List, Set und SortedSet sind hiervon abgeleitet. List: Interface für eine geordnete Folge von Objekten. Über einen Index kann auf eine best. Position zugegriffen werden. Ein neues Element kann an einer beliebigen Stelle in einer List eingefügt werden. Duplikate sind erlaubt. Set: Interface für eine Sammlung von Objekten mit Mengencharakter. Duplikate sind nicht erlaubt. SortedSet ist eine Erweiterung von Set. Hier werden die Elemente in sortierter Form geliefert, z.b. aufsteigend. Map: Interface für Schlüssel-Wert-Paare (Assoziativspeicher). Jedem Schlüssel ist eindeutig ein Wert zugewiesen. Schlüssel können keine Duplikate enthalten, Werte schon. SortedMap ist eine Map, deren Schlüssel sortiert sind. 5 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

6 Wichtige Methoden des Interfaces Collection Beispielhaft seien hier einige Methoden des Interfaces Collection aufgeführt: boolean add(object o) fügt das Objekt o zum Collection-Objekt hinzu (falls möglich bzw. nötig). boolean remove(object o) Entfernt das Objekt o aus dem Collection-Objekt, falls es vorhanden ist. boolean contains(object o) Liefert true, falls das Collection-Objekt ein inhaltlich gleiches Element enthält, sonst false. int size() Liefert die aktuelle Anzahl der Elemente des Collection-Objekts. Iterator iterator() Liefert ein Iterator-Objekt für das Collection-Objekt. Diese Methoden vergleichen die Elemente mit equals() auf Gleichheit. 6 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

7 Zusätzliche Methoden des Interfaces List Beispielhaft seien einige zusätzliche Methoden des Interfaces List (erweitert Collection) aufgeführt: Object get(int i) Liefert das i-te Objekt aus der Liste. int indexof(object o) Liefert den Index des ersten Vorkommens des Objekts o im List- Objekt, falls es vorhanden ist (sonst -1). int lastindexof(object o) Liefert den Index des letzten Vorkommens des Objekts o im List- Objekt, falls es vorhanden ist (sonst -1). boolean remove(int i) Entfernt das i-te Objekt aus dem List-Objekt. Anmerkung: Vorsicht ist geboten bei Integer-Objekten! Trotz Autoboxing greift hier boolean remove(object o) von Collection es sind Objekte! 7 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

8 Das Interfaces Map Das Interface Map ist die Schnittstelle für einen Assoziativspeicher. In einem Map-Speicher wird ein zu speichernder Wert jeweils zusammen mit einem Schlüssel gespeichert (Schlüssel-Wert-Paare). Mit dem Schlüssel kann man dann wieder auf den Wert zugreifen. Beispiel: Kundenverwaltung in einem Online-Shop (eindeutiger Benutzername, z.b. -Adresse, und Kunden-Objekt) Schlüssel und Wert sind Objekte (Schlüssel-Objekt, Wert-Objekt) Dabei gilt: Ein Schlüssel darf nur einmal in der Tabelle vorkommen. Zwei Schlüssel-Objekte, die im Sinne von equals() gleich sind, werden als gleicher Schlüssel angesehen. Jedem Schlüssel ist eindeutig ein Wert zugewiesen. Das Verfahren bietet einen Kompromiss zwischen benötigtem Speicherplatz und benötigter Zeit zum Wiederauffinden eines Werts. 8 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

9 Wichtige Methoden des Interfaces Map (1) Object put(object key, Object value) Fügt das Objekt value unter dem Schlüssel key zum Map-Objekt hinzu. Existiert für diesen Schlüssel bereits ein Wert in der Map, wird dieser ersetzt und der vorherige Wert als Ergebnis der Methode zurückgegeben, ansonsten null. Object get(object key) Liefert den Wert, der im dem Map-Objekt unter dem Schlüssel key hinterlegt ist (oder null, falls kein Wert vorhanden). boolean containskey(object key) Prüft: Ist dieser Schlüssel enthalten? boolean containsvalue(object value) Prüft: Ist dieser Wert enthalten? Object remove(object key) Entfernt Schlüssel und zugehörigen Wert. 9 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

10 Wichtige Methoden des Interfaces Map (2) Set keyset() Liefert die im Map-Objekt enthaltenen Schlüssel als Set. Collection values() Liefert alle Werte als Collection. int size() Liefert die aktuelle Anzahl der Schlüssel-Wert-Paare, die im Map-Objekt gespeichert sind. void clear() Entfernt alle Schlüssel-Wert-Paare. boolean isempty() Testet, ob es keine Schlüssel-Wert-Paare in der Map gibt. 10 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

11 Implementierungen dieser Interfaces (1) Tabellarische Darstellung der verfügbaren Implementierungen der Collection-Framework-Interfaces: Klasse \ Interface List Set SortedSet Map SortedMap JDK 1.0 LinkedList ArrayList Vector HashSet TreeSet HashMap WeakHashMap TreeMap Hashtable 11 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

12 Implementierungen dieser Interfaces (2) LinkedList implementiert das List-Interface und speichert seine Elemente in einer verketteten Liste. ArrayList implementiert das List-Interface und speichert seine Elemente in einem Array. Werden in einer Liste häufig Elemente eingefügt oder gelöscht, hat LinkedList eine bessere Performance als ArrayList. HashSet implementiert das Set-Interface und speichert seine Elemente in einer hash-basierten Datenstruktur. TreeSet implementiert das SortedSet-Interface und speichert seine Elemente in einem Baum. HashMap implementiert das Map-Interface und speichert seine Elemente in einer Hash-Tabelle. WeakHashMap implementiert das Map-Interface und speichert seine Elemente in einer Hash-Tabelle. Schlüssel-Wert-Paare werden automatisch vom Garbage-Collector entfernt, wenn das Schlüssel-Objekt außerhalb der WeakHashMap nicht mehr referenziert wird. TreeMap implementiert das SortedMap-Interface und speichert seine Elemente in einem Baum. 12 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

13 Die Klasse java.util.linkedlist Die Klasse LinkedList ist eine Implementierung des Interfaces List. Sie speichert den Vorgänger und Nachfolger der einzelnen Elemente (doppelt verkettete Listen). Sie eignet sich besonders gut beim häufigen Einfügen und Löschen von Elementen, da nur die Nachbarverweise verändert werden müssen. Der Zugriff auf ein Element über den Index ist jedoch langsam (für n-tes Element müssen n Verkettungen durchlaufen werden). In einer LinkedList kann jedes von Object abgeleitete Objekt und zusätzlich auch null-werte gespeichert werden 13 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

14 Die Klasse java.util.arraylist Die Klasse ArrayList ist ebenfalls eine Implementierung des Interfaces List. Sie repräsentiert ein Array mit einer variablen Anzahl von Elementen. Dessen Länge wird bei Bedarf automatisch angepasst. Auf die einzelnen Elemente kann über einen Index direkt zugegriffen werden. In einer ArrayList kann jedes von Object abgeleitete Objekt gespeichert werden, jedoch keine null-werte. Hinweis: Wenn eine sichere Nebenläufigkeit (Thread-Sicherheit) erforderlich ist, muss die Klasse Vector verwendet oder dies über einen Wrapper angefordert werden (folgt später). 14 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

15 Beispiel 1 für List: mit vereinfachter for-anweisung import java.util.arraylist; import java.util.list; public class ListExample { Ausgabe This is an example Element #4: example public static void main(string[] args) { List list = new ArrayList(); // Interface List list.add("this"); list.add("is"); list.add("an"); list.add("example"); // Collection mit vereinfachter for-anweisung durchlaufen for(object o : list) { // List-Objekt wie Array v. Typ Object genutzt System.out.println(o.toString()); // Auf ein Element zugreifen mit get(int) System.out.println("Element #4: " + list.get(3)); tostring() ist hier optional 15 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

16 Beispiel 2 für List: mit "normaler" for-anweisung import java.util.arraylist; import java.util.list; public class ListExample2 { public static void main(string[] args) { List list = new ArrayList(); list.add("whatever"); list.add(4711); // Autoboxing: new Integer(4711) list.add(3.14); // Autoboxing: new Double(3.14) list.add("08/15"); for(int i=0; i<list.size(); i++) { // Zugriff auf das i-te Element ("dynam. Array") System.out.println(list.get(i)); Ausgabe Whatever /15 16 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

17 Beispiel für Set import java.util.set; import java.util.treeset; public class SetExample { Ausgabe SORTIERT! Mia Peter Uli Element count: 3 public static void main(string[] args) { Set myset = new TreeSet(); // sortierte Menge myset.add("mia"); myset.add("uli"); myset.add("peter"); myset.add("mia"); // Duplikat wird nicht hinzugefügt! String m = new String("Mia"); myset.add(m); // Duplikat wird nicht hinzugefügt! for(object o : myset) { // Set wie Object-Array genutzt System.out.println(o); System.out.println("Element count: " + myset.size()); Aufgabe Ziehung der Lottozahlen des Übungsblatts Datenstrukturen 17 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

18 Beispiel: Vorsicht bei remove() (1) import java.util.arraylist; import java.util.list; public class ListRemove1 { public static void main(string[] args) { List list = new ArrayList(); list.add("this"); list.add("is"); list.add("an"); list.add("example"); list.remove("is"); // Entfernen vor der Schleife for (Object o : list) { System.out.println(o); Ausgabe This an example 18 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

19 Beispiel: Vorsicht bei remove() (2) import java.util.arraylist; import java.util.list; public class ListRemove2 { public static void main(string[] args) { List list = new ArrayList(); list.add("this"); list.add("is"); list.add("an"); list.add("example"); for (Object o : list) { if (o.equals("is")){ list.remove(o); // Entfernen innerhalb der Schleife Ausgabe Exception in thread "main" java.util.concurrentmodificationexception at java.util.arraylist$itr.checkforcomodification(unknown Source) at java.util.arraylist$itr.next(unknown Source) at ListRemove2.main(ListRemove2.java:14) 19 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

20 Beispiel: Vorsicht bei remove() (3) import java.util.arraylist; import java.util.list; public class ListRemove3 { public static void main(string[] args) { List list = new ArrayList(); list.add("this"); list.add("is"); list.add("an"); list.add("example"); Ausgabe Element count: 3 for (Object o : list) { if (o.equals("is")){ list.remove(o); // Entfernen innerhalb der Schleife und break; // Beenden der Schleife nach remove()! System.out.println("Element count: " + list.size()); 20 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

21 Beispiel: Vorsicht bei remove() (4) import java.util.arraylist; import java.util.list; public class ListRemove4 { public static void main(string[] args) { List list = new ArrayList(); list.add("this"); list.add("is"); list.add("an"); list.add("example"); Ausgabe Element count: 3 for(int i=0; i<list.size(); i++) { // size() ist dynamisch! if (list.get(i).equals("is")) { list.remove(i); System.out.println("Element count: " + list.size()); 21 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

22 Die Klasse java.util.hashmap HashMap ist eine Implementierung von Map gemäß dem Hash-Verf. Beim Hash-Verfahren wird die Adresse für die Speicherung des Schlüssel-Wert-Paares im Speicher aus dem Schlüssel berechnet. Über den Schlüssel kann dann auch wieder auf das gespeicherte Schlüssel-Wert-Paar zugriffen werden. Beispiel für das Vorgehen zur Berechnung der Adresse (s. Abb.): Mit der Methode int hashcode() wird der Hash-Code eines Schlüssel-Objekts berechnet. Aus diesem Hash-Code wird dann ein Index in der Hash-Tabelle (z.b. ein Array) berechnet Hash-Index. Hierzu wird z.b. bestimmt: Hash-Code modulo Array-Länge Kollisionen sind möglich: ein Feld in der Hash-Tabelle kann bereits belegt sein (gleicher Hash-Index). In diesem Fall gibt es Verfahren zur Kollisionsauflösung, z.b. nächste freie Stelle suchen, oder Wert zu einer Bucket-Liste hinzufügen. 22 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

23 Mögliches Prinzip für Kollisions-Vermeidung Schlüssel-Objekt A B C hashcode() hashcode() hashcode() Hash-Index = Hash-Code % Tabellengröße 4 = 28 % Hash-Index = Hash-Code % Tabellengröße 5 = 29 % Hash-Index = Hash-Code % Tabellengröße 4 = 36 % A A B A B C Tatsächlicher Index (durch Kollisionsauflösung): 6 23 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

24 Die Klasse java.util.treemap Die Klasse TreeMap ist eine Implementierung des Interfaces SortedMap (und damit auch des Interfaces Map). Die Schlüssel-Wert-Paare werden sortiert nach ihren Schlüsseln in einer Baumstruktur abgelegt. Für diese Sortierung müssen sämtliche Klassen, deren Instanzen als Schlüssel verwendet werden, die Schnittstelle Comparable implementieren oder es muss beim Erzeugen der TreeMap eine Instanz einer Klasse übergeben werden, die die Schnittstelle Comparator implementiert. 24 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

25 Beispiel für Map import java.util.hashmap; import java.util.map; public class MapExample { public static void main(string[] args) { Map bdays = new HashMap(); bdays.put("mia"," "); // Speichern der Schlüssel-Wert-Paare bdays.put("uli"," "); bdays.put("peter"," "); bdays.put("mia"," "); // Duplikat überschreibt Wert! for(object o : bdays.keyset()) { // Liefert enth. Schlüssel als Set System.out.println(o + " born on" + bdays.get(o)); // Liefert Wert zum Schlüssel o Impliziter Aufruf von tostring() Ausgabe Uli born on Mia born on Peter born on W. Geiger, W. Süß, T. Schlachter, C. Schmitt

26 Die Methode hashcode(), hashcode()überschreiben Die Methode hashcode()soll zu jedem Objekt eine möglichst eindeutige Ganzzahl liefern, die das Objekt identifiziert. hashcode() ist eine Methode von Object. Sie wird von verschiedenen Klassen überschrieben, bzw. soll überschrieben werden. Regel: Wenn man die equals()-methode überschreibt, soll man auch die hashcode()-methode überschreiben (Aufforderung: "Generate missing hashcode()"). Beim Überschreiben soll dann gelten: Zwei Objekte, die laut equals()-methode gleich sind, sollen auch den gleichen Hash-Code haben. 26 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

27 Beispiel: Überschreiben von hashcode() class Person { private String surname; private String name; private int age; public Person(String surname, String name, int age) { this.surname = surname; this.name = name; this.age = public boolean equals(object obj) { public int hashcode() { final int prime = 31; int result = 1; result = prime * result + this.age; result = prime * result + ((this.name == null)? 0 : this.name.hashcode()); result = prime * result + ((this.surname == null)? 0 : this.surname.hashcode()); return result; // Getter und Setter-Methoden Tipp: von der IDE generieren lassen! 27 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

28 Besonderheiten bei den Klassen Vector und Hashtable Auch die beiden Klassen Vector und Hashtable sind seit JDK 1.2 Implementierungen der Collection-Interfaces (List bzw. Map). Beide Klassen waren seit der Version 1.0 im JDK enthalten und wurden nachträglich an das Collection-Framework angepasst. Auch aus weiteren Gründen sind sie nicht ganz mit den anderen Collection-Implementierungen gleichzustellen: Zum einen besitzen diese Klassen zusätzlich zu den Methoden der Collection-Interfaces weitere Methoden für den Datenzugriff, die aus Abwärtskompatibilitäts-Gründen weiterhin angeboten werden. Zum anderen ist der Zugriff bei diesen Klassen bereits synchronisiert (vgl. nebenläufige Programmierung mit Threads). Synchronisierte Varianten der oben beschriebenen neuen Implementierungen des Collection-Frameworks muss man explizit über Wrapper-Implementierungen anfordern. Siehe Folien "Die Klasse Collections: Anonyme Implementierungen" 28 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

29 Die Klasse java.util.stack Ein Stapelspeicher (oder "Kellerspeicher") ist konzeptionell ein Speicher, bei dem: ein neues Elemente immer nur oben drauf gepackt werden kann und immer nur das oberste Element entfernt werden kann. Beim Anlegen eines Stacks wird dessen Größe auf 0 initialisiert. In Java repräsentiert die Klasse Stack einen Stapelspeicher (im JDK enthalten seit Version 1.0). Beispiel für das Anlegen eines neuen Stacks: Stack mystack = new Stack(); 29 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

30 Einige Methoden von Stack Object push(object item) legt ein Objekt oben auf den Stack. Object pop() liefert das oberste Objekt des Stacks als Wert und entfernt es aus dem Stack. Object peek() liefert das oberste Objekt ohne es zu entfernen. boolean empty() testet, ob der Stack leer ist. int search(object o) liefert die Position eines Objekts (von oben) im Stack. 30 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

31 Eine Collection durchlaufen mit Iterator (1) Bei den Klassen, die das Interface Collection implementieren, können über einen Iterator (Interface) nacheinander alle Elemente der Kollektion ausgelesen werden. Man sagt, ein Iterator "iteriert" über eine Kollektion. Ein Iterator für eine Kollektion kann über die Collection- Methode Iterator iterator() ermittelt werden. Beim Durchlaufen einer Kollektion können Elemente auch gelöscht werden. Hierfür stellt Iterator die Methode remove() zur Verfügung. 31 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

32 Eine Collection durchlaufen mit Iterator (2) Eine Klasse, die Iterator implementiert, muss die folgenden Methoden enthalten: boolean hasnext() liefert true, wenn die Aufzählung weitere Elemente enthält. Object next() liefert das nächste Element in der Aufzählung. Die Existenz eines nächsten Elements ist sichergestellt, wenn der Aufruf von hasnext() das Ergebnis true liefert. void remove() Entfernt das Element, welches vom Iterator zuletzt geliefert wurde. Beispiel (Nutzung in Schleife): while (d.hasnext()) { System.out.println(d.next().toString()); tostring() ist hier optional 32 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

33 Eine Collection durchlaufen mit Iterator (3) import java.util.iterator; import java.util.list; import java.util.arraylist; Karl Otto Hans Ausgabe public class ListExample { public static void main(string[] args) { List list = new ArrayList(); list.add("karl"); list.add("otto"); list.add("hans"); Iterator iter = list.iterator(); while (iter.hasnext()) { System.out.println(iter.next()); 33 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

34 Iterator benutzen in MAP-Implementierungen Bei Klassen, die nicht das Interface Collection implementieren (Implementierungen von MAP, z. B. die Klasse TreeMap) kann man diese Iterator-Funktionalität nicht direkt nutzen. Über die Methode values() kann man aber eine Collection-Sicht auf die Elemente in der Sammlung (Schlüssel-Wert-Paare) erhalten. Diese ermöglicht einen iterierenden Zugriff auf die Werte der Elemente. Folgendes Beispiel zeigt, wie ein Iterator für die Klasse TreeMap ermittelt und genutzt werden kann: TreeMap tm = new TreeMap(); // Elemente der Kollektion hinzufügen (Schlüssel-Wert-Paare) //... Collection col = tm.values(); // Liefert alle Werte als Collection Iterator iter = col.iterator(); // Elemente durchlaufen while (iter.hasnext()) { Object o = iter.next(); // Verarbeiten der Elemente W. Geiger, W. Süß, T. Schlachter, C. Schmitt

35 Das Interface java.util.enumeration Das Interface Enumeration hat prinzipiell dieselbe Funktionalität wie die Schnittstelle Iterator. Das Interface seit Version 1.0 im JDK enthalten. Über die Schnittstelle Enumeration können alle Elemente einer Datenstruktur nacheinander ausgelesen werden. Im Unterschied zu Iterator können Elemente beim Durchlaufen aber nicht gelöscht werden. Das Interface wird z. B. von der Klasse StringTokenizer implementiert. Aufgabe Bücherei des Übungsblatts Datenstrukturen, hier noch ohne Comparator und Sortierung der Ausgabe 35 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

36 Kollektionen mit Sortierung der Elemente Die Interfaces Comparable und Comparator Klassen, die die Interfaces SortedSet und SortedMap implementieren, bieten eine Sortierung ihrer Elemente. Hierfür müssen alle Elemente in der Kollektion (prinzipiell beliebige Objekte) miteinander vergleichbar sein. Dies kann auf zwei Wegen erreicht werden: Entweder implementieren alle Objekte (bzw. deren Klassen), die in der sortierten Kollektion gespeichert werden, das Interface Comparable oder die Kollektion als Ganzes wird mit einem Objekt initialisiert, welches das Interfaces Comparator implementiert. 36 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

37 Das Interface Comparable Im Interface Comparable ist (nur) die folgende Methode definiert: int compareto(object o) Diese Methode vergleicht das Objekt, für das die Methode ausgeführt wird, mit dem Objekt o im Parameter entsprechend einer Vergleichsregel. Der Rückgabewert der Methode soll folgende Werte liefern: eine negative Zahl, falls dieses Objekt kleiner als o ist 0, falls die beiden Objekte gleich sind eine positive Zahl, falls dieses Objekt größer als o ist Beispiel: Liste von Objekten der Klasse ClassX (z.b. Integer) public class ClassX implements Comparable { //... methodx() liefere Zahlenwert für Objekte für den Vergleich public int compareto(object obj) { return (this.methodx() ((ClassX) obj).methodx()); 37 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

38 Das Interface Comparator Im Interface Comparator ist u.a. die folgende Methode definiert: int compare(object o1, Object o2) Diese Methode vergleicht die Objekte o1 und o2. Sie soll prinzipiell dasselbe Verhalten zeigen wie compareto() bei Comparable: Negativer Rückgabewert, wenn o1 < o2 0 bei Gleichheit positiver Rückgabewert, wenn o1 > o2. Für die Sortierung einer Kollektion mit einem Comparator muss man eine Klasse deklarieren, die das Interface Comparator implementiert und in compare() die Vergleichsregel enthält, und eine konkrete Kollektion über den Konstruktor mit einem Objekt dieser Klasse initialisieren. 38 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

39 Beispiel für die Nutzung eines Comparator Beispiel für die Deklaration einer Klassen, die das Interface Comparator implementiert: import java.util.comparator; public class StringLengthComparator implements Comparator { public int compare(object o1, Object o2) { return ((String) o1).length() - ((String) o2).length(); Beispiel für die Initialisierung einer konkreten Kollektion mit diesem Comparator: SortedMap tm = new TreeMap(new StringLengthComparator()); Hier wird eine TreeMap erzeugt und mit dem Comparator von oben initialisiert. 39 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

40 Die Klasse Collections: Algorithmen (1) In der Klasse Collections (nicht zu verwechseln mit dem Interface Collection) sind mehrere Algorithmen implementiert, die auf Kollektionen angewendet werden können. Einige dieser Algorithmen sind auf alle Collection-Implementierungen anwendbar, andere jedoch nur auf Implementierungen von List. Auf alle Collection-Implementierungen (Implementierungen von List, Set, SortedSet) anwendbare Methoden: static Object max(collection col) liefert das größte Element der Collection col zurück. Diese Methode kann jedoch nur auf Kollektionen angewandt werden, bei denen alle Elemente das Interface Comparable implementieren. static Object max(collection col, Comparator comp) Diese zweite Variante verfügt über einen zweiten Parameter vom Typ Comparator. Bei dieser Methode wird die Vergleichsregel im Comparator angegeben. Die Elemente müssen in diesem Fall nicht Comparable implementieren. 40 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

41 Die Klasse Collections: Algorithmen (2) static Object min(collection col) arbeitet wie max(), liefert jedoch das kleinste Element zurück. Auch von min() gibt es zwei Varianten. Nur auf Implementierungen von List anwendbare Methoden: static void sort(list l) sortiert die Elemente in der Liste l aufsteigend. Diese Variante setzt voraus, dass die Klassen aller enthaltenen Objekte das Interface Comparable implementieren. static void sort(list l, Comparator comp) Dieser zweiten Variante von sort wird eine Comparator Instanz als zweites Argument übergeben. Sie hat nicht die o.g. Voraussetzung. static void reverse(list l) ordnet die Elemente der Liste l so um, dass sie in umgekehrter Reihenfolge stehen. 41 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

42 Die Klasse Collections: Algorithmen (3) static void shuffle(list l) permutiert die Elemente in der Liste l zufällig. static int binarysearch(list list, Object key) sucht in der aufsteigend sortierten Liste list das Element key über die binäre Suche. Wird key in der Liste gefunden, liefert binarysearch() die Index- Position des Elements zurück. Wird key nicht gefunden, liefert die Methode den negativen Wert der potenziellen Einfügeposition minus 1 (also immer negative Werte, wenn das Objekt nicht gefunden wird). Alle Algorithmen in der Klasse Collections sind mit statischen Methoden realisiert. 42 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

43 Beispiel für das Sortieren einer Liste import java.util.list; import java.util.arraylist; import java.util.collections; public class ListExample4 { public static void main(string[] args) { List list = new ArrayList(); list.add("karl"); list.add("otto"); list.add("hans"); for (Object o : list) { System.out.println((String)o); Collections.sort(list); for (Object o : list) { System.out.println((String)o); Ausgabe? 43 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

44 Die Klasse Collections: Anonyme Implementierungen (1) Über (Factory-)Methoden der Klasse java.util.collections können anonyme Implementierungen von Kollektionen erzeugt werden. Das sind Implementierungen eines Collection-Interfaces, deren Klassendeklarationen nicht als public deklariert sind. Über diese Methoden ist es möglich, von einem Objekt einer Klasse, die eines der Collection-Interfaces implementiert, eine Version zu erhalten, die synchronisiert bzw. unveränderbar ist. Hierfür stellt die Klasse Collections die Methoden synchronizedxxx() und unmodifiablexxx() zur Verfügung, wobei XXX für eines der Collection-Interfaces steht. Als Parameter bekommen die Methoden jeweils ein Exemplar einer vorhandenen Implementierung übergeben. Als Ergebnis wird die synchronisierte bzw. unveränderbare Implementierung des übergebenen Exemplars zurückgeliefert. 44 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

45 Die Klasse Collections: Anonyme Implementierungen (2) Um z. B. eine synchronisierte Implementierung einer TreeMap zu erhalten, müssen folgende Zeilen Code ausgeführt werden: SortedMap sm; sm = java.util.collections.synchronizedsortedmap(new TreeMap()); // Die Aufrufe an sm sind nun synchronisiert Die erweiterte Funktionalität wird bei dieser Vorgehensweise durch so genannte Wrapper-Implementierungen ("Hüllen") zur Verfügung gestellt. Beim Aufruf von synchronizedxxx() bzw. unmodifiablexxx() wird zunächst ein Exemplar der passenden Wrapper-Implementierung erzeugt. Dieses speichert in einem Datenelement einen Verweis auf das übergebene Original-Exemplar (oben ein Exemplar der Klasse TreeMap). Beim Aufruf der Methoden stellt nun der Wrapper zunächst die neue Funktionalität zur Verfügung (z. B. Synchronisation) und leitet danach den Aufruf an die Original-Implementierung weiter. Diese Methoden der Klasse Collections sind statisch. 45 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

46 Generics Generics bzw. Generizität bedeutet, dass in der Deklaration von Klassen, Schnittstellen und Methoden Variablen verwendet werden können, die einen Datentyp repräsentieren (Typparameter). Erst bei Verwendung dieser Klassen, Schnittstellen und Methoden werden diese Typparameter dann durch konkrete Typen ersetzt. Einer der Hauptgründe für die Einführung von Generics war der Wunsch, die existierenden Collection-Framework-Interfaces und -klassen wie z. B. List um Typsicherheit zu erweitern. Man wollte Konstrukte wie z.b. eine "List of Strings", d. h. eine Liste, die nur String-Objekte aufnehmen kann, sowie entsprechende Listen für andere Objektarten. Aus anderen Programmiersprachen sind vergleichbare Konzepte wie Generics bekannt, teilweise unter anderen Namen. In C++ gibt es die Template-Klassen, also Schablonenklassen. Auch wenn diese syntaktisch einige Ähnlichkeit zu den Generics in Java haben, arbeiten diese völlig anders. 46 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

47 Beispiel: List ohne Generics (1) public void somecode() { List myintlist = new ArrayList(); myintlist.add(new Integer(1234)); myintlist.add(new Integer(5678)); myintlist.add(new Integer(4711)); System.out.println("Sum: " + this.sum(myintlist)); // Addition aller Werte public int sum(list intlist) { int result = 0; for (int i = 0; i < intlist.size(); i++){ result += ((Integer) intlist.get(i)).intvalue(); // unkontrollierter Downcast! return result; Eine Anweisung (z.b. nach Zeile 5) myintlist.add(new String("xxx")); würde zu einem Laufzeitfehler in sum() führen (ClassCastException). 47 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

48 Beispiel: List ohne Generics (2) Ein Sichern des Codes gegen einen Laufzeitfehler wäre möglich mit einem try-catch-block, oder durch Prüfung des Objekt-Typs vor dem Cast: if (intlist.get(i) instanceof Integer) { // W. Geiger, W. Süß, T. Schlachter, C. Schmitt

49 Beispiel: List mit Generics public void somecode() { List<Integer> myintlist = new ArrayList<Integer>(); // Beim Hinzufügen von Objekten zur Liste werden nun // nur noch Integer-Objekte akzeptiert! myintlist.add(new Integer(1234)); myintlist.add(new Integer(5678)); myintlist.add(new Integer(4711)); System.out.println("Sum: " + this.sum(myintlist)); 49 // Addition aller Werte public int sum(list<integer> intlist) { int result = 0; for (int i = 0; i < intlist.size(); i++){ result += intlist.get(i).intvalue(); // kein Typecast mehr notwendig return result; Eine Anweisung myintlist.add(new String("xxx")); würde nun schon vom Compiler nicht akzeptiert werden! W. Geiger, W. Süß, T. Schlachter, C. Schmitt

50 Unsere erste generische Klasse (1) (Einfach verkettete Liste mit Objekten vom Typ T) public class MyLinkedList<T> { private MyLinkedList<T> next; private T value; public MyLinkedList() { public boolean isempty() {// value == null? (letztes Element einer Liste) return this.value == null; public void add(t value) { if (this.isempty()) { // letztes Element? ( leeres Element) this.value = value; // Wert eintragen this.next = new MyLinkedList<T>(); // leeres Element anhängen else { this.next.add(value); //... weiter auf der nächsten Folie 50 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

51 Unsere erste generische Klasse (2) public T get(int index) { if (index < 0 this.isempty()) { throw new IndexOutOfBoundsException(); return (index == 0)? this.value : this.next.get(index-1); public int size() { return this.isempty()? 0 : (this.next.size()+1); public class MyLinkedListTest { public static void main(string[] args) { MyLinkedList<Integer> intlist = new MyLinkedList<>(); intlist.add(new Integer(17)); Integer i = intlist.get(0); System.out.println("i = " + i); Ab Java 1.7: Diamond-Operator Ausgabe? 51 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

52 Typkompatibilität bei generischen Typen Typkompatibilität bei Zuweisungen: Bei einem generischen Typ sind Instanzen mit unterschiedlichem Typ untereinander nicht kompatibel. Folgende Zuweisung ist nicht erlaubt: List<Integer> intlist = new ArrayList<Integer>(); List<Number> list = intlist; // Fehler: inkompatible Typen (Number: Abstr. Oberklasse der Wrapper-Klassen Short, Integer, Double etc.) Hierfür gibt es einen guten Grund. Einmal angenommen, die obige Zuweisung wäre doch erlaubt. Dann wäre folgender Code ebenfalls erlaubt: List<Integer> intlist = new ArrayList<Integer>(); List<Number> list = intlist; // angenommen (!) erlaubt list.add(new Double(3.14)); // wäre dann erlaubt 52 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

53 Wildcards (1) Zunächst einmal kann das Zuweisungsproblem durch Verwendung einer so genannten Wildcard "<?>" (Platzhalter) umgangen werden. Hierdurch gibt man an, dass der Datentyp einen Typparameter hat. Man lässt aber offen, welcher Typ das ist. Hinzufügen von Objekten mit add(): List<Integer> intlist = new ArrayList<Integer>(); List<?> list = intlist; // erlaubt; list ist Variable für Listen mit // beliebigem Datentyp als Typparameter list.add(new Double(3.14)); // nicht erlaubt (siehe unten) list.add(new Integer(1)); // nicht erlaubt (siehe unten) list.add(new Object()); // nicht erlaubt (siehe unten) list.add(null); // erlaubt Für den Compiler ist die Liste list parametrisiert. Es ist für ihn aber nicht ersichtlich, mit welchem Typ. Deshalb gibt es für ihn bei der add()-methode keinen zulässigen Parameter-Typ. Die Folge ist, dass über die Referenzvariable list keine Objekte hinzugefügt werden können. Das einzige, was der Compiler zulassen kann, ist der Wert null. 53 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

54 Wildcards (2) Auslesen von Objekten mit get(): Ähnlich wie beim Hinzufügen verhält es sich beim Auslesen von Objekten per get()-methode: List<Integer> intlist = new ArrayList<Integer>(); intlist.add(new Integer(42)); // Integer-Objekt hinzugefügt List<?> list = intlist; // erlaubt Integer i = list.get(0); Object o = list.get(0); // nicht erlaubt // nur Object erlaubt Der Compiler kann nichts über die konkreten Objekte, die von get() geliefert werden, garantieren, außer dass sie zuweisungskompatibel zu Object sind (dies gilt für jedes konkrete Objekt). 54 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

55 Bounded Wildcards Nach oben oder unten beschränkte Platzhalter Die durch die Verwendung von Wildcards gewonnene Flexibilität ist natürlich nicht befriedigend. Ansatz: "beschränkte" Platzhalter (bounded Wildcards) Bei diesen werden die Wildcards im Klassenbaum nach oben oder nach unten einschränkt. Dies geschieht mit den Schlüsselwörtern extends: Nach oben beschränkte Wildcards (Upper Bound Wildcards, Kovarianz) super: Nach unten beschränkte Wildcards (Lower Bound Wildcards, Kontravarianz) 55 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

56 Beispiele für den Einsatz einer Upper Bound Wildcard Einsatz beim Parameter einer Methode: Im Interface Collection<E> gibt es eine (abstrakte) Methode public boolean addall(collection<? extends E> c) Diese fügt alle Elemente der Collection c in das Collection-Objekt, für das die Methode ausgeführt wird, ein (falls möglich bzw. nötig). Einsatz beim Parameter eines Konstruktors: In der Klasse ArrayList<E> gibt es einen Konstruktor ArrayList(Collection<? extends E> c) Dieser erzeugt ein ArrayList-Objekt und kopiert alle Elemente der Collection c in das neue ArrayList-Objekt. 56 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

57 Upper Bound Wildcards (Kovarianz) Nach oben beschränkte Wildcards. Beispiel: List<Integer> intlist = new ArrayList<Integer>(); intlist.add(new Integer(42)); List<? extends Number> list = intlist; // erlaubt, siehe unten Integer i = list.get(0); // nicht erlaubt (könnte z.b. Double sein) Number n = list.get(0); // erlaubt list.add(i); list.add(n); list.add(null); // nicht erlaubt (Liste könnte z.b. Double sein) // nicht erlaubt (können inkompatibel sein) // erlaubt In Zeile 3 wird die Variable list als parametrisierte Liste definiert und für den Typparameter der Liste festgelegt, dass dieser Number oder aber eine Unterklasse von Number sein muss. Diese Bedingung erfüllt das Objekt, das von intlist referenziert wird, so dass die Zuweisung hier erlaubt ist. 57 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

58 Lower Bound Wildcards (Kontravarianz) (1) Nach unten beschränkte Wildcards. Das Schlüsselwort super hat umgekehrte Auswirkungen wie extends: List<Number> numlist = new ArrayList<Number>(); numlist.add(new Integer(42)); // erlaubt, siehe unten List<? super Integer> list = numlist; // erlaubt, siehe nächste Folie Integer i = list.get(0); // nicht erlaubt (ev. Obj. v. Oberklasse) Number num = list.get(0); // nicht erlaubt (ebenso) Object obj = list.get(0); // erlaubt list.add(obj); list.add(num); list.add(null); list.add(i); // nicht erlaubt (da nicht Integer) // nicht erlaubt (da nicht Integer) // erlaubt // erlaubt (da Integer) In Zeile 1 wird dieses Mal eine Liste erzeugt, die mit Number parametrisiert ist und somit neben Integer-Objekten auch Double-, Long- und andere Objekte (Unterklassen von Number) akzeptiert. Beispielhaft wird in Zeile 2 ein Integer-Objekt eingefügt. 58 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

59 Lower Bound Wildcards (Kontravarianz) (2) In Zeile 3 wird eine Variable definiert, die auf eine Liste referenziert, die mit dem Typ Integer oder einer Oberklasse parametrisiert wurde. Diese Bedingung erfüllt das Objekt, das von numlist referenziert wird, so dass die Zuweisung erlaubt ist. Beim Auslesen von Objekten (Zeile 4 6) kann über deren konkrete Typen nichts zugesichert werden, außer dass sie zuweisungskompatibel zu Object sind. Daher liefert die get()-methode auch nur eine Object-Referenz (s. Zeile 6). Beim Hinzufügen von Elementen (Zeile 7 10) verhält es sich umgekehrt: Es werden (außer null) nur noch Integer-Referenzen akzeptiert, da dies der speziellste Typ ist, der zulässig ist. (Theoretisch auch Unterklassen von Integer) 59 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

60 Aufgaben zu Generics Aufgabe Lottozahlen mit generischem Datentyp: Erweitern (bzw. ändern) Sie die Aufgabe Lottozahlen des Aufgabenblatts Datenstrukturen / Das Collection-Framework so, dass Sie ein Set<Integer>-Objekt für die Speicherung der Zahlen verwenden. Was passiert, wenn Sie versuchen ein Double-Objekt zur Collection hinzuzufügen? Aufgabe Bücherei mit Comparator und sortierter Ausgabe des Bestands sowie mit generischen Datentypen Erweitern (bzw. ändern) Sie Ihre Lösung der Aufgabe Bücherei so, dass Sie für die Liste der Bücher in der Klasse Library eine typisierte Liste List<Book> verwenden. Freiwillig: Verwenden Sie auch ein typisiertes Interface Comparator<Book> zum Erzeugen der Komparatoren (siehe Hinweise bei der Aufgabenstellung). 60 W. Geiger, W. Süß, T. Schlachter, C. Schmitt

Java Schulung. Objektorientierte Programmierung in Java Teil V: Die Java Collection Klassen. Prof. Dr. Nikolaus Wulff

Java Schulung. Objektorientierte Programmierung in Java Teil V: Die Java Collection Klassen. Prof. Dr. Nikolaus Wulff Java Schulung Objektorientierte Programmierung in Java Teil V: Die Java Collection Klassen Prof. Dr. Nikolaus Wulff Collections in Java 2 Java 2 Collections: http://java.sun.com/products/jdk/1.2/docs/guide/collections/index.html

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

Grundlagen der Informatik Generische Klassen

Grundlagen der Informatik Generische Klassen Grundlagen der Informatik Generische Klassen Generische Klassen, das Java-Collection-Framework und mehr Generische Programmierung Beobachtung: In vielen Problemstellungen hängt der grundsätzliche Aufbau

Mehr

equals und hashcode SortedSet NavigableSet Assoziative Container Programmieren II Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2010 1 / 32

equals und hashcode SortedSet NavigableSet Assoziative Container Programmieren II Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2010 1 / 32 Programmieren II Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2010 1 / 32 equals und hashcode SortedSet NavigableSet Assoziative Container 2 / 32 HashSet mit eigener Klasse Wie kann man einen

Mehr

Java Generics & Collections

Java Generics & Collections Java Praktikum Effizientes Programmieren (Sommersemester 2015) Dennis Reuling Agenda 1 2 3 1 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015) Java Subtyping Teil 1 2 / 30 Praktikum Effizientes

Mehr

Schnittstellen implementieren am Beispiel Suchbaum

Schnittstellen implementieren am Beispiel Suchbaum Motivation Informatik mit Java und BlueJ Schnittstellen implementieren am Beispiel Suchbaum von Bernhard Rosing Schreiben Sie eine Klasse Person, deren Instanzen in ein TreeSet (Suchbaum) eingefügt werden

Mehr

1 Polymorphie (Vielgestaltigkeit)

1 Polymorphie (Vielgestaltigkeit) 1 Polymorphie (Vielgestaltigkeit) Problem: Unsere Datenstrukturen List, Stack und Queue können einzig und allein int-werte aufnehmen. Wollen wir String-Objekte, andere Arten von Zahlen oder andere Objekttypen

Mehr

Datenstrukturen in Java

Datenstrukturen in Java Datenstrukturen in Java SEP 350 Datenstrukturen Datenstrukturen ermöglichen Verwaltung von / Zugriff auf Daten (hier: Objekte) Datenstrukturen unterscheiden sich duch Funktionalität Implementierung modulares

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Vorlesung Programmieren

Vorlesung Programmieren Vorlesung Programmieren 15 Java API Prof. Dr. Ralf H. Reussner Version 1.0 LEHRSTUHL FÜR SOFTWARE-DESIGN UND QUALITÄT (SDQ) INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION (IPD), FAKULTÄT FÜR INFORMATIK

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung Kapitel 6 Vererbung Vererbung 1 Ziele Das Vererbungsprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen

Mehr

Versuchsziele Kenntnisse in der Anwendung von: Sortieren mit Klassen Benutzung von generischen Klassen o Definition o Sortierung.

Versuchsziele Kenntnisse in der Anwendung von: Sortieren mit Klassen Benutzung von generischen Klassen o Definition o Sortierung. Hochschule Harz Programmierung1 Tutorial 11: FB Automatisierung und Informatik Dipl.-Inf. Dipl.-Ing. (FH) M. Wilhelm Programmierung 1 für MI / WI Thema: Sortieren und generische Klassen Versuchsziele Kenntnisse

Mehr

3 Objektorientierte Konzepte in Java

3 Objektorientierte Konzepte in Java 3 Objektorientierte Konzepte in Java Bisherige Beobachtungen zu Objekten: werden in Klassen zusammengefasst besitzen Eigenschaften und Verhalten verbergen private Informationen werden geboren, leben und

Mehr

Java Schulung (Java 2 Java Development Kit 5 / 6)

Java Schulung (Java 2 Java Development Kit 5 / 6) 2. Grundlagen der Objektorientierung 2.1 Klassen, Attribute, Methoden Klassen Eine Klasse beschreibt als Bauplan Gemeinsamkeiten einer Menge von Objekten ist also ein Modell, auf dessen Basis Objekte erstellt

Mehr

Type Erasure in Java 5. Helmi Jouini Institut für Theoretische Informatik Universität Karlsruhe

Type Erasure in Java 5. Helmi Jouini Institut für Theoretische Informatik Universität Karlsruhe Type Erasure in Java 5 Helmi Jouini Institut für Theoretische Informatik Universität Karlsruhe Warum Generics? Containerklassen in Java 1.4 sind generisch nutzbar aber typunsicher. Public class LinkedList

Mehr

3 Objektorientierte Konzepte in Java

3 Objektorientierte Konzepte in Java 3 Objektorientierte Konzepte in Java 3.1 Klassendeklarationen Fragen an die Klassendeklaration: Wie heißt die Klasse? Wer darf auf die Klasse und ihre Attribute/Methoden zugreifen? Ist die Klasse eine

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java: Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen

Mehr

Studentische Lösung zum Übungsblatt Nr. 7

Studentische Lösung zum Übungsblatt Nr. 7 Studentische Lösung zum Übungsblatt Nr. 7 Aufgabe 1) Dynamische Warteschlange public class UltimateOrderQueue private Order[] inhalt; private int hinten; // zeigt auf erstes freies Element private int

Mehr

Generische Typen in Java 1.5. Die Erweiterung der Java Language Specification

Generische Typen in Java 1.5. Die Erweiterung der Java Language Specification Generische Typen in Java 1.5 - Seminarvortrag 1/26 Generische Typen in Java 1.5 Die Erweiterung der Java Language Specification Seminarvortrag von Heiko Minning, mi3795 bei Prof. Dr. Uwe Schmidt, FH-Wedel

Mehr

Generische Datenstrukturen

Generische Datenstrukturen Generische Datenstrukturen Prof. Dr. rer. nat. habil. Uwe Aßmann Lehrstuhl Softwaretechnologie Fakultät für Informatik TU Dresden Softwaretechnologie, Prof. Uwe Aßmann 1 2 Trends in der Softwareentwicklung

Mehr

Java für Computerlinguisten

Java für Computerlinguisten Java für Computerlinguisten 2. Objektorientierte Programmierung Christian Scheible Institut für Maschinelle Sprachverarbeitung 28. Juli 2009 Christian Scheible Java für Computerlinguisten 28. Juli 2009

Mehr

Javakurs für Anfänger

Javakurs für Anfänger Javakurs für Anfänger Einheit 02: Klassen & Objekte Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Klassen Grundstruktur einer Java-Klasse Eigenschaften (Attribute) Variablen

Mehr

CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)

CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik) CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik) Klassenbibliothek Kollektionen Anforderungen der Kollektionen an ihre Elemente Iteratoren Seite 1 Klassenbibliothek Seite 2 Java

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Übungsblatt 5 Lösungsvorschlag Objektorientierte Programmierung 22. 05. 2006 Lösung 9 (SMS-Eingabe am

Mehr

Aufgabenblatt Nr. 5 Generizität und TicTacToe

Aufgabenblatt Nr. 5 Generizität und TicTacToe Aufgabenblatt Nr. 5 Generizität und TicTacToe 1 Generische Sortier-Methode 1.1 Aufgabe: Entwickeln einer generischen Sortiermethode für Objekte mit der Schnittstelle Comparable Ihnen ist aus der Vorlesung

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

Vererbung & Schnittstellen in C#

Vererbung & Schnittstellen in C# Vererbung & Schnittstellen in C# Inhaltsübersicht - Vorüberlegung - Vererbung - Schnittstellenklassen - Zusammenfassung 1 Vorüberlegung Wozu benötigt man Vererbung überhaubt? 1.Um Zeit zu sparen! Verwendung

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

Mehr

Vorlesung 09: Mengen. Peter Thiemann SS 2010

Vorlesung 09: Mengen. Peter Thiemann SS 2010 Vorlesung 09: Mengen Peter Thiemann Universität Freiburg, Germany SS 2010 Peter Thiemann (Univ. Freiburg) JAVA 1 / 43 Inhalt Mengen HashSet LinkedHashSet CopyOnWriteArraySet EnumSet SortedSet NavigableSet

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Zusatzaufgaben Lösungsvorschlag Objektorientierte Programmierung Lösung 22 (Java und UML-Klassendiagramm)

Mehr

A(T1) A(T2) A(T1) A(T2)

A(T1) A(T2) A(T1) A(T2) Kovarianz und Kontravarianz in Java Abstract In diesem Artikel werden die Java-Regeln für Kovarianz und Kontravarianz zusammengefasst. Hierzu wird Typkompatibilität definiert und die Fälle untersucht,

Mehr

Java Einführung Abstrakte Klassen und Interfaces

Java Einführung Abstrakte Klassen und Interfaces Java Einführung Abstrakte Klassen und Interfaces Interface Interface bieten in Java ist die Möglichkeit, einheitliche Schnittstelle für Klassen zu definieren, die später oder/und durch andere Programmierer

Mehr

Variablen manipulieren per JDI

Variablen manipulieren per JDI Variablen manipulieren per JDI Zusammenfassung Jede moderne Java IDE verfügt über eine mächtige und dennoch meist einfach zu bedienende Benutzeroberfläche die das finden von Fehlern in lokalen oder entfernt

Mehr

Beispiel: Methode mit einem Fehler. Diese Methode wird problematisch, wenn von außen eine Dauer von 0 Sekunden angegeben wird, etwa im Aufruf

Beispiel: Methode mit einem Fehler. Diese Methode wird problematisch, wenn von außen eine Dauer von 0 Sekunden angegeben wird, etwa im Aufruf 16 Exceptions Zur Behandlung unerwarteter Situationen bietet Java Unterstützung in Form von Exceptions oder Ausnahmen. Den Sinn von Exceptions können wir Ihnen an einem kleinen Beispiel klarmachen. Nehmen

Mehr

12) Generische Datenstrukturen

12) Generische Datenstrukturen 12) Generische Datenstrukturen Prof. Dr. rer. nat. habil. Uwe Aßmann Lehrstuhl Softwaretechnologie Fakultät für Informatik TU Dresden Version 09-0.2, 24.11.08 Softwaretechnologie, Prof. Uwe Aßmann 1 mpfohlene

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Tafelübung 04 Referenzen, Overloading, Klassen(hierarchien) Clemens Lang T2 18. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/13 Organisatorisches Nächster Übungstermin

Mehr

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume. Universität Osnabrück 1 Bäume 3 - Objektorientierte Programmierung in Java Vorlesung 10: Collections 4 Einführung Bäume sind verallgemeinerte Listenstrukturen Lineare Liste Jedes Element hat höchstens

Mehr

Einführung in die. objektorientierte Programmierung

Einführung in die. objektorientierte Programmierung Einführung in die objektorientierte Programmierung Teil 3 Vererbung Modul WI111: Objektorientierte Programmierung Fachrichtung Wirtschaftsinformatik Prof. Dr. Gert Faustmann Fachbereich Berufsakademie

Mehr

Repetitorium Informatik (Java)

Repetitorium Informatik (Java) Repetitorium Informatik (Java) Tag 8 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Vererbung Vererbung Statischer Typ Dynamischer Typ 2 Polymorphie Overloading: Methoden überladen Overriding:

Mehr

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 5 Referenzdatentypen - Felder... 5-2 5.1 Eindimensionale Felder - Vektoren... 5-3 5.1.1 Vereinbarung... 5-3 5.1.2 Referenzen sind keine Felder... 5-4 5.1.3 Kopieren eindimensionaler Felder... 5-6

Mehr

Java-Schulung Grundlagen

Java-Schulung Grundlagen Java-Schulung Grundlagen Java 2 Standard Edition JDK 5 / 6 31.05.2008 Marcel Wieczorek 1 Themenübersicht Basiswissen Objektorientierung Datentypen Fehlerbehandlung Sonstiges Einführung Klassen, Strings

Mehr

Betreutes Programmieren Vorlesung Informatik II, Blatt 7 Musterlösung

Betreutes Programmieren Vorlesung Informatik II, Blatt 7 Musterlösung SS 2011 Fakultät für Angewandte Informatik Lehrprofessur für Informatik 15.06.2011 Prof. Dr. Robert Lorenz Betreutes Programmieren Vorlesung Informatik II, Blatt 7 Musterlösung Programmieraufwand für geübte

Mehr

Selbststudium OOP5 21.10.2011 Programmieren 1 - H1103 Felix Rohrer

Selbststudium OOP5 21.10.2011 Programmieren 1 - H1103 Felix Rohrer Kapitel 4.1 bis 4.3 1. zu bearbeitende Aufgaben: 4.1 4.1: done 2. Was verstehen Sie unter einem "Java-Package"? Erweiterungen verschiedener Klassen welche in Java benutzt werden können. 3. Sie möchten

Mehr

Java Einführung Methoden in Klassen

Java Einführung Methoden in Klassen Java Einführung Methoden in Klassen Lehrziel der Einheit Methoden Signatur (=Deklaration) einer Methode Zugriff/Sichtbarkeit Rückgabewerte Parameter Aufruf von Methoden (Nachrichten) Information Hiding

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

Algorithmen und Datenstrukturen 07

Algorithmen und Datenstrukturen 07 5. Dezember 2011 1 Besprechung Blatt 6 Fragen 2 Vererbung Allgemein abstract Interfaces 3 Unified Modeling Language (UML) Ablaufdiagramme Klassendiagramme Anwendungsfalldiagramme 4 Vorbereitung Blatt 7

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1 Kapitel 11 Fehler und Ausnahmen Fehler und Ausnahmen 1 Ziele Fehlerquellen in Programmen und bei der Programmausführung verstehen Das Java-Konzept der Ausnahmen als Objekte kennenlernen Ausnahmen auslösen

Mehr

Java Tipps für Lehrer. Table des matières. Einleitung

Java Tipps für Lehrer. Table des matières. Einleitung Java Tipps für Lehrer Table des matières Einleitung..1 Tipp 1: Gültige Objekte erzeugen.2 Tipp 2: Objekte nicht wiederverwenden.3 Tipp 3: Direkt auf die eigenen Attribute zugreifen4 Tipp 4: Ausgabe-Strings

Mehr

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung Übersicht 3.1 Modell Konto 3.2 Modell Konto - Erläuterungen 3.3 Benutzer Ein- und Ausgabe mit Dialogfenster I 3.4 Benutzer Ein- und Ausgabe mit Dialogfenster II 3.5 Klassen- und Objekteigenschaften des

Mehr

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Java Kurs für Anfänger Einheit 4 Klassen und Objekte Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse

Mehr

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden VIII: Vererbung Unterklassen einer Klasse Vererbung von Methoden und Instanzvariablen Überschreiben von Methoden Vererbung als Realisierung einer is-a Beziehung. Informatik I VIII: Vererbung 259 Beispiel:

Mehr

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden. Grundwissen Informatik Objekt Attribut Methoden Als Objekte bezeichnet man alle Gegenstände, Dinge, Lebewesen, Begriffe oder Strukturen unserer Welt ( Autos, Räume, Bakterien, Lehrer, Schüler, Kunden,

Mehr

FHZ. K20 Arrays. Lernziele. Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren. Inhalt

FHZ. K20 Arrays. Lernziele. Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren. Inhalt Inhalt 1. Einführung 2. Array-Komponenten von elementaren Datentypen 3. Array-Komponenten sind Objekte 4. Array als Parameter 5. Kopieren von Arrays 6. Beispiel 7. Vector versus Array Folie 1 Lernziele

Mehr

Distributed Computing Group

Distributed Computing Group JAVA TUTORIAL Distributed Computing Group Vernetzte Systeme - SS 06 Übersicht Warum Java? Interoperabilität grosse und gut dokumentierte Library weit verbreitet Syntax sehr nahe an C Erfahrung: Java wird

Mehr

Java: Vererbung. Teil 3: super() www.informatikzentrale.de

Java: Vererbung. Teil 3: super() www.informatikzentrale.de Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und

Mehr

Vererbung. Vererbung von Methoden und Instanzvariablen. Vererbung als Realisierung einer is-a Beziehung.

Vererbung. Vererbung von Methoden und Instanzvariablen. Vererbung als Realisierung einer is-a Beziehung. Vererbung Unterklassen einer Klasse Vererbung von Methoden und Instanzvariablen Überschreiben von Methoden Vererbung als Realisierung einer is-a Beziehung. Informatik II: Objektorientierte SW-Entwicklung,

Mehr

12) Generische Datenstrukturen

12) Generische Datenstrukturen mpfohlene Literatur 12) Generische Datenstrukturen http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf rof. Dr. rer. nat. habil. Uwe Aßmann Lehrstuhl Softwaretechnologie Fakultät für Informatik TU Dresden

Mehr

Institut für Programmierung und Reaktive Systeme 26. April 2013. Programmieren II. 10. Übungsblatt

Institut für Programmierung und Reaktive Systeme 26. April 2013. Programmieren II. 10. Übungsblatt Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 26. April 2013 Programmieren II 10. Übungsblatt Hinweis: Insgesamt werden in diesem Semester fünf

Mehr

von Anja Austermann Drag and Drop

von Anja Austermann Drag and Drop von Anja Austermann Drag and Drop »Drag and Drop«ist die Bezeichnung für den Datentransfer zwischen unterschiedlichen Anwendungen mit grafischer Benutzeroberfläche. Zur Zeit arbeitet Drag and Drop in Java

Mehr

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure 7. Objektorientierte Softwareentwicklung/3 Informatik II für Verkehrsingenieure Überblick FOLGENDE BEGRIFFE/PRINZIPIEN SOLLTEN BEKANNT SEIN Objekte Klasse Attribute Fähigkeiten ZIEL DER HEUTIGEN LEHRVERANSTALTUNG

Mehr

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Inhalt dieser Einheit Variablen (Sinn und Aufgabe) Bezeichner Datentypen, Deklaration und Operationen Typenumwandlung (implizit/explizit) 2 Variablen

Mehr

Java: Eine Übersicht. Dennis Giffhorn. Lehrstuhl für Programmierparadigmen Universität Karlsruhe

Java: Eine Übersicht. Dennis Giffhorn. Lehrstuhl für Programmierparadigmen Universität Karlsruhe Java: Eine Übersicht Dennis Giffhorn Lehrstuhl für Programmierparadigmen Universität Karlsruhe Allgemeines Objektorientiert Syntaxfamilie von C/C++ Statisch getypt Entwickelt von Sun Microsystems class

Mehr

13. Tutorium zu Programmieren

13. Tutorium zu Programmieren 13. Tutorium zu Programmieren Dennis Ewert Gruppe 6 Universität Karlsruhe Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2009 by IPD Snelting

Mehr

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 11 Dynamische Verwaltung großer Datenmengen... 11-2 11.1 Einige spezielle Klassen des Paketes java.lang.*... 11-2 11.1.1 Klasse Throwable, Exception und Error... 11-2 11.1.2 Klasse Object... 11-7

Mehr

Objekt-Orientierte Programmierung

Objekt-Orientierte Programmierung Objekt-Orientierte Programmierung Ein OO-Programm modelliert eine Anwendung als eine Welt von Objekten, die miteinander in Beziehung stehen ( später). Ein Objekt kann andere Objekte erzeugen. Ein Objekt

Mehr

Informatik II. /* c) Baumstruktur in einen String schreiben und zurueckgeben */ public String tostring() {

Informatik II. /* c) Baumstruktur in einen String schreiben und zurueckgeben */ public String tostring() { Universität Augsburg, Institut für Informatik Sommersemester 2006 Prof. Dr. Werner Kießling 08. Juni. 2006 M. Endres, A. Huhn, T. Preisinger Lösungsblatt 5 Aufgabe 1: Cloneable Tree.java Informatik II

Mehr

Fortgeschrittene Programmierung

Fortgeschrittene Programmierung Skript zur Vorlesung Fortgeschrittene Programmierung SS 2014 Prof. Dr. Michael Hanus Priv.Doz. Dr. Frank Huch Arbeitsgruppe Programmiersprachen und Übersetzerkonstruktion Institut für Informatik Christian-Albrechts-Universität

Mehr

Datenbankanwendungsprogrammierung Crashkurs Java

Datenbankanwendungsprogrammierung Crashkurs Java Datenbankanwendungsprogrammierung Crashkurs Java Denny Priebe Datenbankanwendungsprogrammierung p. Unterschiede zu C, C++ typedefs, Präprozessor Strukturen, Unions globale Funktionen Mehrfachvererbung

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 13. Bäume. Bäume

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 13. Bäume. Bäume 1 Kapitel 13 Ziele 2 Den Begriff des Baums in der Informatik kennenlernen als verkettete Datenstruktur repräsentieren können Rekursive Funktionen auf n verstehen und schreiben können Verschiedene Möglichkeiten

Mehr

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

Lösungsvorschläge. zu den Aufgaben im Kapitel 4 Lösungsvorschläge zu den Aufgaben im Kapitel 4 Aufgabe 4.1: Der KNP-Algorithmus kann verbessert werden, wenn in der Funktion nexttabelle die Zuweisung next[tabindex] = ruecksprung; auf die etwas differenziertere

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java Dateien lesen und schreiben 2 Übersicht der heutigen Inhalte File Streams try-with-resources Properties csv-dateien 3 Klasse File Die Klasse java.io.file bietet Unterstützung im Umgang

Mehr

5.4 Klassen und Objekte

5.4 Klassen und Objekte 5.4 Klassen und Objekte Zusammenfassung: Projekt Figuren und Zeichner Figuren stellt Basisklassen für geometrische Figuren zur Verfügung Zeichner bietet eine übergeordnete Klasse Zeichner, welche die Dienstleistungen

Mehr

Abschnitt 9: Schnittstellen: Interfaces

Abschnitt 9: Schnittstellen: Interfaces Abschnitt 9: Schnittstellen: Interfaces 9. Schnittstellen: Interfaces 9.1 Die Idee der Schnittstellen 9.2 Schnittstellen in Java 9.3 Marker-Interfaces 9.4 Interfaces und Hilfsklassen 9.5 Zusammenfassung

Mehr

Javakurs 2013 Objektorientierung

Javakurs 2013 Objektorientierung Javakurs 2013 Objektorientierung Objektorientierte Programmierung I Armelle Vérité 7 März 2013 Technische Universität Berlin This work is licensed under the Creative Commons Attribution-ShareAlike 3.0

Mehr

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen Fachschaft Informatik Informatik 11 Kapitel 2 - Rekursive Datenstrukturen Michael Steinhuber König-Karlmann-Gymnasium Altötting 15. Januar 2016 Folie 1/77 Inhaltsverzeichnis I 1 Datenstruktur Schlange

Mehr

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

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 8. Arrays. Arrays 1 Kapitel 8 Ziele 2 Die Datenstruktur der kennenlernen Grundlegende Algorithmen auf in Java implementieren können Mit von Objekten arbeiten können 3 Erweiterungen zur Behandlung von : Überblick Bisher

Mehr

Vorlesung Programmieren

Vorlesung Programmieren Vorlesung 25.01.2007 Wintersemester 2006/2007 Computerlinguistik, Campus DU Überblick Seite 2 Datenströme: Ein und Ausgabe von Daten Java Collections Framework Eingabe/Ausgabe Seite 3 Lesen, Schreiben

Mehr

5.6 Vererbung. Vererbung

5.6 Vererbung. Vererbung 5.6 Vererbung Klassen können zueinander in einer "ist ein"- Beziehung stehen Beispiel: Jeder PKW ist ein Kraftfahrzeug, jedes Kraftfahrzeug ist ein Transportmittel aber: auch jeder LKW ist ein Kraftfahrzeug

Mehr

Institut für Programmierung und Reaktive Systeme 25. August 2014. Programmier-Labor. 04. + 05. Übungsblatt. int binarysearch(int[] a, int x),

Institut für Programmierung und Reaktive Systeme 25. August 2014. Programmier-Labor. 04. + 05. Übungsblatt. int binarysearch(int[] a, int x), Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 25. August 2014 Programmier-Labor 04. + 05. Übungsblatt Aufgabe 21: a) Schreiben Sie eine Methode

Mehr

Prinzipien Objektorientierter Programmierung

Prinzipien Objektorientierter Programmierung Prinzipien Objektorientierter Programmierung Valerian Wintner Inhaltsverzeichnis 1 Vorwort 1 2 Kapselung 1 3 Polymorphie 2 3.1 Dynamische Polymorphie...................... 2 3.2 Statische Polymorphie........................

Mehr

Inf 12 Aufgaben 14.02.2008

Inf 12 Aufgaben 14.02.2008 Inf 12 Aufgaben 14.02.2008 Übung 1 (6 Punkte) Ermitteln Sie eine mathematische Formel, die die Abhängigkeit der Suchzeit von der Anzahl der Zahlen N angibt und berechnen Sie mit Ihrer Formel die durchschnittliche

Mehr

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek Programmieren I Dr. Klaus Höppner Hochschule Darmstadt Wintersemester 2008/2009 1 / 22 2 / 22 Strategie zum Entwurf von Klassen Beispiele Objektorientierte Sichtweise: Mit welchen Objekten habe ich es

Mehr

Primitive Datentypen

Primitive Datentypen Primitive Datentypen 2 Arten von Datentypen: primitive Datentypen (heute) Objekte (später) Java ist streng typisiert, d.h. für jede Variable muß angegeben werden was für eine Art von Wert sie aufnimmt.

Mehr

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests. Universität Osnabrück 1 Problemstellung 3 - Objektorientierte Programmierung in Java Vorlesung 24: Reflection 1 SS 2006 Prof. Dr. Frank M. Thiesing, FH Osnabrück Um ein Objekt anzulegen, eine seiner Methoden

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein (kmk@informatik.uni-kiel.

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein (kmk@informatik.uni-kiel. Java Crashkurs Kim-Manuel Klein (kmk@informatik.uni-kiel.de) May 7, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)

Mehr

Arrays in Java. Text. Stefan Brotschi

Arrays in Java. Text. Stefan Brotschi Arrays in Java Stefan Brotschi Übersicht Einführung Deklaration, Generierung und Initialisierung Mehrdimensionale Arrays Arrays kopieren Klasse java.utils.arrays Kleine Knobeleien Einführung / Allgemein

Mehr

Persistenz von Objekten relationale Datenbank Eigene Datenstruktur XML (JAXB) Proprietäre Dateiformate (Lochkarten)

Persistenz von Objekten relationale Datenbank Eigene Datenstruktur XML (JAXB) Proprietäre Dateiformate (Lochkarten) Persistenz von Objekten relationale Datenbank Eigene Datenstruktur XML (JAXB) Proprietäre Dateiformate (Lochkarten) O/R Mapping - Objekte (Attribute) - 1:1, 1:n, n:m Beziehungen - Vererbungen (- Interfaces)

Mehr

620.900 Propädeutikum zur Programmierung

620.900 Propädeutikum zur Programmierung 620.900 Propädeutikum zur Programmierung Andreas Bollin Institute für Informatik Systeme Universität Klagenfurt Andreas.Bollin@uni-klu.ac.at Tel: 0463 / 2700-3516 Arrays Wiederholung (1/5) Array = GEORDNETE

Mehr

C++ - Operatoren. Eigene Klassen mit neuen Funktionen

C++ - Operatoren. Eigene Klassen mit neuen Funktionen C++ - Operatoren Eigene Klassen mit neuen Funktionen Übersicht Klassen bisher Eigene Operatoren definieren 2 Bisher Durch Kapselung, Vererbung und Polymorphy können nun eigene Klassen definiert werden,

Mehr

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung Eltern Kind Kind Vererbung Definition von Klassen auf Basis von bestehenden Klassen. Implementierung von ist ein. bildet ein hierarchisches

Mehr

Musterlösungen zur Klausur Informatik 3

Musterlösungen zur Klausur Informatik 3 Musterlösungen zur Klausur Informatik 3 Justus-Liebig-Universität Gießen Wintersemester 2003/2004 Aufgabe 1 (6 Punkte) Man kreuze bei den folgenden Deklarationen und Definitionen jeweils an, ob sie aus

Mehr

Vorlesung im Herbstwintersemester 2007. Autorisierte studentisch Lösungen zu Aufgabenblatt 2

Vorlesung im Herbstwintersemester 2007. Autorisierte studentisch Lösungen zu Aufgabenblatt 2 Praktische Informatik I Vorlesung im Herbstwintersemester 2007 Autorisierte studentisch Lösungen zu Aufgabenblatt 2 zusammengestellt von Iva Tsvetkova 9.10.2007 1.Präsenzaufgaben 1.1 Entwurf einer Verwaltung

Mehr

368 4 Algorithmen und Datenstrukturen

368 4 Algorithmen und Datenstrukturen Kap04.fm Seite 368 Dienstag, 7. September 2010 1:51 13 368 4 Algorithmen und Datenstrukturen Java-Klassen Die ist die Klasse Object, ein Pfeil von Klasse A nach Klasse B bedeutet Bextends A, d.h. B ist

Mehr

C# im Vergleich zu Java

C# im Vergleich zu Java C# im Vergleich zu Java Serhad Ilgün Seminar Universität Dortmund SS 03 Gliederung Entstehung von C# und Java Überblick von C# und Java Unterschiede und Gemeinsamkeiten Zusammenfassung und Ausblick Entstehung

Mehr

5. Tutorium zu Programmieren

5. Tutorium zu Programmieren 5. Tutorium zu Programmieren Dennis Ewert Gruppe 6 Universität Karlsruhe Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by IPD Snelting

Mehr

Objektorientiertes Programmieren für Ingenieure

Objektorientiertes Programmieren für Ingenieure Uwe Probst Objektorientiertes Programmieren für Ingenieure Anwendungen und Beispiele in C++ 18 2 Von C zu C++ 2.2.2 Referenzen und Funktionen Referenzen als Funktionsparameter Liefert eine Funktion einen

Mehr

2. Java Schnellkurs Advanced Programming Techniques. Wintersemester 2009/10 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

2. Java Schnellkurs Advanced Programming Techniques. Wintersemester 2009/10 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik 2. Java Schnellkurs Advanced Programming Techniques Wintersemester 2009/10 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik 1 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced

Mehr