Vorlesung Informatik 2



Ähnliche Dokumente
Teil V. Generics und Kollektionen in Java

Programmierkurs Java

Programmieren in Java

Neuere Sprachelemente in Java

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1

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

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

Wiederholung aus SWE2

Einstieg in die Informatik mit Java

Informatik II Übung 6

Probeklausur: Programmierung WS04/05

Einstieg in die Informatik mit Java

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

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

Programmierkurs Java

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

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

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

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

II.4.4 Exceptions - 1 -

Repetitorium Informatik (Java)

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

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen

JAVA 5 Generics. Proseminar Programmiersprachen Thema Java 5 Generics 1

Java Einführung Klassendefinitionen

II.1.1. Erste Schritte - 1 -

Einführung in die Programmierung

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Programmieren 2 16 Java Collections und Generizität

2 Eine einfache Programmiersprache

Java-Grundkurs für Wirtschaftsinformatiker

Algorithmen und Datenstrukturen

Kapitel 5: Interfaces

Javakurs zu Informatik I. Henning Heitkötter

Objektorientierte Programmierung mit C++ SS 2007

Anregungen zu Übung 2

Gliederung. Algorithmen und Datenstrukturen II. Java: Objektorientierung. Java: Objektorientierung. Objektorientierung in JAVA. D.

Überschreiben von Methoden

Polymorphismus 179. Function.h. #include <string>

12) Generische Datenstrukturen

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

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

Überblick. Java 5. Java 6. Java 7. Referenzen. neue Sprachfeatures Erweiterungen Klassenbibliothek. Erweiterungen Klassenbibliothek

Theorie zu Übung 8 Implementierung in Java

II.1.1. Erste Schritte - 1 -

Programmieren in Java

Objektorientierte Programmierung Studiengang Medieninformatik

Vererbung, Polymorphie

Einstieg in die Informatik mit Java

Programmiermethodik 1. Klausur

C# - Einführung in die Programmiersprache Arrays, Enumeration und Collections. Leibniz Universität IT Services Anja Aue

2 Eine einfache Programmiersprache

Java I Vorlesung Collections

Informationsverarbeitung im Bauwesen

Java I Vorlesung Generics und Packages

2 Eine einfache Programmiersprache. Variablen. Operationen Zuweisung. Variablen

Java Einführung Vererbung und Polymorphie. Kapitel 13

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

11. Komponenten Grundlagen der Programmierung 1 (Java)

Generische Datenstrukturen

Programmieren in Java -Eingangstest-

Computeranwendung und Programmierung (CuP)

Abschnitt 10: Datenstrukturen

Programmieren in Java

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

Java Spickzettel von Panjutorials.de

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Grundlagen der Programmierung Teil1 Einheit III Okt. 2010

Javakurs für Anfänger

2 Eine einfache Programmiersprache

Programmierkurs Java. Vererbung. Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck

Generisches Programmieren. Generisches Programmieren

Java-Grundkurs für rtschaftsinformatiker

Transkript:

Vorlesung Informatik 2 Fachhochschule für Technik Esslingen Studiengang Wirtschaftsinformatik Neues in Java 5.0 (Tiger) Dr. rer. nat. Andreas Rau http://www.fht-esslingen.de/~rau andreas.rau@fht-esslingen.de Andreas Rau, 23.03.07 D:\home\ar\fhte\vorlesungen\informatik2\folien\informatik2-theorie-tigernews.sdd #1

Inhalt Die folgenden Folien fassen die wichtigsten Neuigkeiten in Java 5.0 (Tiger) zusammen. Andreas Rau, 23.03.07 D:\home\ar\fhte\vorlesungen\informatik2\folien\informatik2-theorie-tigernews.sdd #2

Übersicht Ziel von Java 5.0 war es, den Programmierer durch Erweiterungen der Sprache davon zu entlasten, nicht vorhandene Sprachelemente mühsam von Hand nachzubauen. Alle Neuerungen werden durch den neuen Java Compiler so in Bytecode übersetzt, dass sie auch mit alten JVMs laufen(!). Es handelt sich also nicht um etwas grundsätzlich Neues sondern um eine intelligente Anwendung der vorhandenen Konzepte. Andreas Rau, 23.03.07 D:\home\ar\fhte\vorlesungen\informatik2\folien\informatik2-theorie-tigernews.sdd #3

Hintergrund Obwohl in anderen Programmiersprachen wie C schon lange vorhanden gab es in Java bis zur Version 5.0 keine Enums. Stattdessen wurde mit primitiven Datentypen, konstanten Objekten oder selbstkreiierten Klassen zur Nachbildung von Enums gearbeitet. Nachteil dabei war regelmäßig der erhöhte Schreibaufwand, die mangelnde Lesbarkeit und die fehlende Typsicherheit. Beispiele public static final int LOW = 1; public static final int MEDIUM = 2; public static final int HIGH = 3; int gear; gear = LOW; // OK gear = 5; // OK? Enums(1) Andreas Rau, 23.03.07 D:\home\ar\fhte\vorlesungen\informatik2\folien\informatik2-theorie-tigernews.sdd #4

Bedeutung Ein Enum ist eine Aufzählung einer diskreten Wertemenge. Die Menge aller Werte bildet einen eigenen Datentyp. Eine Zuweisung an entsprechnde Variablen darf nur mit nur gültigen Werte aus der vordefinierten Menge erfolgen. Typische Operationen: Auflistung aller Werte Enums(2) Reihenfolge und Kodierung der Werte spielen i.a. keine Rolle. Letztere kann jedoch interessant werden, wenn man Enums in einer Datenbank speichern will. Andreas Rau, 23.03.07 D:\home\ar\fhte\vorlesungen\informatik2\folien\informatik2-theorie-tigernews.sdd #5

Implementierung Enums in Java werden mit Hilfe des neuen Schlüsselworts enum defininiert und sind finale Subklassen von java.lang.enum. Sie sind also verkappte Klassen und können (demnach) all deren Eigenschaften wie z.b. Konstruktoren, Instanzvariablen oder Methoden haben, Schnittstellen implementieren und in Paketen oder anderen Klassen untergebracht werden. Allerdings kann man Enum-Typen nicht instantiieren oder weiter verfeinern. Dafür bekommt man nützliche Standardfunktionen wie values() geschenkt. Beispiel enum Speed { HIGH, MEDIUM, LOW; } Speed speed = HIGH; Enums(3) Andreas Rau, 23.03.07 D:\home\ar\fhte\vorlesungen\informatik2\folien\informatik2-theorie-tigernews.sdd #6

ForEach(1) Hintergrund Datenstrukturen wie Arrays und Schleifen stehen in einer Art symbiotischen Beziehung, d.h. man kann die einen gut mit den anderen bearbeiten. Allerdings ist dazu mitunter eine Menge Verwaltungsaufwand nötig. Dies gilt insbesondere dann, wenn es sich um eine komplexere Datenstruktur handelt, bei der kein wahlfreier Zugriff via Index möglich ist oder die Anzahl der Elemente nicht feststeht. In manch anderen Programmiersprachen gibt es zur Bearbeitung von Wertemenge spezielle Schleifenkonstrukte (for each). Andreas Rau, 23.03.07 D:\home\ar\fhte\vorlesungen\informatik2\folien\informatik2-theorie-tigernews.sdd #7

ForEach(2) Bedeutung Datenstrukturen sind Ansammlungen von Werten/Objekten die zwar unterschiedlich organisiert sein können aber i.d.r. zumindest eine Möglichkeit bieten (in einer nicht näher definierten Reihenfolge) über die enthaltenen Daten zu iterieren. Grundlage einer solchen Iteration sind (1) Anfangspunkt, (2) Endpunkt, (3) Aktuelles Objekt, (4) Weiterschalten. Der Programmierer interessiert sich dabei jedoch meist nur für das aktuelle Objekt und ggf. den Endpunkt. Alles andere ist mehr oder weniger syntaktischer Ballast der durch ein geeignetes Schleifenkonstrukt nach Möglichkeit verborgen werden soll. Andreas Rau, 23.03.07 D:\home\ar\fhte\vorlesungen\informatik2\folien\informatik2-theorie-tigernews.sdd #8

ForEach(3) Implementierung Klassische Iterationen über Arrays oder Collections werden in Java mit Hilfe von for-schleifen oder while-schleifen mit Iterator implementiert. Die neue Syntax für for-each Schleifen bietet eine einheitliche Form für beides. Allerdings wurde bewußt auf neue Schlüsselwörter verzichtet. Beispiel for (int i=0; i<arr.length; i++) { for ( int current : arr) { int current = arr[i]; } } Iterator iter = coll.iterator(); for ( Object current : coll) { while (iter.hasnext()) { Object current = iterator.next(); } } Andreas Rau, 23.03.07 D:\home\ar\fhte\vorlesungen\informatik2\folien\informatik2-theorie-tigernews.sdd #9

Generics(1) Hintergrund Mit Hilfe der Klasse Object und der Vererbungshierarchie darunter ist es möglich, universelle Algorithmen und Datenstrukturen für vielfältige Objekte zu implementieren. Allerdings geht dabei die Typsicherheit teilweise verloren. Eine Einschränkung auf einen bestimmten Typ ist nur durch zusätzliche Schreibarbeit (Prüfungen, Kapselung) möglich. Um solche Nachteile zu umgehen, bieten viele mit Java vergleichbare Programmiersprachen Mechanismen wie z.b. Templates an. Andreas Rau, 23.03.07 D:\home\ar\fhte\vorlesungen\informatik2\folien\informatik2-theorie-tigernews.sdd #10

Generics(2) Bedeutung Ein Template ist eine Vorlage oder Schablone für eine Familie von Algorithmen bzw. Datenstrukturen. Dabei steht die Struktur schon exakt fest. Lediglich einige Typangaben sind mit Hilfe von Platzhaltern formuliert und werden erst bei der Verwendung der Vorlage durch einen konkreten Typ ersetzt. Praktisch bedeutet dies, dass der Compiler die Vorlage unter Verwendung des angegebenen Typs nochmal abschreibt und übersetzt. In Java heißt der entsprechende Mechanismus Generics. Damit lassen sich keine Templates sondern sogenannte parametrisierte Typen definieren. Diese werden nicht wie Templates mehrfach instantiiert sondern nur zur Übersetzungszeit mit zusätzlichen Prüfungen überwacht. Das Prinzip ist ähnlich, jedoch wird auf diese Art und Weise wesentlich weniger Code erzeugt. Andreas Rau, 23.03.07 D:\home\ar\fhte\vorlesungen\informatik2\folien\informatik2-theorie-tigernews.sdd #11

Beispiel (ohne Generics) Generics(2a) // (1) Keine Prüfung beim Befüllen List liste = new ArrayList(); liste.add( "Test"); liste.add( new Integer(1)); //... // (2) Zugriff erfordert Cast (kann schiefgehen) String s = (String)liste.get(0); Integer i = (Integer)liste.get(0); // Laufzeitfehler // (3) Schleifen sind "unbequem" for ( Object s : liste) { //... } Iterator iter = liste.iterator(); while ( iter.hasnext()) { String s = (String)iter.next(); } Andreas Rau, 23.03.07 D:\home\ar\fhte\vorlesungen\informatik2\folien\informatik2-theorie-tigernews.sdd #12

Beispiel (mit Generics) Generics(2a) // (1) Prüfung beim Befüllen List<String> liste = new ArrayList<String>(); liste.add( "Test"); liste.add( new Integer(1)); // Compile-Fehler //... // (2) Zugriff ohne Cast (klappt immer) String s = liste.get(0); Integer i = liste.get(0); // Compile-Fehler // (3) Schleifen sind "unbequem" for ( String s : liste) { //... } Iterator<String> iter = liste.iterator(); while ( iter.hasnext()) { String s = iter.next(); } Andreas Rau, 23.03.07 D:\home\ar\fhte\vorlesungen\informatik2\folien\informatik2-theorie-tigernews.sdd #13

Implementierung Um eine generische Klasse (mit generischen Methoden) zu schreiben, gibt man bei der Definition einen oder mehrere Platzhalter für Datentypen an. Diese werden bei der Deklaration(=Verwendung) durch reale Datentypen ersetzt. Beispiel public class Capsule<T> { T value; public Capsule( T value) { this.value = value; } } Generics(3) Capsule<String> capsule = new Capsule<String>( Beispiel ); Andreas Rau, 23.03.07 D:\home\ar\fhte\vorlesungen\informatik2\folien\informatik2-theorie-tigernews.sdd #14