Teil D:

Berufliche Rückwirkung der Kommerzialisierung auf Informatiker

zurück zu Teil C

7. Gestaltung von HTML-Seiten

HTML-Programmierung war in den Anfängen durch den eingeschränkten Funktionsumfang noch einfach und auch für Nicht-Informatiker unproblematisch.

Mit HTML 2 bzw. HTML 3 bieten sich jedoch schon viel mehr Möglichkeiten zur Gestaltung von Webseiten:

Aufbau einer HTML-Seite

Scriptsprachen

Moderne Browser bieten interpretierte Scriptsprachen an, es gibt hier allerdings keinen Standard!

JavaScript (Netscape Navigator)

für Navigation, Benutzerschnittstelle, Interaktion http://www.archimedia.khs-linz.ac.at/lora

Portabilitätsproblem

Erst HTML 2 ist genormt, viele Seiten sind jedoch zugeschnitten auf spezifische Erweiterungen von WWW Browsern (Netscape, Microsoft, Mosaic).

Der Wettbewerbskampf wird auf den Benutzern ausgetragen, die durch den nicht vorhandenen Standard nicht alle Seiten mit ein und demselben Browser optimal angezeigt bekommem.

Logos


8. CGI Programmierung

CGI = Common Gateway Interface

Eingaben von Formularen in HTML-Seiten werden über das CGI an den Server übertragen.

Am Server wird dann ein Programm gestartet, das die übergebenen Daten auswertet und entsprechend reagiert.

Methoden zur Übermittlung der Eingabedaten

Serverseitige Programme

Datenbankanbindung

hier gibt es die verschiedensten Möglichkeiten, unter UNIX oft verwendet: mSQL.

Beispiel für ein serverseitiges C-Programm


9. Java

9.1 Allgemeines

Java

ist eine objektorientierte Programmiersprache für verteilte Programmierung.

Java ist zwar ähnlich zu C++, wurde aber typsicher gestaltet.

HotJava

ist ein WWW-Browser, der in der Programmiersprache Java geschriebene "Applets" ausführen kann. Java-Programme werden etwa in der Art von Inline-Grafiken in HTML-Seiten eingebunden.

Implementierungen

HotJava und Java wurden von Sun entworfen und programmiert. Momentan gibt es von Sun vorgenommene Implementierungen für Sun Workstations, Windows 95+NT und den Mac. Portierungen auf weitere Plattformen werden von unabhängigen Programmierergruppen vorgenommen (AIX, Linux, OS/2, SGI IRIX, ...).

Die aktuellen Versionen der wichtigsten Web-Browser enthälten bereits den Code zur Ausführung von Java-Applets.

Beispiel

9.2 Die Programmiersprache Java

Eigenschaften

Java ist eine C- (C++)-ähnliche objektorientierte Programmiersprache, hat aber viele Sprachelemente von C++ nicht implementiert, die nur selten verwendet (und verstanden) werden. Darunter fallen operator overloading und mehrfache Vererbung.

Für objektorientiertes Programmieren wurde dafür zusätzlich das "Interface"-Konzept von Objective C übernommen.

Zur Vereinfachung ist ein garbage collector eingebaut, der Speicherfehler weitgehend ausschließt.

Klassenbibliothek

Die momentane Klassenbibliothek von Java ist noch keineswegs komplett, sondern deckt vorerst nur die wichtigsten Einsatzgebiete ab: zweidimensionale Grafik, Netzwerkprogrammierung (Client-/Server-Programme) und Benutzerinteraktion.

Werkzeuge (Compiler, Tools zum Einbinden von C-Code, ...) und Klassenbibliothek sind im sogenannten JDK (Java Development Kit) enthalten.

Zielsysteme

Da Java-Programme über Netzwerke verteilt werden können, wurde auf eine möglichst architektur-neutrale Implementierung geachtet.

Der Compiler erzeugt deshalb einen CPU-neutralen Code, der über ein Runtime-System auf den unterschiedlichsten Systemen abspielbar ist. Java Programme sollten deshalb in einer einzigen Version auf allen Plattformen laufen.

Dafür wurde die Sprache genau definiert, es gibt keine implementierungsabhängigen Details. Beispielsweise sind die Größen der Datentypen "int" und "float" in C und C++ implementierungsabhängig, in Java jedoch mit 32 bit bzw. 32-bit IEEE 754 festgelegt.

Die Klassenbibliothek ist ebenfalls ein Teil des Java Standards.

Performance

Der Java Compiler erzeugt einen architekturunabhängigen zu interpretierenden Bytestrom. Der Code ist mit zusätzlicher Information zur Laufzeit-Typüberprüfung angereichert.

Der Bytecode basiert auf der Maschinensprache einer virtuellen Maschine und liefert selbst im interpretierten Ablauf schon eine gute Performance, da der Compiler selbst schon einige Optimierungen vornimmt und das Laufzeitsystem einen Registeroptimierung versucht.

Interpretierter Code erreicht etwa 300.000 Methodenaufrufe pro Sekunde (SPARCStation 10), im Vergleich zu etwa 600.000 auf einem i486 DX33 mit optimiertem C++ Code.

In späteren Versionen von Java wird ein Codegeneratoren auf der Zielmaschine den empfangenen Bytecode in native-Code umsetzen. Solchermaßen erzeugter Code ist von der Performance mit native C oder C++ Code gleichzusetzen.

Threads

Threads (lightweight processes) teilen sich den globalen Datenbereich einer Applikation und sind in der Klassenbibliothek von Java festgelegt. Die Programmiersprache selbst wurde um Konstrukte zur Synchronisation von Threads erweitert.

Dynamisches Laden

Module werden nicht zu einem großen Programm gelinkt, sondern zur Laufzeit dynamisch geladen. Dadurch werden wirklich nur die benötigten Module übertragen. Außerdem können Bibliotheken so jederzeit erweitert werden, ohne bestehende Programme zu beeinflußen.

Sicherheit und Robustheit

Der Java Compiler versieht Objekte zur Laufzeit mit Typinformation. Dadurch kann der Interpreter beispielsweise die Gültigkeit von type-casts überprüfen.

Statt Pointer-Arithmetik werden in Java Arrays mit überprüfbaren Grenzen verwendet. Dadurch können alle Speicherzugriffe zur Laufzeit auf ihre Gültigkeit hin untersucht werden.

9.3 Sicherheit unter Java

Wenn bei einem Laden einer Web-Seite automatisch ein Programm geladen und gestartet wird, dann ist gesunde Vorsicht durchaus angebracht (Systembeeinflussung, Virengefahr). Wie geht Java mit diesem Problem um?

Sprache und Compiler

Überprüfung der Bytecodes

Um manipulierten Bytecode oder Code aus einem fehlerhaften Compiler auszuschließen, führt das Laufzeitsystem (der Verifier, ein Teil des Loaders) einige Tests aus, um sicherzustellen, daß:

Class Loader

Der Class Loader richtet für jede Netzwerkquelle einen eigenen Namensbereich ein. Wenn eine Klasse auf eine andere Klasse Bezug nimmt, dann wird diese Klasse zuerst in den eingebauten Klassen gesucht ("built-in" Klassen) und danach im Namensbereich der referenzierenden Klasse. So können "built-in" Klassen nicht von bösartigen Programmen überschrieben bzw. ausgetauscht werden.

File System und Netzwerkzugang

Hotjava verwaltet eine Liste von Dateien, die von importierten Klassen gelesen und geschrieben werden dürfen. Wenn eines dieser Rechte verletzt würde, dann wird der Benutzer um sein Einverständnis zu der Operation gefragt.

Änliche Mechanismen sind auch für das Ausführen von geladenem Code implementiert. Das Ausführen von Code kann entweder ganz untersagt oder auf Programme eingeschränkt werden, die von innerhalb einer Firewall geladen werden. In Zukunft ist der zusätzliche Einsatz eines public key Kryptographieverfahrens zur Identifikation des Senders als auch zur Integritätskontrolle des Codes geplant.


zurück zu Teil C