Kapitel 18: Java ein paar Kleinigkeiten zum Schluss. Grundlagen der Programmierung 1. Holger Karl. Wintersemester 2016/2017. Inhaltsverzeichnis 1

Ähnliche Dokumente
7. Pakete Grundlagen der Programmierung 1 (Java)

Grundlagen der Programmierung Prof. H. Mössenböck. 15. Pakete

10. Pakete Einführung in die Programmierung (fbw) Sommersemester 2007 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

Programmierkurs Java

ADT: Java Collections und ArrayList

Java Einführung Collections

Einstieg in die Informatik mit Java

Programmierkurs Java

Objektorientierung II & die Java Klassenbibliothek. Kristian Bergmann und Arthur Lochstampfer

Kapitel 10. Programmierkurs. Grundlagen von Exceptions Behandlung von Exceptions

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Wie entwerfe ich ein Programm?

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete! 4. Ausnahmen (Exceptions) II.4.

Einstieg in die Informatik mit Java

II.4.5 Generische Datentypen - 1 -

Autoboxing - Nachtrag

Objektorientierte Programmierung. Kapitel 16: Pakete, Zugriffsschutz

Programmiermethodik 3. Klausur Lösung

Programmiermethodik 1. Klausur

Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe

Programmieren 2 16 Java Collections und Generizität

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

12 Abstrakte Klassen, finale Klassen und Interfaces

Javakurs zu Informatik I. Henning Heitkötter

Java I Vorlesung Generics und Packages

Java I Vorlesung Collections

Methoden und Wrapperklassen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Algorithmen und Datenstrukturen

Pakete Software Entwicklung 1

Beispiel: Temperaturumwandlung. Imperative Programmierung. Schwerpunkte. 3. Grundlegende Sprachkonstruktionen imperativer Programme

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Weitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax

Datenbankanwendungsprogrammierung Crashkurs Java

10. Pakete. Ein Paket (package) bündelt thematisch zusammengehörige Klassen und Schnittstellen zu einer Klassenbibliothek.

1 Fehler-Objekte: Werfen, Fangen, Behandeln

Ausnahmebehandlung. Ausnahmen werfen (auslösen) Eigene Ausnahmen definieren. Ausnahmen abfangen. Ausnahmen definieren

Info B VL 14: Java Collections/Reflections

Fragenkatalog ESOP WS 16/17

1.7 Fehler- und Ausnahmebehandlung

Algorithmen und Programmierung III WS 05/06

11. Funktionale Programmierung Advanced Programming Techniques Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Innere Klassen. Innere Klassen. Page 1. Lernziele: innere Klassen, statische geschachtelte Klassen, anonyme Klassen.

1 Polymorphie (Vielgestaltigkeit)

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

Teil V. Generics und Kollektionen in Java

II.1.1. Erste Schritte - 1 -

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Java - Programmierung - Objektorientierte Programmierung 1

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Silke Trißl Wissensmanagement in der Bioinformatik. Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: Farbe Hubraum Tank...

Einfache Liste: Ein Stapel (Stack) Ansatz. Schaubild. Vorlesung 1. Handout S. 2. Die einfachste Form einer Liste ist ein Stapel (stack).

3. Grundlegende Sprachkonstruktionen imperativer Programme

Einführung in die Programmierung I. 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich

7.0 Arbeiten mit Objekten und Klassen

Grundlagen der Programmierung Prof. H. Mössenböck. 16. Ausnahmen (Exception Handling)

Wo und wie lange leben Objekte? globale Objekte lokale Objekte dynamische Objekte

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Objektorientierte Programmierung

Kapitel 9: Klassen und höhere Datentypen. Selektoren

Eingabe und Ausgabe in Java. Dr. Horst Treiblmaier Abteilung für Wirtschaftsinformatik WU Wien

14 Abstrakte Klassen, finale Klassen, Interfaces

Sprechen Sie Java? Hanspeter Mössenböck. Tm\ dpunkt.verlag. Eine Einführung in das systematische Programmieren

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

To know recursion, you must first know recursion. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 17 1

Einstieg in die Informatik mit Java

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 1 - Variablen und Kontrollstrukturen

Repetitorium Informatik (Java)

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Java 8. basierend auf Folien von Florian Erhard

Allgemeine Informatik II SS :30-13:30 Uhr

ListElement (E i n f o, ListElement<E> prev, ListElement<E> next ) {

Wiederholung aus SWE2

Institut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur

Bei for-schleifen muss man nur immer bedenken, dass die letzte Anweisung immer erst nach der Ausführung der restlichen Anweisungen der Schleife

Kapitel 5: Interfaces

Deklaration einer Klasse Innere innerhalb Klassen einer in Ja anderen v a Klasse

Objektorientierte Programmierung Studiengang Medieninformatik

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

Institut für Programmierung und Reaktive Systeme 7. Juli Programmieren II. Übungsklausur

Properties und Proxies

Programmierkurs Java

Programmieren 2 Java Überblick

Java - Programmierung - Prozedurale Programmierung 1

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

Interface. So werden Interfaces gemacht

Klausur Grundlagen der Programmierung

13. Funktionale Konzepte in Java

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Neuere Sprachelemente in Java

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. Juni 2004

Einstieg in die Informatik mit Java

Instrumentierung und Dekodierung

Übungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit

Objektorientierte Programmierung. Kapitel 14: Interfaces

Interfaces, Generics und Exceptions

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen

Closures in Java. Michael Wiedeking. Java Forum Stuttgart Juli MATHEMA Software GmbH (

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Transkript:

Kapitel 18: Java ein paar Kleinigkeiten zum Schluss Grundlagen der Programmierung 1 Holger Karl Wintersemester 2016/2017 Inhaltsverzeichnis Inhaltsverzeichnis 1 Abbildungsverzeichnis 2 Liste von Definitionen u.ä. 2 18.1 Überblick............................... 3 18.2 Exceptions.............................. 3 18.3 Lambda-Ausdrücke......................... 4 18.4 Generizität.............................. 6 18.5 Pakete................................ 7 18.6 Standardpakete........................... 9 1

18.7 Zusammenfassung......................... 11 Abbildungsverzeichnis 18.1 Beispiel einer UML-Darstellung eines einfachen Paketes mit zwei Klassen............................. 7 18.2 Pakete von Paketen; UML-Darstellung.............. 8 Liste von Definitionen u.ä. 2

18.1. Überblick 3 18.1 Überblick 18.1.1 Was bisher geschah Java Grundlagen Die wundersame Welt der Objektorientierung in Java 18.1.2 Dieses Kapitel Fehlende Kleinigkeiten Betonung einiger Aspekte der aktuellen Java Version 8 18.2 Exceptions 18.2.1 Exceptions Java hat einen Exception-Mechanismus sehr ähnlich zu Python Klassenbasiert; erweiterbar;... Syntax leicht unterschiedlich Behandlung: try und catch (statt except) Auslösen: throw statt raise finally wie final Beispiel 1 try { 2 /* Anweisungen */ 3 } catch (OverflowException UnderflowException e) { 4 /* Anweisungen */ 5 } catch (Exception e) { 6 /* Anweisungen */ 7 } finally { 8 /* Anweisungen */ 9 } 18.2.2 Exceptions im Methodenkopf Besonderheit: Eine Methode kann Exceptions aufzählen, die sie nicht selbst behandelt

4 Liste von Definitionen u.ä. Beispiel: Methode zum Datei öffnen kann ein File not found nicht selbst sinnvoll behandeln Syntax: throws (das s ist wichtig!) als Teil der Signatur 1 class X { 2 void m () throws ExceptionName1, ExcpetionName2, { 3 /* Anweisungen */ 4 if (...) throw ExceptionName1; 5 } 6 } 18.2.3 Nutzung solcher Methoden Angenommen, wir wollen dieses m in einer anderen Methode m1 nutzen Dann müssen alle von m (möglicherweise) geworfenen Exceptions entweder Bei einem Aufruf von m in einem catch behandelt werden oder m1 muss eine nicht behandelte Exception-Klasse ihrerseits im Methodenkopf als throws deklarieren Andernfalls: Compiler stellt fest, dass nicht alle Exceptions behandelt werden Verweigert Übersetzung Konsequenz: spätestens in main wird alles behandelt Ausnahme: System-Exceptions wie NullPointer 18.3 Lambda-Ausdrücke 18.3.1 Java 8: Lambda-Ausdrücke! Vor Java 8: Keine Lambda-Ausdrücke Mit extrem umständlichen Hilfskonstruktionen, z.b. anonyme Klassen, um eine Vergleichsfunktion für Sortieren zu definieren Seit Java 8: Lambda-Ausdrücke; im Prinzip ähnlich zu Python Mit anonymem Interface mit einer Methode Implizit, ohne ausdrückliches Interface 18.3.2 Java 8: Lambda-Ausdrücke Beispiel mit Interface

18.3. Lambda-Ausdrücke 5 1 // wir brauchen zunächst ein Interface als Typ 2 // hier: Integer auf Integer abbilden 3 interface meinfunktionstyp {int exec (int x); } 4 5 // davon können wir eine Variable bauen: 6 meinfunktionstyp f; 7 8 // und an f einen Lambda-Ausdruck zuweisen: 9 f = x -> x * x; 10 11 // Test - Achtung, man muss die Methode aufrufen! 12 int y = f.exec(5); 13 System.out.println(y); f ==> null f ==> $Lambda$6/327177752@56ef9176 y ==> 25 25 18.3.3 Java 8: Lambda-Ausdruck ohne Interface Zwei Lambda-Ausdrücke: Vergleich bei Filter, Ausdrucken Vorsicht, Seiteneffekt! 1 import java.util.stream.stream; 2 3 class Lambda { 4 public static void main (String[] args) { 5 Stream.of(1954, 1974, 1990, 2014).filter(x -> x>1980).foreach(x -> Sys 6 } 7 } -> System.out.println(x)); 1990 2014 Stream Klasse, um funktionale Ansätze auf Folgen von Daten zu unterstützen Wichtige Methoden: filter, foreach, findany, map, of Siehe Referenz

6 Liste von Definitionen u.ä. 18.3.4 Java 8: Lambda vs. Closures Zitat: A closure is a lambda expression paired with an environment that binds each of its free variables to a value. In Java, lambda expressions will be implemented by means of closures, so the two terms have come to be used interchangeably in the community. Aber nur, weil die Java community den Unterschied nicht versteht! 18.4 Generizität 18.4.1 Generizität Bisher: Alle Methoden hatten feste Typen Den gleichen Code immer wieder schreiben, nur weil sich ein Typ ändert? Sortieralgorithmus für Zahlen, einen anderen für Strings,...? Sortieren ist immer gleich nur das Vergleichen und Kopieren unterscheidet sich Optionen: Man fällt auf Object zurück (ggf. durch Boxing) * Nachteil: Wie konvertiert man in eigentlichen Typ zurück? (Z.B. Element aus Liste entnommen?) * Nachteil: In eine Liste für Strings können auch Zahlen abgelegt werden Man erfindet generische Typen 18.4.2 Generische Typen Idee: Man lässt bei einer Klasse einen Typ als Parameter zu! Damit eigentlich eine Familie von Klassen definiert! Beim Instatiieren eines Objekts: Konkreten Typ für den Parameter nennen Beispiel: allgemeine Klasse für Liste, durch Typ parametriert 1 class Liste<T> { 2 T[] data; 3 void add (T x) {... }; 4 T remove() {...}; 5 void sort() {... /* Vergleich von T Objekte */... } 6 } 7

18.5. Pakete 7 8 Liste<String> textliste = new Liste<String>(); 9 textliste.add("hallo"); 10 11 // das gibt Fehler: 12 textliste.add(42); 18.5 Pakete 18.5.1 Pakete Zusammenfassung von Klassen zu größeren Einheiten: Paketen Zuordnung einer Klasse zu Paket Paketname: Anweisung package Paketname; im Kopf der.java-datei der Klasse Beispiel UML Abbildung 18.1: Beispiel einer UML-Darstellung eines einfachen Paketes mit zwei Klassen 18.5.2 Pakete und Verzeichnisse Klassen: Dateien Klasse C in Datei C.java Pakete: Verzeichnisse! Klassen eines Paketes P in Verzeichnis P Beispiel oben: In Verzeichnis graphics die Dateien Circle.java und Rectangle.java 18.5.3 Pakete von Paketen, Verzeichnisse in Verzeichnissen Pakete zu Paketen zusammenfassen Dateien liegen in Unterverzeichnissen von Verzeichnissen 18.5.4 Klassen, Pakete - wo gesucht? Suche beginnt ab aktuellem Verzeichnis

8 Liste von Definitionen u.ä. Abbildung 18.2: Pakete von Paketen; UML-Darstellung Angenommen, static void main ist ein MyApp.java, was Teil des Pakets graphics ist, was Teil des Pakets utilities ist Dann Übersetzen (javac) bzw. Starten (java) Ab Verzeichnis oberhalb von Utilities javac utilities/graphics/myapp.java java utilities/graphics/myapp Zustätzliche Suche ab Verzeichnissen in Umgebungsvariable CLASSPATH Eine häufige Fehlerquelle! 18.5.5 Explizites Importieren aus Paketen Tpyischerweise: Klassen aus Paketen importieren Anweisung: import Direkt nach Anweisung package Folge der Paketnamen und Klassenname! Durch Punkt getrennt Fügt Klasse dem Namensraum hinzu Beispiel: import utilities.graphics.circles Dann: Circle c = new Circle() 18.5.6 Implizites Importieren Klassen auch nutzbar durch Angabe des vollständig qualifizierten Paketnamens Ohne import Beispiel: utilities.graphics.circle c = new utilities.graphics.circle() 18.5.7 Sichtbarkeit bzgl. Paketen Java ist ja bei der Sichtbarkeit von Methoden einer Klasse schon paranoid Das ist bei Sichtbarkeit von Klassen in Paketen nicht anders Klassen können mit public etc. versehen werden Default: Package private Zugriff nur von innerhalb des Pakets Siehe auch Stack Overflow Diskussion Wir präzisieren obige Tabelle:

18.6. Standardpakete 9 Die beiden Spalten Paket und Unterklasse (gleiches Paket) sind natpürlich gleich; das soll nur Unterschied zu Unterklasse in anderem Paket verdeutlichen Annotation Klasse selbst Paket Unterklasse (gleiches Paket) Unterklasse (anderes Paket) public Ja Ja Ja Ja Ja protectedja Ja Ja Ja Nein keine Angabe Ja Ja Ja Nein Nein private Ja Nein Nein Nein Nein Andere Klasse/von aussen Anmerkung: keine Angabe entspricht einer Art package Das gibt es aber nicht als Schlüsselwort 18.6 Standardpakete 18.6.1 Standardpakete java.lang: Standardklassen wie String java.io: Klassen für Ein-/Ausgabe in Dateien, Tastatur,... java.util: Hilfsklasse wie Random, Date,... sowie die das Collection Paket (siehe unten) javax.swing: Paket für graphische Benutzeroberfläche 18.6.2 Standardpakete: java.util.collection Wichtiges Paket für Standard-Datentypen: Listen, Mengen, Dictionaries,... Als generische Typen Samt Iteratoren Details z.b. Kapitel 23, Mössenböck Kern: Interface Collection Von den meisten Klassen dieses Pakets implementiert 18.6.3 Standardpakete: java.util.collection Interface Collection Typische Methoden für alle Collections:

10 Liste von Definitionen u.ä. add remove clear contains size 18.6.4 Standardpakete: java.util.collection Interface Iterator Iterator bietet Methoden: hasnext next remove (aus Sammlung entfernen) Generisch, passend zum Typ der in Collection gespeichert ist 18.6.5 Standardpakete: java.util.collection Beispiel ArrayList 1 ArrayList<String> liste = new ArrayList<String>(); 2 3 liste.add("hallo"); 4 liste.add("gp1"); 5 6 // Mit for iterieren: 7 for (String s: liste) System.out.println(s); 8 9 // Mit einem expliziten Itertor iterieren: 10 Iterator<String> it = liste.iterator(); 11 while (it.hasnext()) System.out.println(it.next()); liste ==> [] $2 ==> true $3 ==> true Hallo GP1 it ==> java.util.arraylist$itr@56ef9176 Hallo GP1 18.6.6 Standardpakete: java.util.collection Beispiel FileInputStream Datenstrom: Abstraktion einer (potentiell unendlichen) Folge von Daten Ein- oder Ausgabe Unterschiedlich granular: Bytes,... Unterschiedliche Ziele: Dateien,...

18.7. Zusammenfassung 11 Beispiel: Datei zeichenweise kopieren 1 import java.io.*; 2 3 class CharacterwiseCopying { 4 public static void main (String[] args) throws IOException { 5 Reader r = new FileReader(args[0]); 6 Writer w = new FileWriter(args[1]); 7 int ch = r.read(); 8 while (ch >= 0) { w.write(ch); ch = re.read(); } 9 r.close(); 10 w.closer(); 11 } 12 } 18.7 Zusammenfassung 18.7.1 Zusammenfassung Mit Java 8 versucht die Sprache, Anschluss an sinnvolle Konzepte zu halten Für praktische Programmierung wichtige Konzepte vorhanden Generizität Eine sinnvolle Sammlung von Standardpaketen Insgesamt: Java zahlt einen hohen Preis für die statische Typisierung!