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.)