Java

Werbung
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
Herunterladen