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-754-Spezifikation
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-time-Compiler (Ü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 Interaktion Animation Interpreter: 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>
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
Java: Gleitkommawerte, Char
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
Java: Variablen/Modifikatoren static 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
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 Vererbung: class B extends A {...} 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) Auslösen: throw new BesondererFehler (a, b); 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)
Java: Didaktische Qualität (2)
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