Programmiertechnik Erweiterungen in Java 5

Ähnliche Dokumente
Distributed Computing Group

1 Polymorphie (Vielgestaltigkeit)

5. Tutorium zu Programmieren

Javakurs für Anfänger

Java-Schulung Grundlagen

Tutorium Rechnerorganisation

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Ein erstes Java-Programm

Algorithmische Kernsprache. Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging.

Java für Computerlinguisten

Java: Vererbung. Teil 3: super()

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

5.4 Klassen und Objekte

Propädeutikum zur Programmierung

Dr. Monika Meiler. Inhalt

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

Datenbankanwendungsprogrammierung Crashkurs Java

Primitive Datentypen

Programmieren I. Kontrollstrukturen. Heusch 8 Ratz Institut für Angewandte Informatik

Deklarationen in C. Prof. Dr. Margarita Esponda

Algorithmen und Datenstrukturen

Computeranwendung und Programmierung (CuP)

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

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Java-Vorkurs Wintersemester 15/16

Java: Eine Übersicht. Dennis Giffhorn. Lehrstuhl für Programmierparadigmen Universität Karlsruhe

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. November 2003

C# im Vergleich zu Java

Java Einführung Methoden in Klassen

Objektorientierte Programmierung. Objektorientierte Programmierung. Klasse. Objekt. Beispiel: Sportfest1. Methode. Eine Einführung mit BlueJ

Kapitel 6. Vererbung

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

HEUTE. Effizienzbeispiel: bekannte Version (Übung ) Mathematik: Was ist Effizienz? vollständige Induktion

C#Objektorientierte. Aleksandra Maj. Programmiersprachen. Programmiersprachen am Beispiel C# Referat im Rahmen des Seminars. 15.

Kapitel 6. Vererbung

Kapitel 6. Vererbung

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

EINI WiMa/LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Objekt-Orientierte Programmierung

3 Objektorientierte Konzepte in Java

Programmierung in C. Grundlagen. Stefan Kallerhoff

Aufgabe 1. »Programmieren«, WS 2006/2007. Nino Simunic M.A.

Versuchsziele Kenntnisse in der Anwendung von: Sortieren mit Klassen Benutzung von generischen Klassen o Definition o Sortierung.

Modellierung und Programmierung 1

einkonto.zahle(+100); //Transaktion Einzahlung einkonto.zahle(-20); //Transaktion Auszahlung einkonto.zahle(+30); //Transaktion Einzahlung

Dynamische Sprachen auf der JVM

3 Objektorientierte Konzepte in Java

Programmieren in C. C Syntax Datentypen, Operatoren und Kontrollstrukturen. Prof. Dr. Nikolaus Wulff

im Rahmen des Seminars - Programmiersprachen Markus Nestvogel

Einführung in die C-Programmierung

Objective-C CheatSheet

2. Semester, 2. Prüfung, Lösung

Einfache Rechenstrukturen und Kontrollfluss II

Übungsblatt 3: Algorithmen in Java & Grammatiken

Teil 1: Grundeigenschaften von Rechnern und Software

1. Übung zu "Numerik partieller Differentialgleichungen"

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Programmieren in Java

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

C# 2000 Expression Beispielcodes für Konsolen- und Formularanwendung

Datentypen: Enum, Array, Struct, Union

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

C++ - Operatoren. Eigene Klassen mit neuen Funktionen

Moderne C-Programmierung

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Objektorientierte Programmierung

Modul 122 VBA Scribt.docx

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

1. Der Einstieg in Java. Was heißt Programmieren?

C# Programmierung. Eine Einführung in das.net Framework. C# Programmierung - Tag 1: Grundlagen

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Übungen Programmieren 1 Felix Rohrer. Übungen

Repetitorium Informatik (Java)

Probeklausur: Programmierung WS04/05

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Hello world. Sebastian Dyroff. 21. September 2009

Ab J2SE 5.0 Unterstützung formatierter Bildschirmausgaben. Mit den Operatoren und Klammern können Boolesche Ausdrücke gebildet werden Beispiel:

II.1.1. Erste Schritte - 1 -

Teil 1: Grundeigenschaften von Rechnern und Software

Testklausur 1 zur Vorlesung. Modellierung und Programmierung I. Dr. Monika Meiler Zeit: 60 Minuten

Einführung in die Java- Programmierung

Typumwandlungen bei Referenztypen

Propädeutikum zur Programmierung

Musterlösungen zur Klausur Informatik 3

Programmiertechnik Skalare Typen,Variablen, Zuweisungen

Java Kurs für Anfänger Einheit 5 Methoden

Innere Klassen in Java

Programmieren in C. Eigene Datentypen per typedef und Strukturen. Prof. Dr. Nikolaus Wulff

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Programmieren I. Prinzipieller Ablauf. Eigenschaften von JAVA. Source-Code Javac Bytecode. Java Virtual Machine (Java, Browser, Appletviewer)

Javakurs 2013 Objektorientierung

5.5.8 Öffentliche und private Eigenschaften

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

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

Algorithmen und Datenstrukturen 07

Prinzipielle Ausführungsvarianten I

Transkript:

Programmiertechnik Erweiterungen in Java 5 Prof. Dr. Oliver Haase! Oliver Haase Hochschule Konstanz!1

Überblick Mit Java 5 wurde Java um einige neue Konstrukte erweitert, z.b.:! vereinfachte For-Schleifen (For-Each-Schleife)! variable Argument-Anzahl! automatische Typwandlung für Wrapper-Klassen! Aufzähltypen! generische Datentypen Oliver Haase Hochschule Konstanz!2

vereinfachte Schleifen Oliver Haase Hochschule Konstanz!3

Motivation! Beobachtung: Viele For-Schleifen beziehen sich auf ein Feld feld und haben das Format: for ( int i = 0; i < feld.length; i++ ) // verwende feld[i];! Beispiel: String[] colors = { "red", "green", "blue";! for (int i = 0; i < colors.length; i++ ) { System.out.println("Color: " + color[i]); Oliver Haase Hochschule Konstanz!4

vereinfachte Notation! Seit Java 5 gibt es dafür eine vereinfachte Schreibweise: Syntaxregel for ( <KomponentenTyp> <Variable> : <Feld> ) // verwende <Variable>;! wobei <KomponentenTyp> der Komponententyp des Feldes <Feld> ist! Bedeutung: " durchlaufe die Schleife <Feld>.length Mal; " weise bei jedem Durchlauf der Variablen <Variable> die nächste Komponente des Feldes <Feld> zu; " verwende <Variable> für die Berechnung im Schleifenrumpf. Oliver Haase Hochschule Konstanz!5

Beispiel! Beispiel: String[] colors = { "red", "green", "blue";! for (String color : colors ) { System.out.println("Color: " + color);! Vorteil: " Erspart die Definition der Indexvariablen; " #kann auch mit Collections verwendet werden; Oliver Haase Hochschule Konstanz!6

Noch ein Beispiel! Beispiel: Konvertiere ein Feld von Temperaturen in Grad Fahrenheit nach Temperaturen in Grad Celsius ( ).! Lösung 1 mit "herkömmlicher" For-Schleife: double[] temps = {0, 32, 50, 86, 98.6; for (int i = 0; i < temps.length; i++ ) { double degreec = 5.0 / 9.0 * (temps[i] 32); System.out.println(temps[i] + "F = " + degreec + "C");! Lösung 2 mit vereinfachter For-Schleife: for (double temp : temps ) { double degreec = 5.0 / 9.0 * (temp 32); System.out.println(temp + "F = " + degreec + "F"); Oliver Haase Hochschule Konstanz!7

Anwendbarkeit! Aber: Die vereinfachte Schreibweise kann nicht immer verwendet werden!! Wann nicht?! Wenn der Index im Schleifenrumpf benötigt wird.! Beispiel 1: for (int i = 0; i < colors.length; i++ ) { System.out.println("Color " + i + ": " + color[i]); Oliver Haase Hochschule Konstanz!8

Anwendbarkeit! Beispiel 2: initialisiere ein Feld mit den ersten 100 ungeraden Zahlen auch hier kann die vereinfachte Schleife nicht verwendet werden. int[] oddnumbers = new int[100];! for (int i = 0; i < oddnumbers.length; i++ ) { oddnumbers[i] = 2 * i + 1; Oliver Haase Hochschule Konstanz!9

variable Argument-Anzahl Oliver Haase Hochschule Konstanz!10

Motivation! Gesucht: Eine Methode, mit der 2, 3, 4, Zahlen miteinander summiert werden können.! Option 1 (Überladung): schreibe n verschiedene Varianten der Methode summiere, für 2, 3, 4, Parameter: public static int summiere(int a, int b) { return a + b; public static int summiere(int a, int b, int c) { return a + b + c; public static int summiere(int a, int b, int c, int d) { return a + b + c + d; Oliver Haase Hochschule Konstanz!11

Motivation! Option 2: Übergeben der Parameter als Feld: public static int summiere(int[] werte) { int summe = 0; for ( int i = 0; i < werte.length; i++ ) summe += werte[i]; return summe; oder (unter Verwendung einer vereinfachten Schleife): public static int summiere(int[] werte) { int summe = 0; for ( int wert : werte ) summe += wert; return summe; Oliver Haase Hochschule Konstanz!12

Motivation! Nachteil: Der Aufrufer muss die zu summierenden Zahlen vor dem Aufruf der Methode summiere in ein Feld verpacken.! Beispiel: Bilde die Summe der Zahlen 1 bis 5: int[] werte = new int[5];! for ( int i = 0; i < werte.length; i++ ) { werte[i] = i + 1; int summe = summiere(werte); Oliver Haase Hochschule Konstanz!13

variable Argument-Anzahl! In Java 5 kann der letzte Parameter einer Methode als variabel deklariert werden. Dies geschieht mit der folgenden Syntax: Syntaxregel <Typ>... <VariablenName>! Der Aufrufer kann beliebig viele Parameter des entsprechenden Typs übergeben (auch gar keinen).! Java verpackt diese bei der Übergabe automatisch in ein Feld.! Die aufgerufenen Methode greift auf ein Feld namens <VariablenName> mit Komponententyp <Typ> zu. Oliver Haase Hochschule Konstanz!14

variable Argument-Anzahl! Beispiel: public static int summiere(int... werte) { int summe = 0; for ( int wert : werte ) summe += wert; return summe;! Aufruf: int summe = summiere(1, 2, 3, 4, 5); Oliver Haase Hochschule Konstanz!15

variable Argument-Anzahl! Frage: Warum geht das nur für den letzten Methodenparameter?! Antwort: Weil Java sonst Schwierigkeiten haben könnte, zu unterscheiden, ob ein übergebener Wert noch zu einem variablen Argument gehört, oder schon den nächsten Parameter darstellt. Oliver Haase Hochschule Konstanz!16

automatische Typwandlung für Wrapper-Klassen Oliver Haase Hochschule Konstanz!17

Was sind Wrapper-Klassen?! Für jeden sklaren Typ stellt Java eine entsprechende Klasse bereit, die einen Wert des entsprechenden Typs in ein Objekt einhüllt. skalarer Typ byte short int long float double char boolean Wrapper-Klasse Byte Short Integer Long Float Double Character Boolean Wrapper-Objekt, z.b. vom Typ Float 2.7182 sklarer Wert, z.b. float Oliver Haase Hochschule Konstanz!18

Boxing/Unboxing! Skalarer Wert # Wrapper-Objekt: Konstruktoraufruf, z.b. int a = 5; Integer zahl = new Integer(a);! Konvertierung in diese Richtung heißt auch Boxing.! Wrapper-Objekt # Skalarer Wert : Verwendung einer Instanzmethode <xxx>value, z.b. Integer zahl = new Integer(5); int a = zahl.intvalue();! Konvertierung in diese Richtung heißt auch Unboxing. Oliver Haase Hochschule Konstanz!19

Wozu Wrapper-Klassen?! Mit Hilfe von Wrapper-Objekten können skalare Werte dort verwendet werden, wo Objekte verlangt sind, z.b. in Containern: public class Paar { private Object l, r; public Paar(Object l, Object r) { this.l = l; this.r = r; public Object getl() { return l; public Object getr() { return r; public String tostring() { return "(l, r) = (" + l + ", " + r + ")"; Oliver Haase Hochschule Konstanz!20

Wozu Wrapper-Klassen?! Verwendung skalarer Werte als Komponenten von Paar: public class Boxing { public static void main(string[] args) { Integer a = new Integer(3); Double b = new Double(5.0); Paar p = new Paar(a, b); double x = 7 + 4 * a.intvalue() b.doublevalue() / 8;! Ohne Wrapper-Objekte könnten die Werte 3 und 5.0 nicht an den Konstruktor der Klasse Paar übergeben werden.! Aber: Wrapper-Objekte erfordern explizites Boxing und Unboxing. Oliver Haase Hochschule Konstanz!21

Auto(un)boxing! In Java 5 müssen das Boxing und Unboxing nicht mehr explizit programmiert werden.! Der Compiler erledigt das automatisch #Autoboxing/Autounboxing.! Code wird übersichtlicher. public class Boxing { public static void main(string[] args) { Integer a = 3; Double b = 5.0; Paar p = new Paar(a, b); double x = 7 + 4 * a b / 8; Oliver Haase Hochschule Konstanz!22

Aufzähltypen Oliver Haase Hochschule Konstanz!23

Was sind Aufzähltypen?! Aufzähltypen (enumerations, enums) sind selbstdefinierte Datentypen, die über die explizite Aufzählung ihrer möglichen Werte definiert sind.! Beispiele: " Himmelsrichtung = { Nord, Ost, Sued, West " Wochentag = { Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag " Eissorte = { Himbeere, Vanille, Schokolade, Pistazie " Filmgenre = { Komödie, Drama, Zeichentrick, Reality, ScienceFiction! Wie man sieht, werden in Aufzähltypen artverwandte Dinge zusammengefasst. Oliver Haase Hochschule Konstanz!24

Java enum! Java unterstützt Aufzähltypen als spezielle Klassen: Syntaxregel public enum <EnumName> { <Wert1>, <Wert2>,, <Wertn>;! Beispiel: public enum Eissorte { Himbeere, Vanille, Schoko, Pistazie; Oliver Haase Hochschule Konstanz!25

Java enum Verwendung! Verwendung: " in der Variablendeklaration und Wertzuweisung: Eissorte meineis = Eissorte.Himbeere; " beim Ausdrucken: System.out.println("Mein Eis hat den Geschmack " + meineis); Konsole Mein Eis hat den Geschmack Himbeere Oliver Haase Hochschule Konstanz!26

Java enum Verwendung! Enum in Switch-Anweisung: Enum-Werte können als Case-Labels verwendet werden: switch ( meineis ) { case Himbeere: System.out.println("lecker!"); break; case Vanille: System.out.println("Geschmackssache"); break; case Schoko: System.out.println("Wem's schmeckt.."); break; case Pistazie: System.out.println("Schmeckt nussig!"); break; default: System.out.println("Gibt's eine neue Sorte?"); break; Oliver Haase Hochschule Konstanz!27

Java enum Erweiterung! Für Enums können Instanzvariablen, Konstruktoren und Instanzmethoden definiert werden: public enum Eissorte { Himbeere(80), Vanille(90), Schoko(120), Pistazie(75);! private int kalorien; private Eissorte(int kalorien) { this.kalorien = kalorien;! public getkalorien() { return kalorien; Oliver Haase Hochschule Konstanz!28

Java enum Erweiterung! Verwendung: Eissorte meineis = Eissorte.Himbeere;! System.out.println("Mein Eis hat den Geschmack " + meineis + " und " + meineis.getkalorien() + " Kalorien."); Konsole Mein Eis hat den Geschmack Himbeere und 80 Kalorien. Oliver Haase Hochschule Konstanz!29