Kapitel 1: Einführung

Transcription

Kapitel 1: Einführung
Liste P: Programmieren mit Java
WS 2001/2002
Prof. Dr. V. Turau
FH Wiesbaden
Kapitel 1: Einführung
Folie 1 : Rückblick
Entwicklung von Java begann etwa 1990
Erste öffentliche Version 1994
Erste große Anwendung: HotJava (ein Web-Browser)
Besonderheit: Applets
über das Web ladbare Programme
Ausführung im Browser
Betriebssystem übergreifend
Compiler, Interpreter und Dokumentation frei verfügbar
Folie 2 : Anforderungen
Das Konzept der Applets stellte einige Anforderungen an Java:
Ersatz für Maschinen-Code: Byte-Code
Dynamisches Binden
Betriebssystemabhängige Bibliotheken
Betriebssystemunbhängige Namensgebung
Schutz des lokalen Rechners
Kein direkter Zugriff auf beliebige Speicherbereiche
Statische Typprüfung
Zugriff auf lokale Ressourcen einschränkbar (z.B. Dateisystem)
Folie 3 : Plattformunabhängigkeit
Folie 4 : Erfahrungen mit anderen Programmiersprachen
Syntax weitestgehend identisch mit C
Objektorientiert
Weniger Konzepte als in C++
Kein Überladen von Operatoren
Keine Mehrfachvererbung
Keine friends
Alle Methoden sind virtual
Kein Zugriff auf Adressen von Variablen
Keine Adressarithmetik
Kein Präprozessor
Folie 5 : Neuerungen gegenüber C++
Automatische Freispeicherverwaltung
Trennung von Schnittstellen und Klassen
Zugriff auf Objekte nur über Zeiger (primitive Typen sind keine Objekte)
Enge Integration von Exception-Handling
Felder sind Objekte (Länge abfragbar)
Jeglicher Code ist in Klassen organisiert
....
Folie 6 : Versionen von Java
Alle Versionen (bis auf 1.0 - 1.02) sind aufwärtskompatibel:
Ein mit Version 1.2 übersetztes Programm kann mit Version 1.3 ausgeführt werden etc.
Aktuelle Version 1.3.1 (1.4 als Beta-Version verfügbar)
Name ab Version 1.2: Java 2 Standard Edition (J2SE)
Unterstützte Betriebssysteme: Linux, Solaris, Windows, MacIntosh, IBM, HP, ....
Die Sprache wurde seit Version 1.0 geringfügig erweitert
Die Anzahl der Packages (Bibliotheken) steigt ständig an
Folie 7 : Vorlesung und Übungen
Es gibt eine Web-Seite zur Vorlesung:
www.informatik.fh-wiesbaden.de/~turau/lehre/java/index.html
Links zur Software und zur Dokumentation
Code-Beispiele
Aktuelle Hinweise
Kapitel 2: Progammentwicklung mit Java
Folie 8 : Interpretierte und compilierte Sprachen
Unterscheidung: interpretierte und compilierte Sprachen
Compilierte Sprachen: C, C++, Pascal
Interpretierte Sprachen: Lisp, Basic, Prolog, SQL
Quellcode wird durch Compiler in Maschinencode übersetzt (Beispielsweise in exe-Datei)
Prozessor führt Maschinencode aus
Maschinencode ist extrem plattformabhängig
Für Java nicht verwendbar!
Folie 9 : Interpretierte und compilierte Sprachen
Ein Interpreter analysiert den Quellcode zur Laufzeit
Umsetzung der Anweisungen in Maschinenbefehle, welche direkt ausgeführt werden
Vorteil: Übersetzungsaufwand entfällt
Vorteil: Quellcode kann auf verschiedenen Rechnern ausgeführt werden
Nachteil: Längere Rechenzeiten
Nachteil: Fehler werden erst zur Laufzeit entdeckt
Quellcode compilierter Sprachen ist nur bedingt auf unterschiedlichen Plattformen übersetzbar
Folie 10 : Mittelweg
Java geht Mittelweg zwischen interpretierter und compilierter Sprache
Der Java Compiler übersetzt Quellcode in einen Byte-Code
Der Java Interpreter interpretiert diesen Byte-Code
Vorteile:
Schneller als reiner Interpreter
Viele Überprüfungen sind schon zur Übersetzungszeit möglich
Byte-Code ist plattformunabhängig
Performanzgewinn durch ’Just-in-time Compiler’
Geschwindigkeitsverlust gegenüber C++: Faktor 10 - 20
Folie 11 : Plattformunabhängigkeit
Plattformunabhängig sind:
Java Quellcode
Übersetzter Java Code
Plattformabhängig sind:
Java Compiler
Java Interpreter
Teilweise die Java Bibliotheken
Verfügbare Plattformen: Linux, Solaris, Win 95/98/NT/2000, MacIntosh, HP, IBM Großrechner,
Handys, ....
Folie 12 : Java Architektur
Folie 13 : Programmerstellung mit Java
Quellcode einer Java-Klasse muss vollständig in einer Datei sein
Dateien haben Endung .java
Dateiname muss identisch mit dem Namen der Klasse sein
D.h. der Code der Klasse Element wird in der Datei Element.java gespeichert
Übersetzte Klassen werden in Dateien mit der Endung .class gespeichert
D.h. der übersetzte Code der Klasse Element wird in der Datei Element.class gespeichert
Folie 14 : Programmerstellung mit Java
Compileraufruf:
javac [Optionen] Klasse1.java ...
Interpreteraufruf:
java [Optionen] Klasse1 [Parameter]
d.h. die Endung .class wird weggelassen
Interpreteraufruf bewirkt den Aufruf der statischen Methode public static void
main(String[] args)
Java-Programme mit einer main-Methode nennt man Applikationen
Es gibt auch ausführbare Java-Programme ohne main-Methode, diese erfordern jedoch spezielle
Laufzeitumgebungen (Applets, Servlets)
Folie 15 : Beispiel
package blatt1;
public class HelloWorld {
public static void main(String[] a) {
System.out.println("Hallo Welt");
}
}
Übersetzung: javac blatt1\HelloWorld.java
Aufruf: java blatt1.HelloWorld
Folie 16 : Organisation von Klassen
Die Namen von Java-Klassen müssen eindeutig sein
Um Namenskonflikte zu vermeiden, fasst man Klassen in Paketen (packages) zusammen
Klassen, welche zu einem Paket gehören, müssen
in einem Verzeichnis abgespeichert sein
der Verzeichnisname muss gleich dem Paketnamen sein
müssen in der ersten Zeile die Paketangabe haben:
package name;
Paketnamen können Punkte enthalten (z.B. fhw.util )
Die zugehörenden Klassen liegen im Unterverzeichnis util von fhw
Folie 17 : Organisation von Klassen
Der vollständige Name der Klasse Stack im Paket fhw.util lautet fhw.util.Stack
Übersetzung von Klassen in Paketen:
javac fhw/util/Stack.java
(aus dem Verzeichnis oberhalb von fhw)
Ausführung von Klassen in Paketen:
java fhw.util.Stack
(aus dem Verzeichnis oberhalb von fhw)
Java unterscheidet zwischen Groß- und Kleinbuchstaben!!
java fhw.util.stack und java fhw.Util.Stack
sind falsch!
Folie 18 : Organisation von Klassen
Klassen aus dem eigenen Paket können mit ihrem Kurznamen angesprochen werden
Klassen aus fremden Paketen
müssen mit ihrem vollen Namen angesprochen werden oder
der Paketname muss mit der import-Anweisung bekannt gemacht werden
Die import-Anweisung steht am Anfang einer Datei (direkt hinter der Paketangabe):
import fhw.util.Stack; oder
import fhw.util.*;
Folie 19 : Trennung zwischen Quellcode und übersetztem Code
Programmierer sollten immer Quellcode und übersetzten Code in getrennten Verzeichnissen
ablegen
Vorgehensweise:
Es wird ein Verzeichnis classes angelegt
Compileraufruf:
javac -d classes fhw\util\*.java
Der Compiler legt automatisch die Unterverzeichnisse util und fhw an und legt die
übersetzten Klassen dort ab
Folie 20 : Programmaufruf
Wie findet der Java Interpreter den Byte-Code der Klassen?
Defaultmäßig sucht der Interpreter nur im aktuellen Verzeichnis
D.h. Aufruf aus dem Verzeichnis classes
Wie kann man Java-Programme aus beliebigen Verzeichnissen starten?
Wie findet eine Betriebssystem-Shell den Code aufgerufener Programme?
Über die Umgebungsvariable PATH
Die Umgebungsvariable CLASSPATH enthält eine Folge von Pfaden, in diesen Verzeichnissen sucht
der Interpreter nach Klassen.
Folie 21 : Programmaufruf
Beispiel: CLASSPATH=/usr/sm/java/classes/
Nach dem Aufruf java fhw.util.Stack wird die Klasse
/usr/sm/java/classes/fhw/util/Stack.class gefunden
Beispiel: CLASSPATH=/usr/sm/java/classes/fhw/util
Nach dem Aufruf java fhw.util.Stack findet der Interpreter nicht die gesuchte Klasse und
erzeugt eine Ausnahme:
Exception in thread "main" java.lang.NoClassDefFoundError: fhw/util/Stack
Folie 22 : Namenskonventionen
Paketnamen beginnen mit Kleinbuchstaben (z.B. java.sound)
Klassennamen beginnen mit Großbuchstaben (z.B. Window)
Namen von Methoden und Variablen beginnen mit Kleinbuchstaben, Namensteile können durch
Großbuchstaben eingeleitet werden (z.B. setName, anzahlKomponenten)
Konstanten: nur Großbuchstaben (z.B. MAXIMUM)
Beachten Sie die ausführlichen Java-Namenskonventionen von SUN
Folie 23 : Installation
Dokumentation und Entwicklungswerkzeuge sind getrennt zu installieren (über Web-Seite der
Vorlesung erhältlich)
Umgebungsvariable JAVA_HOME auf Installationsverzeichnis setzen (z.B. f:\jdk1.3)
JAVA_HOME/bin in den Pfad aufnehmen
Testen: java -version
Optional: Java Compiler Jikes von IBM installieren (sehr schnell)
Folie 24 : Grundprinzipien
Programme sollten redundanzfrei sein (d.h. Code sollte sich nicht wiederholen)
Cut und Paste führt zu Code-Redundanz
Literale (d.h. konkrete Zahlen oder Zeichenketten) stehen nicht mitten im Code (Konstanten
verwenden)
Quellcode folgt einer klaren Konvention (Namensgebung, Einrückung, Kommentierung etc.)