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



Ähnliche Dokumente
Java Einführung Collections

JAVA KURS COLLECTION

Software Engineering Klassendiagramme Assoziationen

Einstieg in die Informatik mit Java

Java: Vererbung. Teil 3: super()

Objektorientierte Programmierung

Programmiertechnik II

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

Einführung in die Programmierung

Programmiertechnik II

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung

Java Generics & Collections

Programmierkurs Java

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

Wo sind wir? Rudolf Berrendorf FH Bonn-Rhein-Sieg Programmiersprache Java 338

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

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Client-Server-Beziehungen

Programmiertechnik II

19 Collections Framework

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

U08 Entwurfsmuster (II)

OCP Java SE 8. Collections

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Kapitel 9. Inner Classes. 9.1 Wiederholung: Iteratoren. Ausführen einer Operation auf allen Elementen einer Containerklasse

19 Collections Framework

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

12 Collections Framework. Interfaces Maps and Collections. Collection Interface. Überblick. Collection = Containterklasse, die andere Objekte enthält.

java.util. Sebastian Draack Department Informations- und Elektrotechnik Department Informations- und Elektrotechnik JAVA Collection-API

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Javakurs zu Informatik I. Henning Heitkötter

Grundkonzepte java.util.list

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Teil V. Generics und Kollektionen in Java

Propädeutikum Programmierung in der Bioinformatik

SWE5 Übungen zu Software-Engineering

Softwaretechnik (Allgemeine Informatik) Überblick

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Java Kurs für Anfänger Einheit 5 Methoden

Einführung in die Java- Programmierung

Studentische Lösung zum Übungsblatt Nr. 7

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Algorithmen & Datenstrukturen 1. Klausur

Kapiteltests zum Leitprogramm Binäre Suchbäume

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

SEP 114. Design by Contract

Programmierkurs Java

Praktische Übung 'JUnit-Test'

Gebundene Typparameter

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

Anleitung zur Erstellung und Bearbeitung von Seiten in Typo3. Typo3. Anleitung. Wenpas Informatik

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Übungsblatt 3: Algorithmen in Java & Grammatiken

Kapitel 14. Das Java Collection Interface. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Anlegen eines SendAs/RecieveAs Benutzer unter Exchange 2003, 2007 und 2010

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

Leichte-Sprache-Bilder

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Ist Excel das richtige Tool für FMEA? Steve Murphy, Marc Schaeffers

Einführung in die Programmierung für Wirtschaftsinformatik

Große Übung Praktische Informatik 1

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Programmieren in Java

Windows Server 2008 (R2): Anwendungsplattform

Übungen Programmieren 1 Felix Rohrer. Übungen

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein.

Theoretische Grundlagen der Informatik

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

IMAP Backup. Das Programm zum Sichern, Synchronisieren, Rücksichern und ansehen von gesicherten Mails. Hersteller: malu-soft

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Testen mit JUnit. Motivation

Software Engineering Interaktionsdiagramme

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch

BEISPIELKLAUSUR Softwareentwicklung:

Nicht über uns ohne uns

Beschreibung Regeln z.b. Abwesenheitsmeldung und Weiterleitung

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 17: 3-Schichten-Architektur 2

Unsere Webapplikation erweitern

Rechtsbelehrung. Java und OOP Das Buch Christian Silberbauer 144

Spiel und Spaß im Freien. Arbeitsblat. Arbeitsblatt 1. Zeichnung: Gisela Specht. Diese Vorlage darf für den Unterricht fotokopiert werden.

am Beispiel von JUnit

Effiziente Administration Ihrer Netzwerkumgebung

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Selbstbestimmtes Lernen. Proinformatik III Objektorientierte Programmierung. Format. Inhalt. Buzzwords

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

AZK 1- Freistil. Der Dialog "Arbeitszeitkonten" Grundsätzliches zum Dialog "Arbeitszeitkonten"

Übung - Datensicherung und Wiederherstellung in Windows 7

Modellierung und Programmierung 1

Datenstrukturen & Algorithmen

In vergleichsbasierten Suchbäumen wird nicht in Schlüssel hineingeschaut.

AirKey Das Handy ist der Schlüssel

Kapitel 12: Java Collection Teil II

Transkript:

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 [Offizielle Dokumentationen zum Thema Collections in Java 2] Java 2 Collections Tutorial Online: http://java.sun.com/docs/books/tutorial/collections/index.html [Einführung in die Verwendung der Collection-Klassen in Java 2] David Flanagan: Java in a Nutshell. 2nd Edition, O Reilly, 1997, ISBN 1-56592-262-x. [Der Java-Nachschlage-Klassiker. Kurz und knapp durch die wesentlichen Java-Bestandteile und -Packages.] Prof. Dr. Nikolaus Wulff 2

java.util.collection Eine Collection ist ein Objekt, das eine Gruppe von anderen Objekten zusammenfaßt. Collections werden verwendet um andere Objekte zu speichern, zu manipulieren und Mengen von Objekten von einer Operation an eine andere weiterzugeben. Collections enthalten i.d.r. Objekte vom selben Typ: eine Menge von Briefen, eine Menge von Telefonnummern mit Namen etc. Items Collection... Prof. Dr. Nikolaus Wulff 3

Fachliche und technische Behälter Sparbuch _saldo gibsaldo _kontobewegungen gibanzahl gibbewegungenvom(12.1.2000) Items... Collection Fachliche Behälter implementieren ein Konzept der Anwendungsgebiets. Es sind Gegenstände, die der Anwender bei seiner Arbeit einsetzt und für die sich ein typischer Umgang etabliert hat. Technische Behälter werden als interne Repräsentation fachlicher Behälter verwendet. Fachliche Behälter stehen daher zu technischen Behältern in einer Benutzt-Beziehung. Technische Behälter sollten wie fachliche Behälter nach ihrem Umgang modelliert und klassifiziert werden. Für technische Behälter haben sich typische informatische Arten des Umgang herausgebildet (Stack, Queue, List, Set, Map). Prof. Dr. Nikolaus Wulff 4

Collections in Java 2 Collection ist die Wurzel der Collection-Hierarchie. Für Collection gibt es keine Implementation. Dieses Interface wird verwendet, wenn eine Menge von Objekten so generell wie möglich verwendet werden soll. Ein Set ist eine Menge, die keine Duplikate enthalten kann. In einem SortedSet sind die Objekt in aufsteigender Reihenfolge sortiert enthalten. Eine Map ist ein Objekt, das Schlüssel und Werte Paar enthält. Jeder Schlüssel kann nur einmal vorkommen. Eine List enthält ihre Objekte in einer geordneten Reihenfolge, die vom Benutzer der Liste festgelegt wird. Duplikate sind möglich. Listenelemente können über einen Index angesprochen werden. Package java.util In einer SortedMap sind die Objekt in aufsteigender Reihenfolge der Schlüssel sortiert. Prof. Dr. Nikolaus Wulff 5

Implementationsvarianten Für Set, List und Map gibt es jeweils zwei Implementationsvarianten. Die zwei Variante zum selben Interface haben jeweils spezifische Vor- und Nachteile und sollten je nach Verwendungszusammenhang ausgewählt werden. Für SortedSet und SortedMap existiert jeweils nur eine Implementation, nämlich TreeSet und TreeMap. Hash Table Resizable Array Balanced Tree Linked List Set HashSet TreeSet List ArrayList LinkedList Map HashMap TreeMap List l1 = new ArrayList(); List l2 = new LinkedList(); Map m1 = new HashMap(); Prof. Dr. Nikolaus Wulff 6

Das Interface Collection public interface Collection { // Basic Operations int size(); boolean isempty(); boolean contains(object element); boolean add(object element); boolean remove(object element); Iterator iterator(); // Bulk Operations boolean containsall(collection c); boolean addall(collection c); boolean removeall(collection c); boolean retainall(collection c); void clear(); // Array Operations Object[] toarray(); Object[] toarray(object a[]); Prof. Dr. Nikolaus Wulff 7

Das Interface Map public interface Map { // Basic Operations int size(); boolean isempty(); boolean containskey(object key); boolean containsvalue(object value); Object put(object key, Object element); Object get(object get); Object remove(object key); Set keyset(); Collection values(); // Bulk Operations void putall(map map); void clear(); Prof. Dr. Nikolaus Wulff 8

Der Iterator public interface Iterator { boolean hasnext(); Object next(); void remove(); // Optional Ein Iterator-Objekt erlaubt es, den Inhalt einer Collection zu durchlaufen und auch Elemente zu löschen. Collection c = new LinkedList();... Konto k; Iterator i = c.iterator(); while (i.hasnext()) { k = (Konto)i.next(); if (k.gibsaldo < 100000) i.remove(); Polymorphie Das Durchlaufen einer Collection kann auf jedem Objekt ausgeführt werden, dessen Klasse von Collection erbt. Egal welche Implementationsvariante vorliegt. Voraussetzung ist, daß das Löschen von Elementen in der verwendeten Variante unterstützt wird. Prof. Dr. Nikolaus Wulff 9

Enumeration Die Collection Klassen wurden mit dem JDK1.2 generell überarbeitet und erweitert. Die alten Collections (Vector, Hashtable) verwenden statt des Iterators eine Enumeration. Diese macht im Prinzip das selbe nur mit einer etwas anderen Syntax: Vector v = new Vector();... Enumeration e = v.elements(); while (e.hasmoreelements()) { Object o = e.nextelement()... Collection c = new ArrayList();... Iterator i = c.iterator(); while (i.hasnext()) { Object o = i.next();... Prof. Dr. Nikolaus Wulff 10

Array-Operationen Mit den Collection.toArray-Operationen kann der Inhalt einer Collection in einen Array überführt werden. Mit Arrays.asList können Arrays in Listen konvertiert werden. public interface Collection { Object[] toarray(); Ein neues Array-Objekt wird erzeugt und mit den Elementen der Collection gefüllt. Collection c = new LinkedList(); Object[] a = c.toarray(); public interface Collection { Object[] toarray(object a[]); Ein neues Array-Objekt wird erzeugt und mit den Elementen der Collection gefüllt. Wenn die Länge 0 ist, wird ein neues Array mit dem angegebenen Typ mit ausreichender Größe erzeugt. Collection c = new LinkedList(); String[] a = (String[]) c.toarray(new String[0]); Prof. Dr. Nikolaus Wulff 11

Java Generics Seit dem JDK1.5 enthält Java Generics/Templates. Diese beinhalten insbesondere typesichere Collections und Maps. Templates werden mit einem Platzhalter <T> für den generischen Typen T definiert. Verwendet werden sie dann zur Compilezeit mit einem explizit angegeben Typen. Beispiel: ArrayList<T>, Collectiont<T>, Iteratort<T> ArrayList<Money>, Collection<Money>, Iterator<Money>... Prof. Dr. Nikolaus Wulff 12

Collection ohne Generics Ohne Generics müssen Iterator und Collections immer auf den passenden Typ gecasted werden: Collection saldo = new ArrayList(); public void addmoney(money m) { saldo.add(m); public void printmoney() { Iterator moneyiterator = saldo.iterator(); while(moneyiterator.hasnext()) { Money m = (Money) moneyiterator.next(); print(m); Prof. Dr. Nikolaus Wulff 13

Collection mit Generics Mit Generics entfällt das Casten, die Collection akzeptiert nur den richtigen Typ und liefert diesen auch ohne Cast zurück: Collection<Money> saldo = new ArrayList<Money>(); public void addmoney(money m) { saldo.add(m); public void printmoney() { Iterator<Money> moneyiterator = saldo.iterator(); while(moneyiterator.hasnext()) { Money m = moneyiterator.next(); print(m); Kein Cast mehr Prof. Dr. Nikolaus Wulff 14

For-each Schleife Zusätzlich zu den Generics ist es möglich vereinfachte for-each Schleifen zu schreiben. Statt: Iterator<Money> moneyiterator = saldo.iterator(); while(moneyiterator.hasnext()) { Money m = moneyiterator.next(); print(m); Jetzt: for(money m : saldo) { print(m); Prof. Dr. Nikolaus Wulff 15

Übung Client <<uses>> Server addservice(service : Service) : void getservice(name : String) : Service throws ServerException name : String 0..1 service <<Interface>> Service dotask(req : Request, res : Response) : void getname() : String Wir implementieren einen Server, der beliebige Services zur Verfügung stellt. Diese Services lassen sich hinzufügen und per Namen referenzieren mit den Operationen addservice und getservice Prof. Dr. Nikolaus Wulff 16

Hinweis Wir wissen so gut wie nichts über die angebotenen Dienste (Services), das irritiert zunächst... Für die gestellte Aufgabe des Servers (Verwalten von Services) spielt dies jedoch keine Rolle! Mit welcher Collection Klasse werden die Services am besten verwaltet? Um die Funktionalität unseres Servers zu über-prüfen verwenden wir einen JUnit Test als Client. Frage: Was muss getestet werden, wo bekommen wir einen Service her? Prof. Dr. Nikolaus Wulff 17

Hinweis: Klassendiagramm TestCase (from junit.framework) ServerTest testaddservice() testgetservice() server 1 Server addservice() getservice() name : String <<inner class>> 1 DummyService service 0..1 <<Int erface>> Service DummyService ist ein JUnit Mock Objekt, das die Service Schnittstelle implementiert. Wir verwenden eine innere Klasse, da sie nur innerhalb des Kontext des Tests Sinn macht. Prof. Dr. Nikolaus Wulff 18