PI Burgenland Java und JavaScript 1. Teil Güssing, Oktober 1999 Martin Weissenböck Java Eigenschaften Wurzeln Sprachelemente Entwicklungswerkzeuge Didaktische Qualität Zusammenfassung Java: objektorientiert Datenkapselung: Datenelemente und Unterprogramme (Methoden) in einer Klasse vereinigt Vererbung: Übernahme von Daten und Methoden, Ergänzung bzw. Überschreiben von Methoden Polymorphie: alle Klassen sind „virtuell“ Java: verteilt Java-Bibliotheken sind über das Internet erreichbar Java-Bibliotheken können auch in einem lokalen Netz zur Verfügung gestellt werden Verwendetes Protokoll: TCP/IP Java: robust Keine Pointer-Arithmetik (wie in C), daher kein illegaler Speicherzugriff möglich Prüfung von Array-Indizes; damit wird die Überschreitung von Grenzen verhindert Ausnahmebehandlungen („exception“) müssen vorgesehen werden Java: sicher Java-Programme werden über das Netz verteilt Byte-Code schützt vor Verfälschungen und Virenbefall Kontrolle durch Prüfsummen Zugriffe auf das Dateisystem nur in der vorgesehenen Weise erlaubt Java: architekturunabhängig Byte-Code erlaubt den Einsatz auf allen Systemen, sofern das Laufzeitsystem vorhanden ist: Einsatz einer „virtuellen Maschine“ Beispiele: UNIX, Windows 9*, Windows NT, OS/2, Apple, Sun... Wirtschaftliche Bedeutung, Rechtsstreitigkeiten! Java: portierbar Alle Datentypen sind intern immer gleich dargestellt Beispiele: int ist immer eine 32-Bit-Zahl, mit Vorzeichen float ist immer eine 32-Bit-Zahl gemäß IEEE-754Spezifikation Java: interpretiert Byte-Code wird interpretiert Kein Linken von Programmteilen Keine Make-Prozeduren Klassen können unabhängig von einander geändert werden Neuübersetzung des gesamten Programms bei Änderungen nicht notwendig Java: hohe Rechenleistung Byte-Code ist dem Maschinencode schon sehr ähnlich Einfaches Realisieren von Multithreading-Tasks Dadurch Geschwindigkeitssteigerung Weitere Beschleunigung durch Just-in-timeCompiler (Übersetzung des Byte-Code auf der Zielmaschine in deren Maschinencode) Java: multithreadfähig Quasi-paralleles Abarbeiten unterschiedlicher Aufgaben bringt Geschwindigkeitsvorteile Einfache Realisierung von Threads durch die Ableitung einer neuen Klasse Java: dynamisch Werden in einer Superklasse neue Methoden oder Instanzvariablen eingeführt, müssen die Subklassen nicht geändert werden Speicherplatz wird mit new angefordert Speicherplatz wird automatisch freigegeben. Java: kompakt Keine Include-Dateien (Header-Files) Alle Informationen in einer Datei Übersichtliche Größe durch das Teilen in einzelne Dateien (Teilen in Klassen) Java: Eigenschaften (1) Applets: in HTML-Dateien eingebettet Interpreter: Interaktion Animation Netscape, Internet Explorer o.ä. Appletviewer Plattformunabhängig Win95/98, Win NT/2000, Mac OS 7.5, Solaris, Win 3.1x Java: Eigenschaften (2) Applications: Selbständige JAVA-Programme Laufzeitinterpreter (*.CLASS) Compiler (*.EXE) Kostenlose Nutzung: Compiler, Interpreter, Library, Dokumentation Internetadresse http://java.sun.com Java: Wurzeln C/C++: Syntax, Kontrollstrukturen, Variablen, Gültigkeitsbereiche Objective-C: Interface-Konzept C++: Klassenkonzept Small-Talk: Erweiterbarkeit zur Laufzeit, dynamische Speicherverwaltung, Multithreading Java: Sprachelemente Grundlegender Aufbau Verzweigungen, Schleifen Einfache Datentypen Strukturierte Datentypen Unterprogramme Klassen Exceptions Java: Grundlegender Aufbau (1) Variablennamen (Unicode), Kommentare, Groß-/Kleinschreibung wie in C/C++ Klassen “überall” System-Klasse immer verwendbar public class Hallo { public static void main(String[] args) { System.out.println(“Hallo”); } } Java: Grundlegender Aufbau (2) Ein- und Ausgabe, Variablenvereinbarung: import myio; public class b03 { public static void main(String[] arg) { int zahl1, zahl2, ergebnis; zahl1=myio.readInt(); zahl2=myio.readInt(); ergebnis=zahl1+zahl2; System.out.println(ergebnis); }} Java: Grundlegender Aufbau (3) Eine Applet-Referenz: import java.applet.Applet; //Anweisung import java.awt.Graphics; // Directory-Struktur public class HalloAp extends Applet //Klasse { public void paint (Graphics g) //Minimum! { g.drawString(“Hallo”,50,25); } } Java: Grundlegender Aufbau (4) Das zugehörige HTML-File: <title>Hallo Testprogramm</title> <hr> <applet code=“HalloAp.class” width=250 height=80> </applet> <hr> Java: Grundlegender Aufbau (5) Keine externen Variablen/Funktionen Konstanten C/C++ -Schreibweise: const int a=5; Java-Schreibweise: private final static int a=5; Kommentare /* und */, ferner // /** zur Dokumentation Java: Applets Kein main-Programm eingebettet in einer public class, die von Applet abgeleitet ist eine public-Methode paint Applet-Referenz in einer HTML-Datei Parameterübergabe von der HTML-Datei an das Java-Programm möglich Java: Verzweigungen, Schleifen if-, switch-Anweisung wie in C/C++ kein goto while-, do/while- und for-Schleifen wie in C/C++ lokale Vereinbarung der Laufvariablen Marken vor geschachtelten Schleifen: break und continue “von innen” möglich Java: Einfache Datentypen Gleitkomma: float, double Ganzzahlig: byte, short, int, long Logisch: boolean Zeichen: char ...alle auch mit Initialisierung Operatoren wie in C/C++, ferner: Shift+zero extension: x>>>y, x>>>=y String concatenation: + Java: Ganzzahlige Größen Name Bitzahl Wertebereich long 64 -9.223.372.036.854.775.808L... +9.223.372.036.854.775.807L int 32 -2.147.483.648...+2.147.483.647 short 16 -32.768...+32.767 byte -128...+127 8 Java: Gleitkommawerte, Char Name Bitzahl Wertebereich double 64 1.7e-308D...1.7e+308D float 32 3.4e-038F...3.4e+038F Char 16 ‘\u0000‘...‘\uffff‘ Java: Operatoren Höchste Priorität: ( ++ * + >> > == ) -/ >>> >= != [ ~ % << < ] ! <= . instanceof Java: Operatoren & ^ | && || ?: = , op= Java: Strukturierte Daten (1) Felder: int[ ] feld; // oder int feld[ ]; // nur Zeiger, keine Speicherreservierung feld = new int [5]; Alternative: int[ ] feld = new int [5]; kein “free” int[ ] feld = {1, 2, 3+4, 5, 6}; Java: Strukturierte Daten (2) Klassen: Konstruktoren, Methoden und Daten wie in C++ Modifikatoren für den Zugriff: private nur von der eigenen Klasse friendly vom selben Modul aus private protected nur von abgeleiteten Klassen protected auch von abgeleiteten Klassen public von allen Klassen möglich Java: Modifikatoren private friendly private protected protected public Selbe Klasse Selbes Package Subklasse Selbes Package, andere Klasse Anderes Package Subklasse Anderes Package andere Klasse Java: Variablen/Modifikatoren Kennzeichen für Klassenvariable final Wert kann nicht geändert werden (Konstanten!) transient Daten nicht persistent volatile Asynchrone Änderung möglich; keine Optimierung, die Variable bleibt im Speicher static Java: Unterprogramme, Klassen Keine Pointerparameter Keine Referenzen für einfachen Datentypen Ergebnistyp: beliebig Überlagerung möglich (wie in C++) Konstruktoren ähnlich zu C++ super und this zum Zugriff auf die Basis-Klasse und die eigene Klasse keine Destruktoren, aber finalize() Java: Klassen static in einer Klasse leitet eine Initialisierung ein Vererbung: class B extends A {...} keine Mehrfachvererbung (daher auch keine virtuellen Basis-Klassen) statt dessen: interface Java: Exceptions (1) try { /* das Programm */ } catch (BesondererFehler e) { /* Fehlerbehandlung 1 */ } catch (Exception e) { /* Fehlerbehandlung 2 */ } Auslösen: throw new BesondererFehler (a, b); Java: Exceptions (2) try { /* das Programm */ } finally { /* immer ausführen */ } Exceptions, die von einem Unterprogramm ausgelöst werden können: public static void Bsp() throws BesondererFehler, FehlerX { /* Unterprogramm */ } Java: Entwicklungswerkzeuge Java Developer’s Kit (Sun, Vers. 1.2) Java Café Lite(Symantec) C++ (Vers. 5.0 von Inprise) mit Java-Compiler J-Buider (Inprise) Visual J++ (Vers. 6.0 von Microsoft, Visual Studio) JDK (frei nutzbar) + WinEdit (Shareware) Sybase, PowerJ (V2.1 für Schulen gratis, V2.5, V3) Java: Didaktische Qualität (1) Sprache Basic (Taschenrechner) Vorteile sehr einfach beim Einstieg C weite Verbreitung Pascal didaktisch hervorragend Nachteile kein Zwang zu sauberer Programmierung; keine Unterprogramme mit Parametern komplizierte Konstrukte schon am Anfang (Zeiger für Eingabe, Parameter) geringe Verbreitung; schwache Ein/Ausgabe; OOP erst nachträglich Java: Didaktische Qualität (2) Sprache Modula Vorteil Weiterentwicklung von Pascal Nachteil Zu geringe Verbreitung; zu strenges Typenkonzept Oberon Kompaktes System; moderner Softwareentwurf möglich Zu geringe Verbreitung C++ Weite Verbreitung Syntax didaktisch ungeeignet Java: Didaktische Qualität (3) Vorteile: Ausstieg aus Schleifen Verwendung von Exceptions Schwerpunkt OOP Dynamische Variablen Viele Klassen Multithreading Interface-Konzept statt Mehrfachvererbung Nachteile: Hoher Aufwand beim Einstieg nur char-Eingabe nur call-by-value bei einfachen Datentypen Komplizierte Syntax Java und JavaScript Java Applets für Webseiten Applications (selbständ.) Compiler, Just-in-time-Compiler Byte-Code Strenge Typprüfung JavaScript Nur in Webseiten Ausnahme: Server Side JavaScript Nur Interpreter Source-Text Keine Datentypen Java: Zusammenfassung für professionelle HTML-Präsentationen bald ein “Muß“ gute C/C++-Vorkenntnisse sind nützlich in vielen Punkten einfacher als C++ didaktisch trotzdem nicht optimal gute Entwicklungswerkzeuge schon verfügbar Java: Literatur Java by example: Jerry R. Jackson, Allan L. McClellan SunSoft Press, 1996. ISBN 0-13-565763-3 Mit CD. In englischer Sprache. Guter Überblick über die Sprache mit vielen Beispielen Java: Literatur Java Handbook Patrick Naughton Osborne McGraw-Hill, 1996 ISBN 0-07-882199-1, $2795 Empfehlenswerte Einführung mit vielen Beispielen Programmbeispiele unter http://www.osborne.com zu finden Java: Literatur Visual J++, Version 1.1 Markus Linke, Markt&Technik, 1997 ISBN 3-8272-5257-1 Kompaktes Nachschlagewerk, speziell für die Microsoft-Java-Variante Java 1.2 Ralph Steyer, Markt&Technik, 1998 ISBN 3-8272-5435-3 Kompaktes Nachschlagewerk, neueste Java-Version Java: Literatur Java: Kai Baufeldt, Rolf Mäurers Data Becker, 1996 ISBN 3-8158-1553-3 (ATS 147,-) Preiswerte, systematische Einführung. Keine Vorkenntnisse erforderlich. HTML-Einführung im Anhang. Java: Literatur Java oder: wie steuere ich meine Kaffeemaschine? Bernhard Davignon, Georg Edelmann tewi-Verlag 1996 (ATS 145,-) ISBN: 3-89362-459-7 Noch eine preiswerte Einführung, allerdings geringerer Tiefgang. Keine Anhänge zum Nachschlagen Java: Literatur Learn Java Now Stephen R. Davis, Microsoft Press 1996 In englischer Sprache Empfehlenswert für den Umstieg von C++ auf Java, keine grundlegenden Erläuterungen von einfachen Sprachelementen Java: Literatur Das Einsteigerseminar Java Frank Knobloch, Michael Seeboerger-Weichselbaum (ATS 145,-) bhv 1997, ISBN 3-89360-925-3 Einführung samt Zusammenstellung der wichtigsten Klassen. Anhänge Java: Literatur Die Java-Fibel Paul Kühnel, Addison-Wesley ATS 437,ISBN 3-8273-1024-5, mit CD Vorteil: kompakte Zusammenfassung am Anfang Nachteil: komplexes Beispiel schon zu Beginn Komplette Syntax im Anhang Java: Literatur Java Distributed Computing Jim Farley, O‘Reilly, 1997 ISBN 1-56592-206-9, englisch, USD 32,95 Kein Einsteigerbuch. In dieser Reihe sind etliche Bücher zu Java-Spezialthemen erschienen. Hohe fachliche Qualität, empfehlenswert! Java: Literatur Einstieg in Java W.D.Misgeld, J. Gruber Hanser-Verlag, 1996 ISBN 3-446-18836-3, ATS 364,-, mit CD Einführung in Java, von der Installation bis zu Applets und HTML-Seiten. Keine Anhänge zum Nachschlagen. JavaScript: Literatur JavaScript - The Definition Guide David Flanagan, O‘Reilly&Associates, Inc, 1996 ISBN 1-56592-193-3, englisch Prägnante Zusammenfassung, nicht unbedingt ein Einsteigerbuch. Sehr gute Auflistung aller Bibliotheksfunktionen! Unicode: Literatur The Unicode Standard, Version 2.0 The Unicode Consortium Addison-Wesley Developers Press, 1997 ISBN 0-201-48345-9, englisch, mit CD Komplette Darstellung des Unicode