Programmieren II. Datenstrukturen / Das Collection-Framework. Heusch 14 Ratz Institut für Angewandte Informatik
|
|
- Catharina Kraus
- vor 6 Jahren
- Abrufe
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 Collections in Java 2 Java 2 Collections: http://java.sun.com/products/jdk/1.2/docs/guide/collections/index.html
MehrJava 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]...
MehrGrundlagen 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
Mehrequals 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
MehrJava 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
MehrSchnittstellen 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
Mehr1 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
MehrDatenstrukturen 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
MehrKapitel 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
MehrVorlesung 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
MehrKapitel 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
MehrKapitel 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
MehrVersuchsziele 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
Mehr3 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
MehrJava 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
MehrType 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
Mehr3 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
MehrII. 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
MehrStudentische 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
MehrGenerische 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
MehrGenerische 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
MehrJava 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
MehrJavakurs 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
MehrCS1005 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
MehrObjektorientierte 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
MehrAufgabenblatt 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
MehrProbeklausur: 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,
MehrVererbung & 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
MehrProgrammieren 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
MehrVorlesung 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
MehrObjektorientierte 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)
MehrA(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,
MehrJava 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
MehrVariablen 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
MehrBeispiel: 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
Mehr12) 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
MehrAlgorithmen 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
MehrBä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
MehrEinfü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
MehrRepetitorium 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:
MehrDr. 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
MehrJava-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
MehrBetreutes 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
MehrSelbststudium 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
MehrJava 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
MehrObjektorientierte 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/
MehrAlgorithmen 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
MehrGrundlagen 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.
MehrEinfü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
MehrJava 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 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
MehrJava 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
MehrVIII: 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:
MehrEine 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,
MehrFHZ. 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
MehrDistributed 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
MehrJava: 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
MehrVererbung. 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,
Mehr12) 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
MehrInstitut 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
Mehrvon 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
Mehr7. 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
MehrJava 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
MehrJava: 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
Mehr13. 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
MehrDr. 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
MehrObjekt-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
MehrInformatik 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
MehrFortgeschrittene 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
MehrDatenbankanwendungsprogrammierung Crashkurs Java
Datenbankanwendungsprogrammierung Crashkurs Java Denny Priebe Datenbankanwendungsprogrammierung p. Unterschiede zu C, C++ typedefs, Präprozessor Strukturen, Unions globale Funktionen Mehrfachvererbung
MehrEinfü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
MehrLö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
MehrProgrammieren 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
Mehr5.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
MehrAbschnitt 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
MehrJavakurs 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
MehrInformatik 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
MehrEinfü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
MehrVorlesung 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
Mehr5.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
MehrInstitut 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
MehrPrinzipien 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........................
MehrInf 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
MehrProgrammieren 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
MehrPrimitive 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.
MehrProblemstellung. 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
MehrJava 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
MehrEinfü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)
MehrArrays 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
MehrPersistenz 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)
Mehr620.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
MehrC++ - 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,
MehrC++ - 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
MehrMusterlö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
MehrVorlesung 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
Mehr368 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
MehrC# 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
Mehr5. 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
MehrObjektorientiertes 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
Mehr2. 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