Vorlesung Informatik 2

Werbung
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
[email protected]
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
Enums(1)
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?
Andreas Rau, 23.03.07
D:\home\ar\fhte\vorlesungen\informatik2\folien\informatik2-theorie-tigernews.sdd
#4
Enums(2)
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
“
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
Enums(3)
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;
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++) {
int current = arr[i];
}
Iterator iter = coll.iterator();
while (iter.hasNext()) {
Object current = iterator.next();
}
Andreas Rau, 23.03.07
“
for ( int current : arr) {
}
for ( Object current : coll) {
}
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
Generics(2a)
Beispiel (ohne Generics)
// (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
Generics(2a)
Beispiel (mit Generics)
// (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
Generics(3)
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;
}
}
Capsule<String> capsule = new Capsule<String>( “Beispiel“);
Andreas Rau, 23.03.07
D:\home\ar\fhte\vorlesungen\informatik2\folien\informatik2-theorie-tigernews.sdd
#14
Herunterladen