6. Interfaces Grundlagen der Programmierung 1 (Java)

Werbung
6. Interfaces
Grundlagen der
Programmierung 1 (Java)
Fachhochschule Darmstadt
Haardtring 100
D-64295 Darmstadt
Prof. Dr. Bernhard Humm
FH Darmstadt, 22. November 2005
Einordnung im Kontext der Vorlesung
1. Einführung
10. Software-Qualität
2. Einfache Programme
11. Algorithmen und Datenstrukturen II
3. Kontrollstrukturen
12. Objektorientierung II
4. Objekt-Orientierung I
13. Komponenten
5. Algorithmen und Datenstrukturen I
14. Design
6. Interfaces
15. Die Java Klassenbibliothek I
7. Rekursion
16. Die Java Klassenbibliothek II
8. Pakete
17. Software-Kategorien
9. Fehler und Ausnahmen
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 2
Agenda
Agenda
Interfaces
Interfaces
Sortieren
JUnit
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 3
Interfaces
Das Denken in Schnittstellen (Interfaces) ist eines
der wichtigsten Konzepte der Programmierung
Interface:
– beschreibt die Außensicht, das
heißt die Sicht des Nutzers
– ist einfach
– ist vielseitig verwendbar
cd Collections
«interface»
List
+
+
+
+
add() : void
get() : void
contains() : void
remove() : void
Klasse:
– enthält die Innensicht, das
heißt die Sicht des
Programmierers
«realize»
ArrayList
«realize»
LinkedList
– ist komplex
– ist speziell
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 4
Interfaces
Deklaration eines Interface
Interfaces definieren das Verhalten von Objekten.
Interfaces enthalten:
– Instanzmethoden
– Konstanten
Interfaces haben keine Konstruktoren.
Interfaces enthalten keine Implementierung.
interface ICustomer {
public String getName();
public void setName(String name);
}
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 5
Interfaces
Verwendung eines Interface
Man sagt: Eine Klasse implementiert ein Interface, wenn sie jede
einzelne Methode des Interfaces bereitstellt.
Eine Klasse kann beliebig viele Interfaces implementieren.
Ein Interface kann von beliebig vielen Klassen implementiert werden.
Eine Referenz auf ein Interface kann überall dort im Code eingesetzt
werden, wo auch eine Referenz auf eine Klasse erlaubt ist.
class MyCustomerImpl implements ICustomer {
public MyCustomerImpl(String name) {...};
public String getName() {...};
public void setName(String name) {...};
}
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 6
Interfaces
Beispiel: Zugriff auf Kundendaten (mit Interface)
ICustomer myCustomer = new MyCustomerImpl(„Willi“);
...
Map myCustomers = new HashMap();
myCustomers.put(„Kunde1234“, myCustomer);
myCustomer = (ICustomer) myCustomer.get(„Kunde1234“);
class SomeOtherClass {
public boolean processCustomer(ICustomer cust)
{ ... };
}
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 7
Interfaces
Übersicht über Collections, Maps und deren Interfaces
Collection
List
Map
Set
SortedMap
HashMap
Hashtable
ArrayList
Vector
HashSet
SortedSet
TreeMap
LinkedList
Interface
Stack
TreeSet
Class
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 8
Interfaces
Interface Collection
Allgemeiner Container von Objekten. Objekte dürfen mehrfach
vorkommen.
Methoden, die ein Element betreffen:
boolean add(Object
o)
add
Ensures that this collection contains the specified element
(optional operation).
boolean contains(Object
o)
contains
Returns true if this collection contains the
specified element.
boolean remove(Object
o)
remove
Removes a single instance of the specified element from
this collection, if it is present (optional operation).
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 9
Interfaces
Interface Collection
Methoden, die den ganzen Container betreffen:
void clear()
clear
Removes all of the elements from this collection
(optional operation).
boolean isEmpty()
isEmpty
Returns true if this collection contains no elements.
Iterator iterator()
iterator
Returns an iterator over the elements in this collection
int size()
size
Returns the number of elements in this collection.
Object[] toArray()
toArray
Returns an array containing all of the elements in
this collection.
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 10
Interfaces
Iteratoren
Mache etwas mit allen Elementen eines Behälters: Iteratoren für
Schleifen.
Sie zeigen auf ein Element des Behälters, verwalten Schleifen, merken
sich die aktuelle Position.
Sie werden erzeugt über Methoden des Behälters: iterator().
List list = new ArrayList();
list.add(new Customer(“Hans Otto”));
list.add(new Customer(“Willi Wühlmaus”));
Iterator iter = list.iterator();
while ( iter.hasNext() ) {
Customer customer = (Customer) iter.next();
System.out.println( customer.getName() );
}
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 11
Interfaces
Interface Iterator
Wie die Collections so werden Iteratoren normalerweise über ihre
Interfaces angesprochen.
Jede Collection hat ihre eigene Iterator-Implementierung.
Iterator: lesen vorwärts; ListIterator: beide Richtungen
public interface Iterator {
boolean hasNext();
Object next();
// Dereferenzierung: akt. Element
void remove();
// entferne aktuelles Element
}
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 12
Interfaces
Vereinfachter Zugriff auf Collections (ab JDK 1.5)
int[] xs = {1,3,7,11}
for (int x : xs)
System.out.println(x);
Zugriff auf Array
List as = new ArrayList();
//as befüllen...
for (Object a : as)
System.out.println(a);
Zugriff auf beliebige Klasse, die Iterable
implementiert. So z.B. alle Collections.
Map dict = new HashMap();
dict.put(„Eins“, "Hallo");
for ( Object o : dict.values() ){
System.out.println(o);
}
Zugriff auf Werte einer Map
//Hallo
Was steckt hinter dem erweiterten for?
Der Compiler macht aus der erweiterten for-Schleife die alte Variante mit Schleifenzähler oder
Iterator. Darum sind auch keine Performance Probleme zu befürchten.
Ein Zugriff auf den Schleifenzähler / Iterator ist nicht möglich.
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 13
Interfaces
Interface List extends Collection
Container, der die Elemente in einer Reihenfolge vorhält.
Methoden, die ein Element betreffen:
void add(int
index, Object element)
add
Inserts the specified element at the specified position
in this list (optional operation).
Object remove(int
index)
remove
Removes the element at the specified position in this
list (optional operation).
Object get(int
index)
get
Returns the element at the specified position in
this list.
Object set(int
index, Object element)
set
Replaces the element at the specified position in this
list with the specified element (optional operation).
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 14
Interfaces
Interface Map
Container, der Schlüssel-Wert (key-value) Paare speichert.
Jeder Schlüssel darf höchstens einmal auftreten.
Methoden, die einzelne Elemente betreffen:
Object get(Object key)
Returns the value to which this map maps the specified key.
Object put(Object key, Object value)
Associates the specified value with the specified key in
this map (optional operation).
Object remove(Object key)
Removes the mapping for this key from this map
if it is present (optional operation).
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 15
Interfaces
Interface Map
Methoden, zur Abfrage von Schlüsseln und Werten:
boolean containsKey(Object key)
Returns true if this map contains a mapping for the
specified key.
boolean containsValue(Object value)
Returns true if this map maps one or more keys to the
specified value.
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 16
Interfaces
Interface Map
Methoden, die eine Sicht auf die Abbildung liefern:
Set entrySet()
Returns a set view of the mappings contained in this map.
Set keySet()
Returns a set view of the keys contained in this map.
Collection values()
Returns a collection view of the values contained
in this map.
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 17
Interfaces
Funktionen auf Collections
z.B. makeHistogram
public class Util {
public static Map makeHistogram(Collection
collection) {
makeHistogram
Map result = new HashMap();
Iterator i = collection.iterator();
while (i.hasNext()) {
Object x = i.next();
Integer cnt = (Integer) result.get(x);
if (null == cnt)
result.put(x, new Integer(1));
else
result.put(x, new Integer(cnt.intValue() + 1));
}
return result;
}
...
}
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 18
Agenda
Agenda
Interfaces
Sortieren
Sortieren
JUnit
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 19
Sortieren
Sortieren von Objekten
Collection mit geordneten Elementen (zum Beispiel List):
l = {e1, …en}
l ist sortiert, wenn ei ≤ ei+1 (1 ≤ i ≤ n-1)
Aber was heißt eigentlich „≤“?
Ordnung auf Elementen
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 20
Sortieren
Interface Comparable
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 21
Sortieren
Sort
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 22
Sortieren
Jede Menge *ables
Adjustable
Iterable
Streamable
Appendable
Joinable
Throwable
Callable
Manageable
Timeable
Cloneable
Printable
Transferable
Comparable
REadable
Writeable
Destroyable
Referncable
Externalizable
Refrehable
Flushable
Runnable
Formatable
Scrollable
Identifyable
Serializable
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 23
Agenda
Agenda
Interfaces
Sortieren
JUnit
JUnit
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 24
JUnit
Überblick
JUnit ist ein regressives Testframework
Geschrieben von Erich Gamma und Kent Beck
Entwicklung von Tests für beliebige Software-Einheiten
OpenSource
XProgramming
www.junit.org
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 25
JUnit
Was unterstützt JUnit?
Einfache Automatisierung der Tests
Ausgabe der Ergebnisse erfolgt graphisch oder textuell
Soll/Ist-Vergleich mittels assert()- und fail()-Methoden
Dokumentation der Testergebnisse
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 26
JUnit
Wie funktioniert JUnit?
Anlegen einer Subklasse von TestCase
(junit.framework.TestCase)
Definition eines Konstruktors mit Übergabeparameter Testname
Öffentliche Methoden die mit „test“ beginnen sind Testfälle
Vor jedem Test wird - falls vorhanden - die öffentliche Methode
setUp() aufgerufen
Nach jedem Test wird - falls vorhanden - die öffentliche Methode
tearDown() aufgerufen
Die Testfälle einer Testklasse werden in der Methode suite()
zusammengefasst
Testklassen werden zu Testpaketen zusammengefasst
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 27
JUnit
Beispiel für einen TestCase
import junit.framework.TestCase;
public class StrUtilJUnitTest extends TestCase {
String txt;
public StrUtilJUnitTest(String testCaseMethodName) {
super(testCaseMethodName);
}
public void setUp() {
txt = "otto hugo rudie";
}
public void testStr2StrArray() {
String[] arr1 = StrUtil.str2StrArr(txt);
assertEquals("otto", arr1[0]);
assertEquals("hugo", arr1[1]);
assertEquals("rudi", arr1[2]);
}
}
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 28
JUnit
Auswahl bereitgestellter Assert und Fail Metoden
public static void assertEquals(boolean expected, boolean actual)
public static void assertEquals(double expected, double actual, double delta)
public static void assertNull(Object object)
public static void assertNotNull(Object object)
public static void assertSame(java.lang.Object expected, lang.Object actual)
public static void assertTrue(boolean condition)
public static void fail()
public static void fail(String message)
Alle Methoden werden auch mit einem Message-Parameter angeboten
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 29
JUnit
Starten unter Eclipse
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 30
JUnit
Ausgabe im TestRunner
Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006
22.11.2005, Seite 31
Herunterladen