Gestern - Universität Paderborn

Werbung
Gestern
Universität Paderborn
Prof. Dr. Heike Wehrheim
Klasse HashQueue<E>
(implementiert Interface Queue<E>)
Klasse LinList<E>
Beide erweitert um eine Methode
Iterator<E> iterator()
(durch Schreiben einer inneren, Iterator
implementierenden Klasse)
Zwei Methoden finde, die für
a) eine HashQueue unter Benutzung ihres Iterators ein
Element sucht
b) für eine LinList unter Benutzung ihres Iterators ein
Element sucht
GPI, WS 07/08
899
Universität Paderborn
Prof. Dr. Heike Wehrheim
finde für LinList
public static boolean finde
(LinList<Integer>
l, int x) {
Iterator<Integer> e = l.iterator();
boolean xGefunden = false;
while (!xGefunden && e.hasNext()) {
xGefunden =
(x==((Integer)e.next()).intValue());
}
return xGefunden;
}
GPI, WS 07/08
900
Ziel
Universität Paderborn
Prof. Dr. Heike Wehrheim
Wiederverwendung der Methode finde:
einmal schreiben, für HashQueues und LinLists
verwenden
Wie könnte das gehen?
1. Erweitern Interface Queue um Methode iterator()
2. Lassen LinList ebenfalls Queue implementieren
3. Nehmen dann Queue als Typ des Parameters für
finde
Nicht schön!
GPI, WS 07/08
901
Schöne Lösung
Universität Paderborn
Prof. Dr. Heike Wehrheim
Weitere Schnittstelle aus java.lang benutzen
LinEnumIterable.java
interface Iterable<T> {
Iterator<T> iterator();
// generiert Iterator-Objekt
}
Eine implementierende Klasse (hat bereits die geforderte Methode!)
class LinList<E> implements Iterable<E> {
public Iterator<E> iterator() {
return new ListEnum(); }
...
}
andere implementierende Klasse könnte HashQueue sein
HashQueue würde dann Queue und Iterable implementieren
(ArrayList implementiert Iterable ebenfalls!)
GPI, WS 07/08
902
Dann …
Universität Paderborn
Prof. Dr. Heike Wehrheim
finde-Methode unabhängig von konkreter Datenstruktur
definierbar
benutzt nur Schnittstelle Iterable
public static boolean finde
(Iterable<Integer> l, int x){
Iterator<Integer> e = l.iterator();
...
}
GPI, WS 07/08
903
3. Beispiel - Interfaces
Universität Paderborn
Prof. Dr. Heike Wehrheim
Wollen ein generisches Paar (= Klasse mit 2
Elementen) haben, das einen Vergleich erlaubt,
wie geht das?
Problem:
ƒ Wie machen wir den Vergleich, wenn wir noch
nicht wissen, was die Elemente sind und wie man
sie vergleicht?
Lösung:
ƒ Interface Comparable benutzen
ƒ Die generische Typvariable genauer spezifizieren:
Einschränkungen für das Typargument vorgeben
GPI, WS 07/08
904
Interface Comparable
Universität Paderborn
Prof. Dr. Heike Wehrheim
Comparable<T> besitzt genau eine Methode
int compareTo(T o)
Aus API: „Compares this object with the specified
object for order. Returns a negative integer, zero,
or a positive integer as this object is less than,
equal to, or greater than the specified object.“
GPI, WS 07/08
905
Paare mit Vergleich
Universität Paderborn
Prof. Dr. Heike Wehrheim
class ComparablePair<T extends Comparable<T>> {
private T first;
private T second;
ComparablePair(T f, T s) {
first = f;
second = s;
}
public T getFirst() {
return first;
}…
Schränkt die
Typargumente auf
Klassen ein, die
Comparable
implementieren
public boolean lessThan (ComparablePair<T> cp) {
return (this.first.compareTo(cp.getFirst()) < 0) ||
((this.first.compareTo(cp.getFirst()) == 0) &&
(this.second.compareTo(cp.getSecond()) < 0));
}
}
GPI, WS 07/08
ComparablePairTest.java
906
Erweitertes For
Universität Paderborn
Prof. Dr. Heike Wehrheim
Zur Iteration über Arrays und Collections
Oft Programmsegmente der Form:
arr: irgendein Array
for (int i = 0; i < arr.length; i++) {
// arr[i]
}
Häufiges Problem:
Variable i wird falsch gesetzt (z.B. Anfangswert 1,
laufen bis arr.length)
Abkürzung für solche Iterationen:
for (Typ var : arrayname) {
// var
}
GPI, WS 07/08
907
Beispiel
Universität Paderborn
Prof. Dr. Heike Wehrheim
Ausgeben aller Argumente, die wir main in der
Kommandozeile übergeben
public static void main (String [] args) {
for (String arg : args) {
System.out.println(arg);
}
}
Das erweiterte for kann auch geschachtelt werden
int [] [] matrix = new int[3][4];
for (int [] zeile : matrix) {
for (int elem : zeile) {
System.out.print(elem + " ");
}
System.out.println();
}
GPI, WS 07/08
908
Erweitertes For II
Universität Paderborn
Prof. Dr. Heike Wehrheim
Vor-/Nachteile
Vorteile:
ƒ lesbarer, weniger fehleranfällig
ƒ Erweitertes For nutzbar für alle Klassen, die
Iterable implementieren
Nachteil:
ƒ Durchlauf genau festgelegt, von vorne nach hinten,
jedes Element einmal
GPI, WS 07/08
909
Collections Framework
Universität Paderborn
Prof. Dr. Heike Wehrheim
Collection/Container:
ƒ Klassen und Interfaces (in java.util) zur
Speicherung von Objekten
Entwurfskonzept:
ƒ Basisgerüst für Container
ƒ Einige implementierende Klassen, die oft benötigte
Funktionalität zur Verfügung stellen
ƒ Eigene Implementierungen der Interfaces /
Erweiterungen der Klassen möglich
GPI, WS 07/08
910
Übersicht: Interfaces
Universität Paderborn
Prof. Dr. Heike Wehrheim
Collection (Sammlung von Elementen)
-> List (Collection mit einer Ordnung)
-> Set (Collection, in der Elemente nie doppelt vorkommen)
-> SortedSet (sortierte Menge)
Map (Abbildung Schlüssel auf Wert)
-> SortedMap (sortierte Schlüssel)
Iterator (Iteration durch Collections)
(+ weitere)
Spezialisierungsrelationen zwischen den Interfaces:
ƒ List extends Collection,
ƒ SortedSet extends Set, etc.
alle Interfaces generisch im Typ der gespeicherten Elemente
GPI, WS 07/08
911
Universität Paderborn
Prof. Dr. Heike Wehrheim
Einige implementierende Klassen
Für …
List
ƒ ArrayList (Implementierung auf Basis von „wachsenden“
Arrays)
ƒ LinkedList (Implementierung durch doppelt verkettete Liste)
Set
ƒ HashSet (Implementierung durch Hashverfahren)
ƒ TreeSet (Implementierung durch einen balancierten binären
Baum)
Map
ƒ HashMap (Implementierung durch eine Hashtabelle)
GPI, WS 07/08
912
Einige Exceptions
Universität Paderborn
Prof. Dr. Heike Wehrheim
ƒ UnsupportedOperationException
manche Operationen der Schnittstellen sind
optional;
sind sie nicht implementiert, wird diese Exception
bei Aufruf geworfen
ƒ ClassCastException
Elemente, die Methoden übergeben werden,
passen nicht zum Typ der Collection
ƒ NoSuchElementException
Methode, die Elemente einer Collection liefern soll,
findet kein Element mehr
GPI, WS 07/08
913
Iterator<E>
Universität Paderborn
Prof. Dr. Heike Wehrheim
Methoden:
ƒ public boolean hasNext()
weiteres Element?
ƒ public E next()
nächstes Element;
wirft NoSuchElementException, wenn kein
nächstes Element
ƒ public void remove()
löscht das letzte von next gelieferte Element
jede Collection hat eine Methode iterator(), die ein IteratorObjekt zurückliefert (bzw. ein Objekt einer Iterator
implementierenden Klasse)
Collection erweitert Interface Iterable
GPI, WS 07/08
914
Beispiel
Universität Paderborn
Prof. Dr. Heike Wehrheim
Entfernen aller „langen“ Zeichenketten aus einer
Collection
public void entferneLangeStrings
(Collection coll, int maxLaenge) {
Iterator it= coll.iterator();
while (it.hasNext()) {
String str = (String) it.next();
if (str.length() > maxLaenge)
it.remove();
}
}
GPI, WS 07/08
915
Erweitertes For
Universität Paderborn
Prof. Dr. Heike Wehrheim
Das erweiterte For kann für jede Collection benutzt werden
Beispiel:
Collection<Integer> coll = new
TreeSet<Integer>();
coll.add(new Integer(3));
coll.add(new Integer(4));
coll.add(new Integer(5));
coll.add(new Integer(3)); // schon drin,
// wird nicht nochmal
// eingefügt
for (Integer i : coll) {
System.out.println(i);
}
GPI, WS 07/08
CollIt.java
916
Collection<E>
Universität Paderborn
Prof. Dr. Heike Wehrheim
Methoden: (was kann man alles machen mit
Sammlungen von Elementen)
ƒ public int size ()
ƒ public boolean isEmpty()
ƒ public boolean contains(Object o)
ƒ public Iterator<E> iterator()
ƒ public Object[] toArray()
ƒ public boolean add(E o)
ƒ public boolean remove(Object elem)
GPI, WS 07/08
917
Klasse Collections (!s)
Universität Paderborn
Prof. Dr. Heike Wehrheim
Collections ist eine Klasse, die für Collections
nützliche Methoden zur Verfügung stellt
Die Methoden sind alle statisch, z.B.
ƒ public static void min(Collection coll)
minimales Element
ƒ public static void max(Collection coll)
maximales Element
viele Methoden für List-Objekte
ƒ public static void reverse(List list)
Reihenfolge umdrehen
ƒ public static void sort(List list)
Elemente sortieren
GPI, WS 07/08
918
Beispiel: Liste umdrehen
Universität Paderborn
Prof. Dr. Heike Wehrheim
import java.util.*;
public class CollStat {
public static void main (String [] args) {
List<Integer> ll = new LinkedList<Integer>();
ll.add(new Integer(1));
ll.add(new Integer(2));
ll.add(new Integer(3));
…
for(Integer elem : ll)
System.out.print(elem + " ");
System.out.println();
Collections.reverse(ll);
for(Integer elem : ll)
System.out.print(elem + " ");
System.out.println();
}
}
CollStat.java
GPI, WS 07/08
919
GP2 (Böttcher)
Universität Paderborn
Prof. Dr. Heike Wehrheim
ƒ Graphische Benutzeroberflächen
ƒ Applets
ƒ Parallele Prozesse
GPS – Grundlagen Programmiersprachen
(Kastens)
ƒ Grundlegende Konzepte von
Programmiersprachen
ƒ Logische, funktionale Sprachen
Ziel: Befähigung zum schnellen, eigenen Lernen von
anderen Programmiersprachen
GPI, WS 07/08
920
Klausur
Universität Paderborn
Prof. Dr. Heike Wehrheim
3 Stunden, 9 Aufgaben
ƒ 6 Programmieraufgaben
ƒ 2 Aufgaben zu objekt-orientierten Konzepten
allgemein, dynamische Methodenbindung und
Polymorphie
ƒ 1 Aufgabe zu Programmverstehen
Keine Hilfsmittel zugelassen (nur Wörterbuch)
Java API muss nicht auswendig gelernt werden;
wenn nötig, wird ein Auszug aus API mitgeliefert
GPI, WS 07/08
921
Universität Paderborn
Prof. Dr. Heike Wehrheim
Klausur II
ƒ Datum: 17.2.09 (bzw. 31.3.09)
ƒ Beginn: 12.00
(spätestens 11.45 da sein, um Platz zu suchen)
ƒ Raum: Sporthalle
ƒ Im Raum hängt ein Sitzplan
ƒ Personalausweis, Studentenausweis mitbringen
ƒ Taschen an Rand, Handys aus
ƒ Ergebnisse frühestens nach 3 Wochen
Die Ergebnisse von Zwischenklausur und Hauptklausur
werden zusammengerechnet: insgesamt 30 Punkte ZK, 70
Punkte HK; Bonuspunkte kommen zur Endnote dazu,
wenn Klausur bestanden
Viel Erfolg!
GPI, WS 07/08
922
Schlusswort
Universität Paderborn
Prof. Dr. Heike Wehrheim
Sir Charles Anthony Richard Hoare (Turing
Preisträger 1980):
„I conclude that there are two ways of constructing a
software design. One way is to make it so simple
that there are obviously no deficiencies and the
other way is to make it so complicated that there
are no obvious deficiencies.”
Schönheit, Einfachheit, Eleganz
GPI, WS 07/08
923
The End
GPI, WS 07/08
Universität Paderborn
Prof. Dr. Heike Wehrheim
924
Herunterladen