|
Skript-Sprachen
Über Bilder, Animationen, VRML hinaus kann in Webseiten auch Programmcodefür Interaktionen mit Formularen oder zur direkten Ausführung durch den Benutzer eingefügt werden. Typische Vertreter sind Programmiersprachen wieJava, JavaScript oder ActiveX. Neuestes Lieblingskind der "Zappel-Fraktion" istFLASH, denn hier wird Interaktion und Animation vereint.JavaIn Java wurden zum zum einen erfolgreiche Konzepte aus bereits
bestehenden Sprachen (z.B. C, C++, Smalltalk, Eiffel,
Ada, Objectiv-C) übernommen, zum anderen neue Konzepte verwirklicht.
Java ist eine junge Interpretersprache, die viele mächtige
Konzepte in sinnvoller Weise integriert. Sie völlig
objekt-orientiert, interpretiert, einfach, architekturneutral,
portabel und sicher. Eine gute Performance kann durch Multithreading
und optionalen Nativecode erreicht werden. Ausgiebige
Compilierzeitüberprüfungen und strikte Laufzeitckecks
garantieren ein robustes und sicheres Verhalten der Applikationen.
Sie kann somit neben der Möglichkeit des schnellen Prototyping
als eine stabile Basis für verteilte und erweiterbare Systeme
dienen.
Die wesentlichen Gesichtspunkte sind:
- Objektorientiert
- Eigenschaften
- Architekturunabhängig und portabel
- Robustheit
- Multithreading
- Garbage Collection
- Sicherheit
Java ist objektorientiert
Java ist vollkommen object-orientiert. Jede objekt-orientierte Sprache
sollte Minimum der folgenden Charakteristiken in sich haben:
- Encapsulation: Informationen (oder genauer Attribute und Methoden) werden gekapselt, d.h. konkrete Implementierung und Strukturen sind f&uumr den Anwender nicht sichtbar. Lediglich Funktionalit&t und Interface eines Objektes werden bekanntgegeben.
- Inheritance: Subklassen "erben" Inhalte von Klassen
- Dynamic binding: ermöglich ein Maximum an Flexibilität zur Laufzeit
All diese Anforderungen werden von Java in hohem Maße erfüllt. Es werden
sogar zusätzlich weitere runtime-features geboten, die die
Software-Entwicklung einfacher machen können.
Wichtige Begriffe in diesem Zusammenhang die auch in Java vorkommen sind:
Klassen: | Definiert Attribute und Methoden |
Object : | instanzierte Klasse |
Message: | Aufruf einer Methode eines anderen Objektes |
Constructor: | Methode, die die Initialisierung eines einer Klasse instanzierten Objektes vornimmt |
Destructor: | Gegenstück zum constructor. |
Access Control: | Bei der Deklarierung einer Klasse können Attribute und Methoden mit verschiedenen Zugriffsleveln (public, protected, private, friendly) versehen werden. |
Abstract Methods: | Methoden, die in einer Klasse deklariert werden, deren Implementierung aber erst in einer Subklasse erfolgt. |
Packages: | Java-konstrukt, das eine Sammlung von zusammengehörenden Klassen bildet. |
Wichtige Eigenschaften von Java
- Objektorientierung
- Multithreading
- Robustheit
- Sicherheit
- Erweiterbarkeit
- Plattformunabhängigkeit
Was Java hat
import : vergleichbar dem IMPORT von Modula-2.
interface : ein geschickter Ersatz für die Mehrfachvererbung.
- Garbage Collection
- Verbesserte Ausnahmebehandlung
- Wohldefinierte Klassenhierarchie
Eigenschaften, die nicht von C oder C++ übernommen wurden:
- In Java gibt es keine Präprozessor-direktiven (wie z.B. #define) mehr.
- Es gibt keine Headerfiles, dafür aber interfaces, die die
Definition anderer Klassen und deren Methoden beinhalten.
- Multiple Inheritance wurde durch Interfaces ersetzt, die
Methodendefinitionen von Klassen gleichgesetzt werden können.
- Kein "goto"-statement (definiert, aber nicht implementiert).
- Kein Operator-overloading.
- Keine Pointer.
- Keine Typdefinitionen.
- Keine Variante Records (union).
- Keine generische Typen (templates).
- Keine Mehrfachvererbung.
- Keine vorzeichenlose Zahlentypen.
- Keinen direkten Hardwarezugriff.
Java ist architekturunabhängig und portabel
Durch die Verwendung von byte-code im Gegensatz zum Binärcode
ist Java völlig architekturneutral. Java-Programme lassen sich
auf allen Plattformen ausführen, auf welche die Virtual Machine
portiert wurde. Portierungen werden durch die strikte Sprachspezifikation
unterstützt.
Java ist robust
Java ist eine Sprache, die gedacht ist für robuste, zuverlässige und
sichere Applikationen.
Um dies zu erreichen wird ein striktes compile-time checking
durchgeführt, das es ermöglicht Syntaxfehler früh zu entdecken.
Java ist eine sehr typorientierte Sprache. Viele C-Freiheiten,
wie etwa implizite Deklaration von Funktionen sind nicht erlaubt.
Besondere Stützen der Robustheit sind die Abschaffung von Pointern,
die Verwendung von echten Arrays, ein Speichermodell, das die unerlaubte
Überschreibung von Speicherbereichen verhindert und strengere
Casting-Regeln.
Java ist multithreaded
'Multithreaded programming' ist in den meisten bisherigen
Programmiersprachen sehr oft ein schwieriges (oft sogar unmögliches)
Unterfangen. Java stellt zur Programmierung und Verwaltung von threads
eine eigene Klasse zur Verfügung. Von dieser können threads
als ein neues Objekt instanziert werden. In ihr werden Methoden zum
Starten, Stoppen und Abfragen des Statuses des threads bereitgestellt.
Die größten Probleme tauchten bisher bei der Synchronisation
der threads und bei der Vermeidung von deadlocks auf. Java stellt eine
Menge von synchronization primitives zur Verfügung, die im
Wesentlichen auf das von C.A.R. Hoare eingeführte monitor and
condition variable-Paradigma basieren.
Java stellt eine auf Sprachebene integrierte
Multithreadingunterstützung bereit. Damit können
Methoden auf einfache Weise synchronisiert und das Problem der
concurrency gelöst werden. Methoden laufen dann unter
Aufsicht eines 'Monitors', der sicherstellt, daß Variablen
in einem konsistenten Zustand bleiben.
Java hat einen Garbage Collector
Java hat einen integrierten Garbage Collector, der als ein
Hintergrundthread mit niederer Priorität implementiert ist.
Der GC dealloziert Objekte, die nicht mehr referenziert werden.
Bei der Programmierung äussert sich dies darin, dass Objekte
nicht explizit dealloziert werden müssen (z. B. im Destructor).
Letzteres ist zwar möglich, aber es entscheidet der GC.
Java ist sicher
Bereits bei der Konzeption von Java wurden grundlegende Überlegungen bezüglich
der Sicherheit angestellt. Der Java-Compiler und das Laufzeitsystem integrieren
mehere Abwehrschichten gegen potentiell gefährlichen Code. Am wichtigsten ist
sicherlich das Speicherallozierungs- und -referenzierungsmodell.
Entscheidungen über die Speicherbelegung werden nicht vom Compiler (wie in C oder C++),
sondern erst zur Laufzeit vorgenommen. Intern verwendet Java sogenannte
'handles' die zur Laufzeit in physikalische Addressen aufgelöst werden. Dies
geschieht sehr spät und z. T. auch abhängig von der Architektur, jedoch völlig
transparent für den Programmierer.
Was passiert, wenn gefährlicher Code auf einen Server generiert und zur Laufzeit auf
dem client ausgeführt wird? Obwohl der Java-Compiler beim übersetzen das Einhalten
von bestimmten Sicherheitsregeln garantiert, bleibt er natürlich machtlos, wenn
Code-Fragmente zur Laufzeit on-the-fly gelinkt werden. Wie kann also das
Laufzeitsystem dem hereinkommenden byte-code stream vertrauen, der vielleicht von
einem nicht vertrauenswürdigen Compiler erzeugt wurde? Die Antwort ist einfach:
Java traut dem Code nicht und unterwirft ihn deshalb dem byte-code-Verifizierungsprozeß.
Dieser beinhaltet eine Reihe von sinnvollen, restriktiven Maßnahmen. Darunter sind
einfache Typüberprüfungen, Ausklammerung von Pointern, Ausschluß von Stack-Über-
und -Unterläfen, strikte Parameterüberprüfung, strikte Typkonvertierungen,
Überprüfung der Speicherzugriffsrestriktionen. Weiter wird getestet, daß
Objekte wirklich nur als solche verwendet werden.
Daten- und Kontrollfluß vom Java-Quellcode bis zur Ausführung.
Trotz der ausgedehnten Verifizierungsprozeß bleibt Java (laut Sun) immer noch schnell
genug, da der Java-Interpreter von jeder weiterer Überprüfung hinsichtlich
der Sicherheit befreit ist und damit mit vollen Geschwindigkeit arbeiten kann.
Weitere Sicherheitsaspekte sind im Java Networking Package implementiert, welches es
erlaubt verschiedene Sicherheitsebenen zu konfigurieren. Diese sind:
- alle Netzwerkzugriffe sind verboten
- Alle Netzwerkzugriffe sind erlaubt
- Netzwerkzugriffe sind nur jenen hosts erlaubt, von denen der Code importiert wurde
- Netzwerkzugriffe sind auf Zugriffe außerhalb des Firewalls beschränkt,
wenn der Code von dort kommt.
Wer sich für Java interessiert, findet Java-Seiten mit vielen Demos, den HotJava-Browser
(für SUNs) und Java-Entwicklersoftware auf dem Server von SUN Microsystems unter
http://java.sun.com.
|
|
|