Home About us Products Services Contact us Bookmark
:: wikimiki.org ::
Java-Applet

Java-Applet

Ein Java-Applet ist ein kleines Computerprogramm, das in der Programmiersprache Java verfasst wurde. Der Begriff Applet bedeutet soviel wie "Anwendungs-Schnipsel" und setzt sich aus Application und snippet zusammen (siehe auch Java-Applikation, Applikation). Java-Applets wurden eingeführt, damit man Programme für Web-Seiten schreiben kann, die im Webbrowser (auf der Client-Seite) arbeiten und direkt mit dem Benutzer interagieren können, ohne Daten über die Leitung zum Server versenden zu müssen. Davor mussten Interaktionen entweder über CGIs auf der Serverseite bearbeitet werden, oder über Java Script, das jedoch keine vollwertige Programmiersprache darstellt und für umfangreiche Anwendungen nicht geeignet ist.
Java-Applets waren Ende der 1990er Jahre ein Hauptgrund für den Erfolg und die schnelle Verbreitung von Java.
Neben Applets existieren auch Servlets, das sind ebenfalls Java-Programme, die allerdings auf dem Server ausgeführt werden.

Java-Applets im Internetbrowser

Üblicherweise werden Java-Applets von HTML-Seiten aufgerufen. Um sie ausführen zu können, muss der jeweilige Webbrowser über eine entsprechende Java-VM verfügen. Diese VM, die Laufzeitumgebung für das Java-Applet, kann entweder Teil des entsprechenden Browsers sein, oder in Form eines Plugins nachträglich installiert werden (z.B. JRE 1.4 von Sun, siehe Weblinks). Eine weitere Möglichkeit besteht darin, dass der Browser - wie im Fall von Opera - direkt mit der VM in Verbindung tritt, also ohne Umweg über ein Plugin.

Beispiele für Internetbrowser mit integrierter Java-VM

(Der Funktionsumfang dieser VMs entspricht nur der JDK-Version 1.1, sie sind aus heutiger Sicht im Grunde veraltet eine aktuelle VM lässt sich aber nachinstallieren, siehe Weblinks)
- Internet Explorer von Microsoft (Aktuell plant Microsoft die Java-Unterstützung komplett aus dem IE zu entfernen. Um die Frage der Integration von Java in den Internet Explorer bzw. in Microsoft Windows prozessiert Sun in den USA gegen Microsoft)
- Netscape Navigator 3.x und 4.x

Beispiele für Internetbrowser ohne integrierte Java-VM

(Um mit diesen Browsern Applets nutzen zu können muss eine VM nachinstalliert werden, siehe [http://java.sun.com/products/plugin/ Sun Java VM für Browser])
- Mozilla und alle darauf basierenden Browser, wie Netscape Navigator 6.x und 7.x oder Mozilla Firefox
- Opera
- Auch der Internet Explorer kann dazu befähigt werden, auf die externe VM zuzugreifen. Ein Vorteil besteht z.B. darin, dass dadurch eine modernere VM zur Verfügung steht, denn die im Browser integrierte ist schon ein wenig betagt.

Appletprogrammierung

Die Einbindung des Applets in den HTML-Code von Webseiten erfolgt mit dem OBJECT-Tag, dem APPLET-Tag oder dem EMBED-Tag. Alle Java-Applets werden von der Java-Klasse java.applet.Applet abgeleitet. Sie verfügen unter anderen über die folgenden Methoden, jedoch nicht über eine Methode main(), wie sie für Java-Anwendungen benötigt wird.
- init() - wird genau einmal aufgerufen, wenn das Applet erstmals in den Browser geladen wird.
- start() - wird jedesmal aufgerufen, wenn das Applet sichtbar wird.
- stop() - wird jedesmal aufgerufen, wenn das Applet verdeckt wird, z.B. weil das Browser-Fenster von einem anderen Fenster überdeckt wird.
- destroy() - wird aufgerufen, wenn das Applet aus dem Hauptspeicher entladen wird.

Sicherheit

Applets werden auf dem Rechner des Anwenders ausgeführt und stellen daher - wie jedes lokal ausführbare Programm - ein Sicherheitsrisiko dar. Da die Applets in einer abgeschotteten Laufzeitumgebung (Sandbox) laufen, ist dieses Risiko jedoch gut kontrollierbar. Ein Sicherheitsrisiko durch "böswillige" Applets besteht nur, wenn die Sandbox fehlerhaft ist.

Weblinks


- http://java.sun.com Java Sites bei sun
- http://java.sun.com/docs/books/tutorial/applet/ Anleitung zum Schreiben von Applets
- http://java.sun.com/getjava aktuelle Java Laufzeitumgebung (JRE) mit Browserplugin installieren
- [http://www.wikiservice.at/dse/wiki.cgi?JavaApplets Java-Applet im DSEWiki]. Eine Wiki-Seite mit weiterführende Informationen und Links zum Thema Java-Applets.
- [http://www.ichdertom.de/java/index.html Beispielapplet inkl. kommentiertem Quellcode und grundlegende Infos] Kategorie:Programmiersprache Java ja:Javaアプレット

Computerprogramm

Ein Computerprogramm ist ein festgelegter Ablauf am Computer, mit dessen Hilfe ein bestimmtes Ziel erreicht werden kann. Der Ablauf besteht aus einer Folge von einzelnen Befehlen, die von einem Prozessor verarbeitet werden. Die Erstellung eines solchen Programms bezeichnet man allgemein als Programmierung oder bezogen auf einen konkreten Lösungsweg (Algorithmus) als Implementierung. Im Sprachgebrauch wird Computerprogramm meist zu Programm verkürzt oder der engl. Begriff Software (für Ein- und Mehrzahl) synonym verwendet. Sowohl der in einer Programmiersprache verfasste Quelltext als auch der von einem Computer ausführbare Maschinencode werden als Programm bezeichnet. Um aus dem Quelltext den Maschinencode zu generieren, wird ein Assembler, Compiler oder Interpreter benötigt. Diese übersetzen die Befehle der Programmiersprache, die für menschliche Benutzer verständlich und bearbeitbar sein sollen, in die semantisch entsprechenden Befehle der Maschinensprache des verwendeten Computers.

Geschichte

Das erste Computerprogramm von Ada Lovelace

Als weltweit erstes Computerprogramm gilt eine Vorschrift für die Berechnung von Bernoulli-Zahlen, die Ada Lovelace in den Jahren 1842/1843 für die mechanische Analytical Engine von Charles Babbage erstellte. Dieses Programm konnte zu ihrer Zeit nur von Hand ausgeführt werden, denn wegen Fertigungsproblemen gab es im 19. Jahrhundert keine funktionsfähige Maschine.

Erste Programme auf Lochstreifen

In den Jahren 1936 bis 1941 entwarf Konrad Zuse die Rechner Z1 und Z3, die lange Befehlsfolgen auf einem Lochstreifen verarbeiteten, die ersten Computerprogramme, die auf realen Maschinen ausgeführt werden konnten. Die Rechner beherrschten die vier Grundrechenarten und Quadratwurzelberechnungen auf binären Gleitkommazahlen, der Lochstreifen enthielt jeweils eine Rechenoperation und eine Speicheradresse. Auf Zuse geht auch die erste höhere Programmiersprache, Plankalkül, zurück. Damit lassen sich Probleme maschinenunabhängig formulieren und später in eine maschinenlesbare Form überführen.

Programme im Arbeitsspeicher

Der EDVAC-Rechner, der auf einem Entwurf von John von Neumann aus dem Jahre 1945 basiert, hatte einen Quecksilber-Verzögerungsspeicher für 1024 Fest- oder Gleitkommazahlen mit jeweils 44 Bits. Jede Speicherzelle konnte statt einer Zahl auch einen Befehl aufnehmen. Bei diesem Rechnerkonzept war es möglich, die Befehle eines Computerprogramms vor der Ausführung erstmals in den Arbeitsspeicher zu übertragen. Dies ist noch heute üblich. EDVAC wurde jedoch erst im Jahre 1951 teilweise fertiggestellt. Der Demonstrationsrechner Manchester SSE und der auf dem EDVAC aufbauende EDSAC-Rechner hatten schon vorher Programme aus dem Arbeitsspeicher ausgegeführt.

Höhere Programmiersprachen und Compiler

Ende der 1950er Jahre wurden Computer so leistungsfähig, dass spezielle Programme, Compiler, Quelltexte (englisch: Sourcecode) in höheren Programmiersprachen automatisch in Maschinenbefehle, also ausführbare Programme, übersetzen konnten. Ausführbare Programme können dann, wie beim EDVAC, in den Speicher geladen und abgearbeitet werden. Mit Fortran, COBOL, ALGOL und LISP entstanden in den späten 1950er Jahren die ersten standardisierten höheren Programmiersprachen. Programme in diesen Sprachen laufen durch einen entsprechenden Compiler übersetzt auf unterschiedlichen Rechnern. Sie können teilweise auch noch auf modernen Computern eingesetzt werden.

Vom Algorithmus zum Programm

Berechnung des größten gemeinsamen Teilers

Es soll ein Programm zur Bestimmung des größten gemeinsamen Teilers (ggT) zweier Zahlen erstellt werden. Zunächst muss ein geeigneter Algorithmus gefunden werden. Der euklidische Algorithmus, der bereits um 300 v. Chr. beschrieben wurde, ermittelt den größten gemeinsamen Teilers (ggT) zweier natürlicher Zahlen A und B: # Sei A die größere der beiden Zahlen A und B (gegenenfalls vertauschen). # Setze A = AB. # Wenn A und B ungleich sind, dann mit Schritt 1 fortfahren, wenn sie gleich sind, dann den Algorithmus beenden: Diese Zahl ist der größte gemeinsame Teiler.

Verwendung einer Programmiersprache

Sobald eine formale Beschreibung eines Algorithmus, also eine genau definierte Verarbeitungsvorschrift, vorliegt, kann der Algorithmus umgesetzt (implementiert) werden. Dazu wird eine geeignete Programmiersprache ausgewählt. Zur Umsetzung wird heute meist eine höhere Programmiersprache verwendet, die von einem Computer eventuell nicht direkt ausgeführt werden kann, sondern zuerst compiliert oder interpretiert werden muss. In Sprachen wie Pascal dienen Variablen, Ausdrücke, Vergleiche, Zuweisungen und Kontrollstrukturen zur Umsetzung des ggT-Algorithmus: (
- Schritt3:
- ) WHILE A <> B DO BEGIN (
- Solange A ungleich B
- ) (
- Schritt1:
- ) IF B > A THEN BEGIN (
- Falls B größer als A
- ) H = A; A = B; B = H; (
- A und B vertauschen
- ) END; (
- Schritt2:
- ) A = A-B; (
- A durch A-B ersetzen
- ) END;

Berücksichtigung aller Sonderfälle

Bei der Umsetzung wird mit der Prüfung von Schritt 3 begonnen. Der ursprüngliche Algorithmus berücksichtigt nicht den Fall, dass A und B bereits zu Beginn gleich sein können. Wäre die Aufgabe, den größten Teiler von 103 und 103 zu finden, würde ein Mensch sofort das Ergebnis 103 nennen, er würde den Algorithmus gar nicht bemühen. Der originale Algorithmus würde aber null ergeben. Die Umsetzung auf einem Rechner muss auch alle Sonderfälle berücksichtigen. Durch das Vorziehen von Schritt 3 wird der Sonderfall hier korrekt behandelt.

Elementare Schritte

Pascal und andere Programmiersprachen besitzen keine Operation zum Vertauschen von Zahlen. Dies muss daher in elementarere Schritte umgesetzt werden. Eine zusätzliche Variable H, eine so genannte Hilfsvariable, erlaubt die Vertauschung mit Hilfe von drei Zuweisungen: H := A; (
- Wert von A in der Hilfsvariablen H retten
- ) A := B; (
- A mit dem Wert von B überschreiben
- ) B := H; (
- B mit dem Wert von H (=A) überschreiben
- ) Dies ist auch ein kleiner Algorithmus.

Ein vollständiges Programm

Damit hieraus ein korrektes Programm wird, muss der Algorithmus noch um Ein- bzw. Ausgabeanweisungen, oft jedoch auch um Variablen und eine Programmstruktur ergänzt werden. Diese sind nicht Teil des eigentlichen Algorithmus: PROGRAM Ggt(Input,Output); (
- Programmkopf
- ) VAR A,B,H: Integer; (
- Variablendefinition
- ) BEGIN ReadLn(A,B); (
- Eingabe von A und B
- ) WHILE A <> B DO BEGIN (
- Euklidischer
- ) IF B > A THEN BEGIN (
- Algorithmus
- ) H := A; A := B; B := H; END; A := A-B; END; WriteLn(A); (
- Ausgabe von A
- ) END. (
- Programmende
- )

Übersetzung und Ausführung

Erst dieses Programm kann mit einem Texteditor in eine Datei geschrieben werden, die dann übersetzt und ausgeführt werden kann. Hierzu ist ein Compiler erforderlich, der den Code in der Programmiersprache in Maschinensprache übersetzt und das Ergebnis in eine ausführbare Datei schreibt. Diese kann dann über ein Betriebssystem gestartet werden. Das Programm muss dabei nur einmal übersetzt werden. Es kann danach beliebig oft gestartet werden. (Siehe auch Kompilierung). Einige Programmiersprachen benötigen keinen Compiler, aber statt dessen einen Interpreter, der Programme ohne vorherige Übersetzung ausführen kann. Der Interpreter selbst ist dann ein ausführbares Programm in Maschinensprache. Eine weitere Möglichkeit besteht in der Verwendung von Zwischencode (Bytecode), der vom Compiler an Stelle des Maschinencodes generiert wird. Ein Beispiel dafür ist Java: Der Java-Compiler erzeugt Bytecode, welcher dann auf der sogenannten Virtuellen Maschine ausgeführt wird. Die Virtuelle Maschine interpretiert oder übersetzt dann den Bytecode für das darunterliegende Betriebssystem. Mittels spezieller Programme, so genannter Decompiler, ist es möglich, aus dem Maschinencode wieder einen in Hochsprache lesbaren Quelltext zu erzeugen.

Siehe auch


- Software
- Anwendungsprogramm
- Dienstprogramm
- Betriebssystem

Literatur


- John von Neumann: [http://www.virtualtravelog.net/entries/2003-08-TheFirstDraft.pdf First Draft of a Report on the EDVAC] 1945 Kategorie:Programmierung ja:プログラム th:โปรแกรม

Programmiersprache

Eine Programmiersprache ist eine künstlich geschaffene Sprache (formale Sprache) zur Darstellung von Berechnungen. Programmiersprachen sollen Berechnungen sowohl in einer für einen Computer, als auch in einer für den Menschen lesbaren und verständlichen Form ausdrücken. Sie sind notwendig, da die natürlichen Sprachen für eine genügend detaillierte und präzise Beschreibung von Computerberechnungen zu vieldeutig sind. Die durch eine Programmiersprache ausgedrückte, von einem Menschen lesbare Beschreibung heißt Quelltext (Beispiel "Hallo Welt!"). Den Arbeitsprozess diese Computerprogramme zu erstellen, nennt man Programmieren. Er wird durch Programmierer vorgenommen. Der entstandene Programmcode muss schließlich in eine Anweisungsfolge für den Computer, die Maschinensprache übersetzt werden. Dies ist vergleichbar mit dem Übersetzen von natürlichen Sprachen, jedoch ist dieser Arbeitsschritt durch die Verwendung von Programmiersprachen mittels eines Übersetzungsprogramms automatisierbar. Das Endprodukt dieser Übersetzung nennt man Computerprogramm. Je nachdem, ob diese Übersetzung vor oder während der Ausführung des Computerprogramms erfolgt, unterscheidet man zwischen kompilierenden oder interpretierenden Übersetzungsprogrammen. Es existieren verschiedene Meinungen, welche Eigenschaften eine Programmiersprache besitzen sollte. Allgemein wird jedoch akzeptiert, dass zumindest die grundlegende mathematische Arithmetik ausgedrückt werden können sollte. Oft erscheint der von der Programmiersprache vorgegebene Programmierstil und die Zweckgebundenheit der Programmiersprache wichtig. Eine theoretische Erkenntnis ist die notwendige Eigenschaft der Turing-Vollständigkeit, falls sie die volle Funktionalität des Computers ausnutzen soll; dies kann bis hin zum sich selbst verändernden Programm dienen.

Form und Funktion

Programmiersprachen dienen der Informationsverarbeitung und richten sich deshalb in Form und Funktion als Sprache an die Struktur und Bedeutung von Information. Die genauere linguistische Betrachtung dieser Aspekte ist Aufgabe der Semiotik. Die äußere Form, in der sich eine Programmiersprache dem Programmierer repräsentiert, bezeichnet man als Syntax. Die meisten Programmiersprachen sind textbasiert. Der Quelltext besteht aus Wörtern und Trennzeichen, ganz ähnlich zu geschriebenen natürlichen Sprachen. Es sind jedoch auch andere Repräsentationen von Programmiersprachen denkbar. So werden häufig zur Gestaltung von graphischen Benutzerschnittstellen visuelle Symbole verwendet. Ähnlich zu einem Notenblatt in der Musik ergibt sich aus den einzelnen Symbolen mit ihren individuellen Bedeutungen ein Dokument, das eine Gesamtheit beschreibt. Die Bedeutung eines speziellen Symbols in einer Programmiersprache nennt man dessen Semantik. Syntax und Semantik kann man der Spezifikation, teilweise auch der Dokumentation der Programmiersprache entnehmen. Die syntaktische Definition einer Sprache wird meist in der formalen Notation Backus-Naur-Form angegeben. Eine vollständig formal semantische Spezifikation einer Programmiersprache in einem einzigen Kalkül ist gegenwärtig Forschungsgegenstand. Die Intention des Programmierers über die Gesamtheit des Computerprogramms nennt man Pragmatik. Mit dem Analogon des Notenblatts beschrieben, beabsichtigte der Kompositeur beispielsweise eine Hymne oder einen Popsong zu schaffen. Die Softwaretechnik hilft dabei dem Programmierer diesen Zweck eines Computerprogramms zu realisieren.

Imperative Programmiersprachen

Die derzeit am häufigsten verwendeten, imperativen Programmiersprachen halten eine spezielle Unterscheidung in Form und Funktion für Befehle (oft auch Anweisungen genannt) und Daten und deren Wiederverwendung bereit. Dieser Programmieransatz ist nicht unbedingt notwendig, da ein Computer diese Strukturen prinzipiell nicht unterscheiden kann, hat sich jedoch historisch durchgesetzt.

Befehle

Ein Computer ist keine starre, nur auf eine Aufgabe spezialisierte Rechenmaschine. Vielmehr wird durch Einzelaktion in Mikroebene angegeben, wie der Computer mit welchen Daten zu verfahren hat. Imperative Programmiersprachen bilden dieses Konzept auf Makroebene durch Befehle ab. Durch die Reihenfolge der Befehle ist die zeitliche Abfolge vorgegeben. Um reagierende Programme schreiben zu können, gibt es Sprungbefehle, die die Abfolge der Befehle dynamisch verändern. Befehle lassen sich semantisch nach dem EVA-Prinzip einteilen.
- Eingabe- oder Ausgabebefehle lesen Daten von der Tastatur, von einer Datei oder aus anderen Quellen ein oder sie geben sie auf den Monitor, auf einen Drucker oder in eine Datei aus.
- Berechnungen verändern Daten oder sie kombinieren Daten neu. Dies können auch mathematische Berechnungen, wie Addition oder Multiplikation sein.
- Kontrollstrukturen entscheiden aufgrund der vorliegenden Daten, welche Befehle als nächstes ausgeführt werden. Insbesondere kann eine Befehlsfolge wiederholt werden.

Daten

Als Daten werden im Allgemeinen alle im Rechner kodierten Zeichen bezeichnet, die keine Befehle darstellen und eine Bedeutung besitzen. Auch der Aufbau der Daten folgt syntaktischen Regeln. Mit so genannten Variablen kann man bequem auf die Daten zugreifen. Um die Zeichenketten der Daten mit ihrer (semantischen) Bedeutung nutzen zu können, muss man diese Bedeutung durch die Angabe eines Datentyps angeben. Zumeist besteht im Rahmen des Typsystems auch die Möglichkeit neue Typen zu vereinbaren.

Deklarative Programmiersprachen

Einen zu den imperativen Programmiersprachen konträren Ansatz verfolgen die deklarativen Programmiersprachen. Dabei beschreibt der Programmierer, welche Bedingungen ein Programm erfüllen muss. Wie etwas zu geschehen hat, ist Aufgabe des Übersetzungsprogramms. Oder anders gesagt: Der Programmierer gibt an, welches Ergebnis gewünscht ist. Die Problemlösung wird dem Computer überlassen. Die Art der formulierten Bedingungen unterteilen die deklarativen Programmiersprachen in logische Programmiersprachen, die mathematische Logik benutzen und funktionale Programmiersprachen, die dafür mathematische Funktionen einsetzen. Deklarative Programmiersprachen haben keine große Popularität und sind oftmals im akademischen Bereich zu finden.

Geschichte

mathematische Funktion und gilt als "Grandma COBOL"]] In den 1950er Jahren des letzten Jahrhunderts wurden in den USA die ersten drei weiter verbreiteten, praktisch eingesetzten höheren Programmiersprachen entwickelt. Dabei verfolgten dieses sowohl imperative als auch deklarativ-funktionale Ansätze. Die Entwicklung von Algol 60 läutete eine fruchtbare Phase vieler neuer Konzepte, wie das der prozedurale Programmierung ein. Der Bedarf an neuen Programmiersprachen wurde durch den schnellen Fortschritt der Computertechnik gesteigert. In dieser Phase entstanden die bis heute populärsten Programmiersprachen: BASIC und C. In der Nachfolgezeit ab 1980 konnten sich die neu entwickelten logischen Programmiersprachen nicht gegen die Weiterentwicklung traditioneller Konzepte in Form des objektorientierten Programmierens durchsetzen. Das in den 1990er Jahren immer schneller wachsende Internet forderte seinen Tribut beispielsweise in Form von neuen Skriptsprachen für die Entwicklung von Webserver-Anwendungen. Derzeit schreitet die Integration der Konzepte der letzten Jahrzehnte voran. Größere Beachtung findet so beispielsweise der Aspekt der Codesicherheit in Form von virtuellen Maschinen. Hauptartikel: Geschichte der Programmiersprachen

Klassifizierungen

Programmiersprachen lassen sich in verschiedener Hinsicht klassifizieren. Häufig ist die Unterteilung nach Programmierparadigmen, nach Sprachgenerationen oder Anwendungsgebieten.

Anwendungsgebiete


- Assemblersprachen erlauben eine hardwarenahe Programmierung.
- CNC-Programmiersprachen dienen der Erzeugung von Steuerungsinformationen für Werkzeugmaschinen.
- Datenbanksprachen sind für den Einsatz in und die Abfrage von Datenbanken gedacht.
- Skriptsprachen dienen zur einfachen Steuerung von Rechnern, wie bei der Stapelverarbeitung.
- Visuelle Programmiersprachen erleichtern die graphische Gestaltung von Benutzeroberflächen.
- Esoterische Programmiersprachen sind als anspruchsvolle Scherze gedacht.

Programmierparadigmen

Ein Programmierparadigma ist das einer Programmiersprache zugrundeliegende Prinzip. Grundlegend sind die Paradigmen der imperativen und der deklarativen Programmierung. Alle weiteren Paradigmen sind Verfeinerungen dieser Prinzipien. Eine Programmiersprache kann mehreren Paradigmen gehorchen. Hauptartikel: Programmierparadigma

Sprachgenerationen

Programmiersprachen werden in verschiedene Generationen eingeteilt, um damit zum einen die geschichtliche Entwicklung nachzuzeichnen. Andererseits ist dies ein Ansatz, die Sprachgenerationen als semantische Level zu verstehen. Damit wird der Abstraktionsgrad von der zugrunde liegenden Technik mit jeder Generation erhöht. Die 1. Generation erfordert damit genaueste Kenntnis über die Funktionsweise der zu programmierenden Maschine, während in den höheren Generationen die Beschreibung des Problems wichtiger wird. Wie es letztlich zu lösen ist, soll in den Verantwortungsbereich des Rechners überführt werden. 1. Generation: Maschinensprache sind die direkt auf einem Prozessor ausführbaren binäre Zahlencodes, die die Befehle darstellen. Die Eingabe erfolgt direkt in binärer 0-1-Form. Die direkte Programmierung in einer Maschinensprache wird heute kaum noch verwendet. :Beispiel: Es soll die Addition „3 + 4“ durchgeführt werden. Der Prozessor hat für die Operation „addiere“ den festgelegten Code 00011010. 0011 und 0100 ist die Codierung der Operanden 3 und 4 im Dualsystem. Damit weist die folgende Folge in Maschinensprache den Rechner an, die Addition auszuführen: 00011010 0011 0100. 2. Generation: Assembler ersetzen die Zahlencodes der Maschinensprache durch symbolische Bezeichner (Mnemonics). Eine Assembleranweisung wird in genau einen Maschinenbefehl umgesetzt. Der Anteil der Assemblerprogrammierung ist sehr gering. :Beispiel: Es soll die Addition „3 + 4“ durchgeführt werden. Der für den Prozessor geeignete Assembler hat den Bezeicher ADD für die Operation „addiere“ festgelegt. R0 und R1 sind die Speicherzellen in der die Operanden 3 und 4 stehen. Damit weist der folgende Befehl im Assembler den Rechner an, die Addition auszuführen: ADD R0 R1. 3. Generation: Höhere Programmiersprachen (High Level Languages) führen Konzepte, wie Variablen ein, um leichter verständlichen Quelltext schreiben zu können. Sprachen der 3. Generation sind weitgehend maschinenunabhängig. Die meisten praktisch eingesetzten Programmiersprachen sind höhere Programmiersprachen. :Beispiel: Es soll die Addition „3 + 4“ durchgeführt werden. In der höheren Programmiersprache C wird direkt die mathematische Arithmetik für die Operation „addiere“ unterstützt. Es ist dafür eine Variable Summe vom Datentyp int nötig. Damit weist der folgende Programmcode in C den Rechner an, die Addition auszuführen: int Summe; Summe = 3 + 4. Objektorientierte Sprachen sind ebenfalls Sprachen der 3. Generation. Um jedoch ihre konzeptionelle Sonderrolle zu betonen, werden sie in der Literatur oft als „OO-Generation“ bezeichnet. 4. Generation: Viertgenerationssprachen bieten einfache Sprachmittel zur Auslösung komplexer Operationen. Zumeist sind sie dabei an eine bestimmte Anwendung gebunden. :Beispiel: Es sollen aus einer Datensammlung alle Kundendaten herausgefunden werden. Falls die Daten in einer geeigneten Datenbankanwendung erfasst sind, kann mit der Sprache SQL die Aktion folgendermaßen erreicht werden: SELECT kunden FROM datenbank. Dasselbe Ergebnis ist mit einer Hochsprache nur durch eine Beschreibung von Einzelaktionen (Öffnen von Dateien etc.) zu erzielen. 5. Generation: (Very High Level Language, VHLL) Sprachen der 5.Generation gestatten das Beschreiben von Sachverhalten und Problemen. Sie kommen vor allem im Bereich der KI (künstliche Intelligenz) zum Einsatz. Die Wahl des Problemlösungsweges kann (entsprechend dem Sprachkonzept) dem jeweiligen System (weitgehend) überlassen werden. Bekanntestes Beispiel für eine Sprache der 5. Generation ist PROLOG.

Siehe auch


- Liste der Programmiersprachen
- Programmierstil

Literatur


- Kenneth C. Louden: Programmiersprachen: Grundlagen, Konzepte, Entwurf. Internat. Thomson Publ., Bonn, Albany [u.a.] 1994, ISBN 3-929821-03-6

Weblinks


- [http://www.99-bottles-of-beer.net 99 Bottles of Beer]: Ein Programm in 854 Programmiersprachen bzw. Dialekten (Stand: 21. November 2005)
- [http://lambda-the-ultimate.org Lambda the Ultimate] Das Blog zum Thema Programmiersprachen (englisch) Kategorie:Compilerbau ja:プログラミング言語

Java (Programmiersprache)

Java [] ist eine objektorientierte Programmiersprache und als solche ein eingetragenes Warenzeichen der Firma Sun Microsystems. Sie ist eine Komponente der Java-Technologie. Java-Programme werden in einer speziellen Umgebung, der Java-Laufzeitumgebung oder Java-Plattform ausgeführt, deren wichtigster Bestandteil die Java Virtual Machine ist. Dazu werden Java-Programme in Bytecode übersetzt, der von der virtuellen Maschine ausgeführt wird. Die Programme sind weitestgehend portabel, das heißt der übersetzte Bytecode läuft ohne Anpassungen auf verschiedenen Computern und Betriebssystemen, neben dem UNIX-Derivat Solaris der Firma Sun unter anderem auch unter Linux, Windows oder Mac OS X.

Grundkonzepte der Sprache

Der ursprüngliche Entwurf der Programmiersprache Java strebte im wesentlichen fünf Ziele an.
- Sie soll eine objektorientierte Programmiersprache sein.
- Sie soll es ermöglichen, das gleiche Programm auf unterschiedlichen Computersystemen auszuführen.
- Sie soll eingebaute Unterstützung für die Verwendung von Computernetzen enthalten.
- Sie soll Code aus entfernten Quellen sicher ausführen können. Dieser Punkt wird über das Sicherheitskonzept von Java erreicht, das aus drei Schichten besteht:
- # dem Code-Verifier (deutsch „Code-Überprüfer“), der sicherstellt, dass die VM keinen ungültigen Bytecode ausführen kann.
- # den Class-Loadern (deutsch „Klassenlader“), die die sichere Zuführung von Klasseninformationen zur JVM steuern (diese ist dabei kein Interpreter, siehe unten).
- # den Security-Managern (deutsch „Sicherheitsverwalter“), die sicher stellen, dass nur Zugriff auf Programmobjekte erlaubt wird, für die entsprechende Rechte vorhanden sind.
- Die erfolgreichen Aspekte bereits verbreiteter objektorientierter Programmiersprachen wie C++ sollen auch für Java-Programmierer zur Verfügung stehen.

Objektorientierung

Die Sprache Java gehört zu den objektorientierten Programmiersprachen. Die Grundidee der objektorientierten Programmierung ist die softwaretechnische Abbildung in einer Art und Weise, wie wir Menschen auch Dinge der realen Welt erfahren. Die Absicht dahinter ist, große Softwareprojekte einfacher verwalten zu können, und sowohl die Qualität von Software zu erhöhen als auch Fehler zu minimieren. Ein weiteres Ziel der Objektorientierung ist ein hoher Grad der Wiederverwendbarkeit von Softwaremodulen. Ein neuer Aspekt von Java gegenüber den zuvor verbreitetsten objektorientierten Programmiersprachen C++ und Smalltalk ist die explizite Unterscheidung zwischen Schnittstellen und Klassen, die auch durch entsprechende Schlüsselwörter interface und class zur Geltung kommt. Java ist nicht vollständig objektorientiert: Die Grunddatentypen (int, boolean usw.) und Literale sind keine Objekte (siehe auch unter Java-Syntax).

Reflection

Java bietet eine Reflection-API als Bestandteil der Laufzeitumgebung. Damit ist es möglich, zur Laufzeit auf Klassen und Methoden zuzugreifen, deren Existenz oder genaue Ausprägung zur Zeit der Programmerstellung nicht bekannt war.

Annotationen

Seit Java 5.0 gibt es eine Syntax-Erweiterung namens Annotationen. Sinn der Annotationen ist die automatische Erzeugung von Code und anderen in der Software-Entwicklung wichtigen Dateien für wiederkehrende Muster anhand möglichst kurzer Hinweise im Quelltext. Bislang wurden in Java dafür ausschließlich Javadoc-Kommentare mit speziellen JavaDoc-Tags verwendet, die von Doclets wie z. B. dem XDoclet ausgewertet wurden. Diese Annotationen können auch in den kompilierten Class-Files enthalten sein, der Quelltext wird also für ihre Verwendung nicht benötigt. Insbesondere sind die Annotationen auch über die Reflection-API zugänglich. So können sie zum Beispiel zur Erweiterung des Bean-Konzeptes verwendet werden.

Write Once, Run Anywhere

Java funktioniert nach dem Konzept Write Once, Run Anywhere (deutsch: Schreibe einmal, laufe überall). Das bedeutet, dass man ein Programm, das in Java programmiert wurde, nur einmal zu kompilieren braucht und es auf allen anderen Systemen läuft, die eine Java-Laufzeitumgebung (Java Runtime Environment bzw. JRE) besitzen. Dies wird dadurch erreicht, dass Java zunächst in Bytecode kompiliert wird, dieser wird von der JRE beim Starten des Programmes erst in die Maschinensprache kompiliert (Man spricht hier von einem JIT-Compiler). Der Bytecode funktioniert also als Zwischencode, zwischen Programmiersprache und Maschinensprache. So ist das Javaprogramm nicht an eine bestimmte Maschine gebunden. Die Java Runtime Environment existiert für weit verbreitete Betriebssysteme wie Microsoft Windows, Linux, Solaris, Mac OS X, AIX und viele andere. Daneben gibt es eine JRE nicht nur für Server- und Desktopbetriebssysteme, sondern auch für viele Embedded Systeme wie Mobiltelefone, PDAs, sowie Smartcards und andere technische Plattformen, wie Auto und TV. Die Plattformunabhängigkeit endet jedoch für solche Systeme, für die keine Java Virtual Machine existiert, zumeist ältere oder sehr exotische Systeme. Es gibt aber auch Compiler, die Java direkt in Maschinencode übersetzen (Siehe Java: Native Compiler). Fälschlicherweise wird oft behauptet, dass Java plattformunabhängig sei, dies ist jedoch nicht richtig, da Java von der Java-Plattform abhängt. Diese lässt sich eben nur auf verschiedene Architekturen und Betriebssysteme portieren.

Modulare Ausführung auf fernen Computern

Java bietet die Möglichkeit, Klassen zu schreiben, die in unbekannten Containern ablaufen. Beispielsweise lassen sich Applets in Webbrowsern, die Java unterstützen, ausführen. Das Sicherheitskonzept von Java kann dazu eingesetzt werden, dass unbekannte Klassen dabei keinen Schaden anrichten können, was vor allem bei Applets wichtig ist (siehe auch Sandbox). Beispiele für Java Container-Module sind Applets, Servlets, Portlets, Midlets, Translets, Doclets und Enterprise JavaBeans.

Merkmale der Sprache

Der Objektzugriff in Java ist über Referenzen genannte Zeiger implementiert; aus Sicherheitsgründen ist es nicht möglich, deren Speicheradresse zu modifizieren. So genannte Pointerarithmetik ist mit der Sprache also ausgeschlossen. Per Design können so häufig auftretende Fehler während des Entwicklungsprozesses von vornherein ausgeschlossen werden. Um große Projekte strukturieren zu können und saubere Schnittstellen zu Bibliotheken zu schaffen, können die Klassen zu Paketen (englisch packages) zusammengefasst werden. Die Zugriffe auf Klassen und Methoden eines fremden Paketes können – ähnlich wie innerhalb einer Klasse unter anderem durch private und public – geregelt werden. Weiter unterstützt die Sprache Threads (gleichzeitig ablaufende Programmteile) und Ausnahmen (englisch exception) und Java beinhaltet auch eine automatische Speicherbereinigung (englisch garbage collector), die nicht (mehr) referenzierte Objekte aus dem Speicher entfernt. Bemerkenswert ist auch die explizite Unterscheidung von Schnittstellen und Klassen. Eine Klasse kann beliebig viele Schnittstellen implementieren, hat aber stets genau eine Basisklasse. Java unterstützt keine Mehrfachvererbung, da lediglich Schnittstellen, jedoch keine Klassen „mehrfach“ vererbt werden können. Funktionen (in der Java-Welt „Methoden“) werden nur von der Basisklasse übernommen. Alle Klassen sind – direkt oder indirekt – von der Wurzelklasse Object abgeleitet. Zu Java gehört eine umfangreiche Klassenbibliothek. Dem Programmierer wird damit eine einheitliche, vom zugrunde liegenden Betriebssystem unabhängige Schnittstelle (Application programming interface, API) angeboten. Mit Java 1.1 wurden die Java Foundation Classes (JFC) eingeführt, die u. a. Swing bereitstellen, das zur Erzeugung plattformunabhängiger grafischer Benutzerschnittstellen (GUI) dient und auf AWT basiert.

Syntax

Ein Beispielprogramm, das eine Meldung auf der Konsole ausgibt: public class HelloWorld Die Grammatik von Java ist in der Java Language Specification (Java-Sprachspezifikation) von SUN Microsystems dokumentiert.

Unterschiede zu ähnlichen Sprachen

JavaScript

Java ist nicht mit der reinen Skriptsprache JavaScript zu verwechseln, die vornehmlich in HTML-Seiten zur eingebetteten Programmierung verwendet wird. Sie hat eine ähnliche Syntax, unterscheidet sich jedoch in vielerlei Hinsicht und kann insbesondere nicht für die Konstruktion größerer, kompletter Anwendungen verwendet werden. Objekte werden in JavaScript prototypenbasiert definiert. Es gibt Implementierungen vor allem in Web-Browsern, aber auch unabhängige Ausführungsumgebungen sind vorhanden.

Smalltalk

Smalltalk ist eine der ältesten objektorientierten Programmiersprachen überhaupt und der eigentliche Vater von Java. Sun hat sich jedoch für die C++ Syntax entschieden und gleichzeitig verlauten lassen, Java würde von C++ abstammen. Der Grund für diesen Schachzug war die größte Hürde für eine neue Programmiersprache: Die Akzeptanz der Programmierer zu erlangen. Dies war mit der Anlehnung an eine sehr bekannte Sprache mit geläufiger Syntax einfacher. Java erbte von Smalltalk die grundsätzliche Konzeption eines Objektbaumes, in den alle Objekte eingehängt werden und von einem einzigen Mutterobjekt abstammen (java.lang.Object). Des weiteren wurde das Konzept der automatischen Speicherbereinigung (garbage collector) und der virtuellen Maschine übernommen sowie eine Vielzahl weiterer Features der Sprache Smalltalk. Smalltalk kennt jedoch keine primitiven Datentypen wie z. B. int – selbst eine einfache Zahl ist ein Objekt. Dies wurde in Java geändert. Klassisch für Smalltalk-Systeme ist der Object-Browser, der in modernen integrierten Entwicklungsumgebungen, wie z. B. Eclipse auch für Java existiert.

C++

Java lehnt an die objektorientierte Programmiersprache C++ an. Im Gegensatz zu C++ fanden jedoch komplexe Konstrukte wie Mehrfachvererbung oder die fehleranfällige Zeigerarithmetik keinen Einzug. Die interne Speicherverwaltung wird dem Java-Entwickler weitgehend abgenommen; dies erledigt die automatische Speicherbereinigung. Deshalb ist Java in vielen Fällen leichter zu handhaben als C++. Allerdings garantiert auch dieser Mechanismus nicht den vollständigen Ausschluss von Speicherlecks. Letztlich muss der Programmierer dafür sorgen, dass nicht mehr verwendete Objekte nirgends mehr referenziert werden. Neben Mehrfachvererbung und Speicherarithmetik wurden bei der Entwicklung von Java noch weitere Konstrukte der Sprache C++ bewusst weggelassen: Im Gegensatz zu C++ ist es in Java nicht möglich, Operatoren (zum Beispiel arithmetische Operatoren wie + und -, logische Operatoren wie && und ||, oder den Indexoperator []) zu überladen, das heißt in einem bestimmten Kontext mit neuer Bedeutung zu versehen. Dies sorgt einerseits für eine Vereinfachung der Sprache an sich und verhindert, dass Quellcodes mit Operatoren, die mit schwer nachvollziehbarer Semantik überladen werden, unlesbar gemacht werden. Andererseits können benutzerdefinierte Typen mit überladenen Operatoren in C++ eher wie eingebaute Typen erscheinen und vor allem numerischer Code ist mitunter einfacher nachvollziehbar. Das C++-Konstrukt der „Templates“, die es erlauben, Algorithmen oder sogar ganze Klassen unabhängig von den darin verwendeten Datentypen zu definieren, wurde in Java nicht übernommen. Seit Version 1.5 unterstützt Java sogenannte „Generics“, die zwar keinerlei Metaprogrammierung erlauben, aber ähnlich wie C++-Templates typsichere Container und ähnliches ermöglichen.

C#

C# (gesprochen: engl. "C sharp" bzw. dt. "ßieh Scharp"), entwickelt von Microsoft, kann als Konkurrenzprodukt zu Java gesehen werden. Mit der Spezifikation von C# hat Microsoft im Rahmen seiner .NET-Strategie versucht, den Spagat zwischen dem kompletten Neuanfang einer Sprache und der leichten Integration bisher bestehender Komponenten zu schaffen. Die Syntax von C# entspricht in großen Teilen der Syntax von Java, konzeptionelle Unterschiede bestehen insbesondere in der Unterstützung von Delegaten (engl. "delegates"), ein Konzept, das mit Funktionszeigern vergleichbar ist, hierbei kommt ein Beobachter-Entwurfsmuster zum Einsatz – Objekte können sich für Ereignisse registrieren bzw. diese delegieren. C# kennt ebenso wie Java eine Unterscheidung zwischen Werttypen (engl. "value types"; z. B. int, struct) und Referenztypen (engl. "reference types", z. B. class), allerdings sind auch die elementaren Datentypen objektbasiert. Des weiteren unterstützt C# so genannte Attribute ("attributes"), die es erlauben, die Funktionalität der Sprache über Metadaten im Code zu erweitern (eine ähnliche Funktionalität gibt es seit Java 5.0). C# enthält auch Bestandteile der Sprachen VisualBasic (z. B. Eigenschaften bzw. properties) sowie C++ (z. B. enums). In C# hingegen ist es nicht notwendig und möglich Ausnahmen (exceptions) zu einer Methode zu deklarieren. In Java müssen einmal deklarierte Ausnahmen auch verarbeitet werden. Um auch systemnahe Programmierung zu ermöglichen, besteht in .NET die Möglichkeit, auch so genannten unsicheren unmanaged code zu verwenden, ähnlich Javas JNI. Bislang gibt es Microsofts .NET-Implementierung nur für Microsoft-eigene Betriebssysteme (ab Windows NT 4 SP 6) – abgesehen von einer Referenz-Implementierung für das FreeBSD-Betriebssystem, die aber unter der sogenannten Shared Source-Lizenz (Quellcode-Modifikationen dürfen nicht weitergegeben werden) veröffentlich wurde, weswegen das Mono-Projekt und DotGNU eigene Implementierungen vorantreibt. Dabei werden auch weitere Betriebssysteme unterstützt. Dies wird dadurch vereinfacht, dass C# standardisiert ist.

Entwicklungsumgebungen

DotGNU Es gibt eine große Vielfalt von Entwicklungsumgebungen für Java, sowohl kommerzielle als auch freie (Open Source). Die meisten Entwicklungsumgebungen für Java sind selbst ebenfalls in Java geschrieben. In Form von z. B. OSGi finden sich inzwischen auch eigenständige Entwicklungsframeworks, die verschiedene Konzepte von Java unabhängig hiervon weiterentwickeln – Eclipse basiert beispielsweise auf OSGi. OSGi selbst spezifiziert das Bundle-Konzept, einen service-orientierten Ansatz, um dynamische Nachladbarkeit und Versionsmanagement von Java-Klassen zu ermöglichen (z. B. für Embedded Java-Anwendungen). Hierzu gehört auch das Remote Management von Plattformen, um Service Delivery und Wartung (Updates aus der Ferne) zu ermöglichen. Die bekanntesten Open-Source-Umgebungen sind Eclipse, jEdit und NetBeans. Unter den kommerziellen Entwicklungsumgebungen sind das auf Netbeans basierende Sun ONE Studio von Sun, IntelliJ IDEA von JetBrains, JBuilder von Borland sowie JCreator am verbreitetsten. Außerdem gibt es noch eine, um einige hundert Plugins erweiterte Version von Eclipse, die von IBM unter dem Namen WebSphere Studio Application Developer ("WSAD") vertrieben wurde und seit Version 6.0 Rational Application Developer ("RAD") heißt. Apple liefert mit Mac OS X ab Version 10.3 die Entwicklungsumgebung Xcode aus, die verschiedene Programmiersprachen unterstützt und einen Schwerpunkt auf Java setzt. Xcode ist nach Registrierung für jedermann kostenlos erhältlich. Wer lieber einen Texteditor verwendet findet in Emacs zusammen mit der JDEE (Java Development Environment for Emacs) ein mächtiges Werkzeug. Für andere Editoren wie Vim, Jed oder Textpad gibt es ebenfalls entsprechende Modes. Siehe auch: Cocoon, Jogl

Compiler

Mit einem Java-Compiler ist es möglich, Java-Sourcecode (Dateiendung .java) in einen ausführbaren Code zu kompilieren. Grundsätzlich unterscheidet man zwischen Bytecode- und Nativecode-Compilern. Des weiteren verwenden einige Java-Laufzeitumgebungen einen JIT-Compiler um Bytecode häufig genutzter Programmteile in nativen Maschinencode zu übersetzen während das Programm läuft.

Bytecode-Compiler

Java-Programme werden im Normalfall in einen nicht direkt ausführbaren Bytecode (Dateiendung .class) übersetzt, den Maschinencode der Java-Plattform, der in der Java Runtime Environment (JRE) ausgeführt wird. Es ist dabei festzuhalten, dass diese Ausführung von Bytecode nichts mit einem Interpreter zu tun hat, wie er z.B. in Basic zum Einsatz kommt. Die aktuelle HotSpot-Technologie kompiliert den Bytecode zur Laufzeit vielmehr in nativen Prozessorcode und optimiert diesen abhängig von der verwendeten Plattform. Diese Optimierung findet dabei sukzessive statt, so dass der Effekt auftritt, dass Programmteile erst nach mehrmaliger Abarbeitung schneller werden. Auf der anderen Seite führt diese Technologie, die ein Nachfolger der Just-In-Time-Compilierung ist, dazu, dass Java-Bytecodes mindestens genau so schnell wie native, kompilierte Programme ausgeführt werden. Die HotSpot-Technologie ist seit der JRE Version 1.3.x verfügbar und wurde seitdem immer weiter verbessert.
- javac (Teil des JDK) von Sun Microsystems
- Jikes von IBM

Native Compiler

Es existieren auch Compiler für Java, die Java-Quelltexte oder Java-Bytecode in normalen Maschinencode übersetzen können, sogenannte Ahead-Of-Time-Compiler. Nativ kompilierte Programme haben den Vorteil, keine JavaVM mehr zu benötigen, aber auch den Nachteil, nicht mehr plattformunabhängig zu sein. Hier trifft die Bezeichnung "write once, run anywhere" nicht mehr zu.
- GNU Compiler for Java (GCJ)
  - MinGW
  - Cygwin
- Excelsior JET

Wrapper

Ein Wrapper (in diesem Zusammenhang) ist ein ausführbares Programm, welches als Ersatz für ein Java Archive (Dateiendung .jar) dient. Er sucht selbständig nach einer installierten Java-Laufzeitumgebung, um das Programm zu starten und informiert den Benutzer darüber, wo er eine Laufzeitumgebung herunterladen kann, sofern noch keine installiert ist. Es ist also immer noch eine Laufzeitumgebung nötig, um das Programm starten zu können. Java Web Start ist ein etwas eleganterer Ansatz für diese Problematik - er ermöglicht die einfache Aktivierung von Anwendungen mit einem einzigen Mausklick und garantiert, dass Sie immer die neueste Version der Anwendung ausführen. Dadurch werden komplizierte Installations- oder Aktualisierungsprozeduren vermieden.
- [http://jsmooth.sourceforge.net/ JSmooth] (Lizenz: GPL)
- [http://launch4j.sourceforge.net/ Launch4J] (Lizenz: GPL)
- JBuilder von Borland und NSIS ([http://nsis.sourceforge.net/wiki/Java_Launcher Java Launcher]) sind ebenfalls in der Lage einen Wrapper für Windows zu erstellen

Literatur


- James Gosling, Bill Joy, Guy Steele, Gilad Bracha: The Java Language Specification. Second Edition.
- David Flanagan: Java in a Nutshell (Deutsche Ausgabe). O'Reilly, 2002, ISBN 3-89721-332-X
- Christian Ullenboom: Java ist auch eine Insel. Galileo Computing, 2004, ISBN 3-89842-526-6 ([http://www.galileocomputing.de/openbook/javainsel5/ Online-Buch])
- Cay Horstmann, Gary Cornell: Core Java 2. Band 1 - Grundlagen Einführung in die objektorientierte Programmierung. ISBN 3-8273-2216-2
- Guido Krüger: Handbuch der Java-Programmierung. Addison-Wesley, 2002, ISBN 3-8273-1949-8 ([http://www.javabuch.de/ Freier Download])
- Friedrich Esser: Java 2 – Designmuster und Zertifizierungswissen, Galileo Computing, 2001, ISBN 3-9343-5866-7 ([http://www.galileocomputing.de/openbook/java2/ Online-Buch])
- Bruce Eckel: Thinking in Java, Prentice-Hall, 2002, ISBN 0-1310-0287-2 ([http://www.mindview.net/Books/TIJ/ Online-Buch], Englisch)
- Joshua Bloch: Effective Java Programming Language, Addison-Wesley, 2001, ISBN 0201310058
- Dietrich Boles, Cornelia Boles: Objektorientierte Programmierung spielend gelernt mit dem Java-Hamster-Modell, Teubner, 2004, ISBN 3-519-00506-9
- Ralph Steyer: Java 2 - M+T Pocket, Das Programmier-Handbuch, Markt & Technik, 2003, ISBN 3-8272-6106-6 ([http://www.rjs.de/index.php?id=javatb.php Online-Buch])
- Ralph Steyer, Java 2 - Magnum, Markt & Technik, ISBN 3-8272-6242-9 ([http://www.rjs.de/index.php?id=magnum.php Online Buch])
- Dirk Louis & Peter Müller: Java 5 Kompendium - Praxis der objektorientierten Programmierung, Markt & Technik, 2005, ISBN 3-8272-6844-3

Siehe auch

Geschichte

Wikipedia-Artikel zur geschichtlichen Entwicklung von Java:
- Star Seven, das erste Gerät mit Java-Interpreter (damals noch Oak)

Programmiersprachen

Programmiersprachen, die sich an Java anlehnen und Bytecode generieren:
- Groovy
- Nice

Java für Embedded Systems


- Embedded Java / OSGi

Java Frameworks


- OSGi
- Jakarta-Projekt
- Java 2 Platform Enterprise Edition
- Struts

Java-basierte Plattformen


- Multimedia Home Platform (MHP)
- MIDP

Weblinks


- [http://java.sun.com Java-Abteilung von Sun Microsystems] (Englisch)
- [http://java.sun.com/j2se/downloads.html Download Java] (Englisch)
- [http://java.seite.net Kaffee & Kuchen] Deutsche Java-Seite mit News & Workshops
- [http://www.ikvm.net/ Entwicklung einer Java-VM für .NET]
- [http://www.kpdus.com/jad.html Decompiler] für Java

Tutorien


- [http://java.sun.com/docs/books/tutorial/ Java Tutorial] von Sun (engl.)
- [http://java.sun.com/j2se/1.5/docs Java-Dokumentation der aktuellen Version J2SE 1.5] (Englisch, inkl. Sprachdefinition und Standard-API)
- [http://www.javabuch.de/ Handbuch der Java-Programmierung] von Guido Krüger (deutsch), freie HTML-Ausgabe des gleichnamigen Buches
- Interaktives [http://gailer-net.de/tutorials/java/java-toc.html Java Tutorial] von Bradley Kjells (dt./engl.), einsteigerfreundliche Einführung in Java
- Erstellen von Spielen und Bewegung mit Java 1.4: [http://www.javacooperation.gmxhome.de javacooperation] (deutsch/englisch/russisch)

Link-Sammlungen


- [http://www.JavaLinkBase.de/ Java Link Base]
- [http://dmoz.org/World/Deutsch/Computer/Programmieren/Sprachen/Java/ Deutscher Eintrag bei Open Directory] Kategorie:Programmiersprache ja:Java言語 ko:자바 프로그래밍 언어 th:ภาษาจาวา

Applet

Der Begriff Applet bedeutet soviel wie „kleine Applikation“. Verstanden wird darunter meist ein Java-Applet, ein kleines Computerprogramm, das in einem Web-Browser läuft und in der Programmiersprache Java geschrieben ist. Java-Applets werden – wie z.B. auch eingebettete Bilder – mit der HTML-Seite über das HTTP-Protokoll übertragen und dann auf dem Rechner des Anwenders ausgeführt. Sie unterliegen speziellen Sicherheitsrichtlinien, d.h. sie haben im Browser nicht die selben Rechte wie gewöhnliche Programme. So dürfen sie zum Beispiel Netzwerkverbindungen nur zu dem Rechner aufbauen, von dem sie heruntergeladen wurden. Verwendung findet der Begriff auch im Bereich der grafischen Benutzeroberflächen, wie etwa GNOME. Hier bezeichnet er dynamisch hinzufügbare und entfernbare Dienstprogramme für die Taskleiste. Beispielauswahl von GNOME-Applets: Bild:GNOME_Applets_Beispielauswahl.png Kategorie:Software Kategorie:Programmiersprache Java ja:アプレット

Anwendungsprogramm

Ein Anwendungsprogramm (kurz "Anwendung") ist ein Computerprogramm, das eine für den Anwender nützliche Funktion ausführt, z. B. Buchhaltung, Informationssysteme, Computer Aided Design, Textverarbeitung, Tabellenkalkulation oder auch Spiele. Aus dem englischen Begriff Application hat sich in der Alltagssprache auch die Bezeichnung "Applikation" für Anwendungsprogramm eingebürgert. Der Begriff steht im Gegensatz zum Betriebssystem und allen System- und Hilfsprogrammen, die "nur" den Betrieb ermöglichen, aber noch keinen "Nutzen" bringen. Auch Programmiersprachen und Werkzeuge zur Softwareerstellung gehören im engeren Sinne nicht zu den Anwendungsprogrammen. Die Trennung zwischen Anwendung und Betriebssystem ist unscharf. So kann man Programmbibliotheken sowohl als Teil eines Betriebssystems, als Teil einer Anwendung oder auch als eine Schicht zwischen Anwendung und Betriebssystem betrachten. Anwendungsprogramme werden in erheblichem Umfang zur Unterstützung der Verwaltung in Behörden und Unternehmen eingesetzt. Anwendungssoftware ist nur zum Teil Standardsoftware. Zu einem großen Teil werden auf den jeweiligen Anwendungsfall zugeschnittene Branchenlösungen oder Individuallösungen eingesetzt.

Siehe auch


- Datenbankanwendung
- Software
- Freie Software
- Ausführbares Programm
- Dienstprogramm

Weblinks


- http://www.sourceforge.net - Plattform für Entwickler freier Software
- http://www.freshmeat.net - Index freier Software, sehr umfassend Kategorie:Software ! ja:アプリケーションソフトウェア ko:응용 소프트웨어 simple:Application

Common Gateway Interface

Die CGI-Schnittstelle (Common Gateway Interface – in etwa Allgemeine Vermittlungsrechner-Schnittstelle) ist ein Standard im Web für den Datenaustausch zwischen auf Webservern bereitstehenden Programmen (Scripts) und den sie aufrufenden Webbrowsern. Hierbei können die serverseitigen Programme, die z.B. von HTML-Dateien aus aufgerufen werden können, sowohl Daten vom Browser empfangen (etwa Formulareinträge) als auch neu generierte Daten an den Browser verschicken (etwa eine HTML-Seite). CGI ist also eine schon länger bestehende Variante, Webseiten dynamisch bzw. interaktiv zu machen. Um die CGI-Schnittstelle zu verwenden, muss diese von der Webserver-Software unterstützt werden. Dabei ist wichtig, dass diese Software dem Programm/Script immer 3 Dinge zur Verfügung stellt:
- Umgebungsvariablen (z.B. SERVER_NAME), deren Inhalte dem Programm helfen, sich „vor Ort“ zu orientieren und über aktuelle Einstellungen zu informieren.
- Weiterleitung von Ausgaben, meistens als dynamisch erzeugte HTML-Seite (oder Seitenteile), aber auch als Einträge in Fehlerprotokolldateien.
- Einholen von Formulareingaben oder Aufrufparametern z.B. aus HTML-Seiten, damit das CGI-Programm/-Script auf diese reagieren kann. Dabei können solche Daten als Umgebungsvariable (GET-Methode) oder über einen Eingabe-Kanal (POST-Methode) Eingang ins Programm/Script finden, wobei letztere Möglichkeit sicherer ist. Wie diese Daten strukturiert sind, ist die eigentliche Schnittstellenbeschreibung (deshalb „interface“). CGI-Programme können also in allen möglichen Programmiersprachen geschrieben sein. Es muss lediglich auf dem Server ein entsprechender Laufzeitinterpreter vorhanden sein, oder das Programm muss für das Serverbetriebssystem kompiliert worden sein. Am weitesten verbreitet ist hierbei Perl. Ein Nachteil, der der CGI-Ausführung nachgesagt wird, ist, dass sie langsamer sei als andere Möglichkeiten (z.B. Servlets), da für jeden CGI-Aufruf eine neue Programm-Instanz ausgeführt werden muss. Deshalb wird CGI heutzutage nicht mehr so oft eingesetzt, denn selbst Ansätze wie FastCGI, welches gewisse Nachteile von CGI aufhebt, konnten sich zumindest nicht auf breiter Front durchsetzen. Andererseits wird dieser Nachteil von modernen Webserver-Typen für einige Programmiersprachen behoben (z.B. bietet der Webserver Apache mit dem Modul mod_perl die Möglichkeit, einen Perl-Interpreter in den Webserver selbst einzubetten, was – neben anderen Vorteilen – die Ausführungsgeschwindigkeit massiv erhöhen kann). Alle derartigen Lösungen sind jedoch nicht mehr programmiersprachenunabhängig. Die Tatsache, dass über CGI auf dem Webserver eines kommerziellen Providers Programme ausgeführt werden können, die ein Kunde des Providers selbst erstellt hat, ist in höchstem Maße sicherheitsrelevant. Daher muss sichergestellt sein, dass ein über CGI gestartetes Programm nur bestimmte eingeschränkte Typen von Programmroutinen ausführen darf (z.B. kein Löschen von Dateien des Webservers u.ä.). Bei dem Apache-Webserver wird die Ausführung von CGI-Programmen mit Hilfe des Modules suexec gegen solche Cracker-Angriffe gesichert, die das Eindringen als Root-User zum Ziel haben. Die Sicherheitsmaßnahmen sind dabei mehrstufig aufgebaut und so streng, dass viele Server-Administratoren dazu übergegangen sind, auch andere serverseitige Sprachen über CGI laufen zu lassen. So wird zum Beispiel PHP bei den meisten Providern als CGI-Modul eingebunden (mit dem Nachteil, dass es alle Vorteile in Bezug auf den oben genannten Geschwindigkeitsgewinn verliert). weitere serverseitige Technologien:
- Active Server Pages (ASP)
- ColdFusion
- JSP
- Servlet
- PHP
- FastCGI
- Server Side Includes (SSI)

Weblinks


- [http://de.selfhtml.org/servercgi/ SELFHTML: Webserver/CGI]
- [http://cgi-spec.golux.com Spezifikation]
- [http://cgi.xwolf.de XWolf Portal – Realm of CGI]
- [http://www.html-world.de/program/cgi_ov.php HTMLWorld: CGI/Perl-Einführung]
- [http://www.uni-koeln.de/rrzk/www/formulare/risiken.html RRZK: CGI-Sicherheits-Hinweise]
- http://www.cgi-world.de Kategorie:Web-Entwicklung ja:Common Gateway Interface

Servlet

Als Servlets bezeichnet man Java-Klassen, deren Instanzen innerhalb eines Webservers Anfragen von Clients entgegen nehmen und beantworten. Solche Klassen müssen immer die Schnittstelle „javax.servlet.Servlet“ oder eine davon abgeleitete (normalerweise „javax.servlet.http.HttpServlet“) implementieren. Der Inhalt der Antworten kann dabei dynamisch, also im Moment der Anfrage, erstellt werden und muss nicht bereits statisch (etwa in Form einer HTML-Seite) für den Webserver verfügbar sein. Servlets stellen somit das Java-Pendant zu CGI-Skripten oder anderen Konzepten, mit denen dynamisch Web-Inhalte erstellt werden können (PHP etc.), dar. Häufig werden in einem Servlet Parameter der Anfrage und Sitzungsdaten verwendet um zum Beispiel eine personalisierte Antwort zu erzeugen oder Daten auf dem Server zu speichern oder zu verändern. Die Antworten können neben Text (zum Beispiel HTML oder XML) auch Bilder oder andere Binärdateien sein. Servlets werden oft im Rahmen der J2EE-Spezifikation nach dem Model-View-Controller-Pattern (MVC) zusammen mit JSP verwendet, wobei das Servlet den Controller und die JSP-Seite einen View repräsentiert. Instanzen eines Servlets werden bei Bedarf von der Laufzeitumgebung, dem sogenannten Web-Container erzeugt und von ihm aus angesprochen. Der Webcontainer seinerseits kommuniziert mit dem Webserver oder ist integraler Bestandteil eines Java-Webservers. Bei Verwendung der Servlet-Spezifikation und einer entsprechenden Webcontainer-Umgebung (zum Beispiel Jakarta Tomcat) besteht die Implementierung einer dynamischen Webseite in folgendem: Es wird eine von javax.servlet.http.HttpServlet abgeleitete Klasse erstellt. Die beiden Methoden doGet und doPost der Superklasse werden überschrieben um die beiden wichtigsten HTTP-Methoden GET und POST verarbeiten zu können. Die Metainformationen über das Servlet werden in einer XML-Datei hinterlegt. Diese XML-Datei wird zusammen mit der kompilierten Klasse (sowie ggf. weiteren benötigten Klassen) in eine einzige Archiv-Datei zusammengeführt (sogenanntes Web-Archiv), dieses wiederum wird dem Webcontainer über eine von ihm bereitgestellte Funktionalität zur Verfügung gestellt (sog. Deployment).

Wort

Das englische Wort „Servlet“ wird nicht übersetzt. Es handelt sich hierbei um eine Wortkreation aus den Begriffen „Server“ und „Applet“, also serverseitiges Applet und somit Servlet. Sun hat mit Einführung der Sprache Java zwei Arten von Anwendungen definiert: Applications (also richtige, ausgewachsene Desktop-Anwendungen) und Applets (wörtlich: Anwendung-chen, also kleine, Mini-Anwendungen, die nur innerhalb eines Containers – in der Regel in einem Webbrowser – ablaufen). Als die Java-Technologie auch auf die Serverseite kam, suchte man dort einen Namen für die kleinen Codestückchen, die jetzt nicht mehr im Kontext des Browsers, sondern in dem des Webservers laufen, der an Applet erinnert. Schließlich ist es ein im weitesten Sinne ähnliches Konzept: kleine Serveranwendung-chen, die einen Container (hier: den Webserver) um sich herum brauchen, um laufen zu können. Dabei kam man auf Servlet.

Weblinks


- [http://java.sun.com/products/servlet/index.html Servlet Homepage bei Sun]
  - [http://java.sun.com/products/servlet/articles/tutorial/ Servlet Tutorial bei Sun]
- [http://jakarta.apache.org/tomcat/ Tomcat] – die Referenzimplementation der Servlet- und JSP-Spezifikation
- [http://www-user.tu-chemnitz.de/~chu/ibmjava/kap4/java4-1.htm Kurze Einführung in die Programmierung mit Java]
- [http://www.php-homepage.de/artikel/?nr=18 php-homepage.de/artikel] Vergleich Servlet mit PHP Kategorie:Programmiersprache Java Kategorie:Web-Entwicklung ja:Java Servlet

HTML-Seite

Die Hypertext Markup Language (HTML) ist ein Dokumentenformat zur Auszeichnung von Hypertext im World Wide Web und wurde 1989 von Tim Berners-Lee am CERN in Genf festgelegt. Sie basiert auf der Metasprache SGML, die zur Definition von Auszeichnungssprachen verwendet wird. HTML ist also eine Auszeichnungssprache zur Beschreibung von Informationen in Hypertexten. HTML wurde vom World Wide Web Consortium (W3C) weiterentwickelt, ist aber mittlerweile zugunsten von XHTML aufgegeben worden.

Überblick

Namensgebend sind die Hypertext-Elemente, die zum Verweis auf andere Textstellen oder auf ein anderes Dokument dienen. Zur Adressierung anderer Dokumente im Internet werden innerhalb des Dokumentes Hyperlinks verwendet. Dies ist die Grundlage für das World Wide Web. Die Programme, die die Struktur des Dokuments interpretieren und als formatierte Webseiten (eventuell mit Interaktionselementen wie Links oder Formularen) darstellen, werden Webbrowser genannt. Dem Text wird durch Auszeichnung (engl. markup) von Textteilen mit in der Regel paarweisen (öffnenden und schließenden) Tags eine Struktur verliehen. Die jeweils zusammengehörenden Tags bilden zusammen mit dem dazwischenliegenden Text (Inhalt) ein Element. Diese Elemente lassen sich nach Regeln, die in einer Dokumenttypdefinition (DTD) angegeben sind, verschachteln:

Ein Textabsatz, der ein betontes Wort enthält.

Neben Elementen mit Start- und End-Tag gibt es auch leere Elemente, wie etwa Zeilenumbrüche oder Bilder: Eine Textzeile,
die hier fortgesetzt wird.
E-Mail Es geht in HTML um sogenannte logische, nicht um physische Textauszeichnung, auch wenn sich HTML in früheren Versionen dafür verwenden ließ. Das heißt, HTML-Tags sind keine Angaben zur Präsentation, die dem Webbrowser mitteilen, wie er den Text zwischen den Tags visuell zu formatieren hat. Vielmehr sind Tags eine strukturierende Auszeichnung, mit der sich Textbereichen eine Bedeutung zuordnen lässt, z. B.

...

für eine Überschrift,

...

für einen Textabsatz und ... für betonten Text. Wie diese Bedeutung letztlich dem Benutzer vermittelt wird (im Falle eine Überschrift z. B. durch vergrößerte, fette Schrift), ist zunächst dem Webbrowser überlassen und hängt von der Ausgabe-Umgebung ab. Denn obwohl HTML-Dokumente in der Regel auf Computerbildschirmen dargestellt werden, können sie auch auf anderen Medien ausgeben werden, etwa auf Papier oder mittels Sprachausgabe. Um auf die Präsentation eines HTML-Dokuments in verschiedenen Medien Einfluss zu nehmen, eignen sich CSS-Formatvorlagen. Daher gelten Elemente und Attribute zur Präsentation wie ..., ... und width als veraltet und sollten nach allgemeiner Auffassung vermieden werden. Die meisten Elemente und Attribute zur Präsentation wurden in der HTML-4.01-Spezifikation als missbilligt (engl. deprecated) markiert.

Sprachtyp

HTML ist keine Seitenbeschreibungssprache wie etwa Postscript, da keine Papier-Seiten beschrieben werden, sondern Text strukturell und logisch ausgezeichnet wird. HTML ist eine Auszeichnungssprache und wird als solche auch nicht programmiert, sondern schlicht geschrieben. Ein ähnliches Konzept (logische Beschreibung) wie hinter HTML steht hinter dem Satzsystem TeX/LaTeX, das im Unterschied zu HTML jedoch auf die Ausgabe per Drucker auf Papier zielt.

Versionen


- HTML (ohne Versionsnummer, 3. November 1992): Die Urversion, die sich nur an Text orientierte. [http://www.w3.org/History/19921103-hypertext/hypertext/WWW/MarkUp/MarkUp.html Weblink]
- HTML (ohne Versionsnummer, 30. April 1993): Zu Text kommen neben Attributen wie fette oder kursive Darstellung auch die Bildintegration dazu.
- HTML+ (November 1993) Geplante Erweiterungen, die in spätere Versionen einflossen, aber nie als HTML+ verabschiedet wurden. [http://www.w3.org/MarkUp/htmlplus_paper/htmlplus.html Weblink]
- HTML 2.0 (November 1995): Die mit RFC 1866 definierte Version führt u.a. Formulartechnik ein. Der Status dieses Standards ist „HISTORIC“. Auch die Vorgänger sind veraltet.
- HTML 3.0: Die Version erscheint nicht, weil sie mit der Einführung des Netscape-Browsers in der Version 3 bereits vor der Veröffentlichung obsolet ist.
- HTML 3.2 (14. Januar 1997): Neu in dieser Version sind zahlreiche Feature wie Tabellen, Textfluss um Bilder, Einbindung von Applets.
- HTML 4.0 (18. Dezember 1997): Mit dieser Version werden auch Stylesheets, Skripte und Frames eingeführt. Auch eine Trennung in Strict, Frameset und Transitional erfolgt. Am 24. April 1998 erscheint eine leicht korrigierte Version dieses Standards.
- HTML 4.01 (24. Dezember 1999): Ersetzt HTML 4.0 mit vielen, kleineren Korrekturen. Es ist die letzte HTML-Version.
- XHTML 1.0 (26. Januar 2000): Eine Neuformulierung von HTML 4.01 mit Hilfe von XML. Am 1. August 2002 erscheint eine überarbeitete Version.
- XHTML 1.1 (31. Mai 2001): Nachdem XHTML in Module aufgeteilt wurde, wird mit XHTML 1.1 eine strikte Version definiert, bei der die mit HTML 4 eingeführten Varianten Frameset und Transitional entfallen.
- XHTML 2.0 (öffentlicher Entwurf): Diese Version basiert nicht mehr auf HTML 4.01 und führt einige neue Tags ein, so z.B. für Navigationslisten. Die Trennung von Auszeichnung und Stil soll in dieser Version vollendet werden

HTML-Struktur

Allgemeine Struktur

Ein HTML-Dokument besteht aus drei Bereichen: # der Dokumenttypdeklaration ganz am Anfang der Datei, die die verwendete DTD angibt, z. B. HTML 4.01 Strict, # dem HTML-Kopf (HEAD), der hauptsächlich technische oder dokumentarische Informationen enthält, die nicht direkt im Browser sichtbar sind und # dem HTML-Körper (BODY), der anzuzeigende Informationen enthält. Somit sieht die Grundstruktur einer Webseite wie folgt aus: Titel der Webseite Inhalt der Webseite

HTML-Kopf

Im Kopf können sieben verschiedene Elemente angewandt werden: # title bezeichnet den Titel der Seite, der im Browserfenster sowie oft in Suchmaschinen angezeigt wird. # meta kann vielfältige Metadaten enthalten. Siehe Meta-Tags. # base gibt entweder eine Basis-URI an oder einen Basisframe. # link dient zur Angabe von logischen Beziehungen zu anderen Ressourcen. Am häufigsten zur Einbindung von Stylesheets benutzt. # script bindet Code in einer bestimmten Skriptsprache ein, hauptsächlich JavaScript. # style enthält Stylesheet-Code, hauptsächlich CSS-Regeln. # object bindet eine externe Datei ein. Browser dürfen solche Objekte im Dokumentkopf nicht darstellen.

HTML-Körper

Im Wesentlichen unterscheidet HTML zwischen Block- und Inline-Elementen. Der wesentliche Unterschied ist, dass erstere in der Ausgabe einen eigenen Block erzeugen, in dem der Inhalt untergebracht wird, während die Inline-Elemente den Textfluss nicht unterbrechen. Zu den Block-Elementen gehören z.B. die Überschriften und die Tabellen. Eine Hauptüberschrift wird so ausgezeichnet:

Hauptüberschrift

h1 steht für Heading 1. Der Inhalt zwischen den beiden Tags wird nun als Hauptüberschrift interpretiert. Weiter möglich sind h2 bis h6, Überschriften zweiter bis sechster Ordnung, mit denen sich die Gliederung einer Seite verdeutlichen lässt. Die Präsentation dieser Überschriften ist von ihrer strukturierenden Bedeutung unabhängig und kann mit CSS beeinflusst werden. Die Zweckentfremdung der Überschrift-Elemente zur Vergrößerung von Text wird allgemein als Missbrauch angesehen. Hyperlinks: Hyperlinks sind Verweise auf andere Dateien, meistens ebenfalls HTML-Dateien, die üblicherweise im Browser durch Klick verfolgt werden können. Gehe zu example.com Hier wird auf die Ressource http://www.example.com/ verwiesen. Der Text Gehe zu example.com wird dabei als Link dargestellt. Zur Logik stehen zum Beispiel die Elemente strong und em bereit, mit denen sich stark hervorgehobener oder betonter Text auszeichnen lässt. Gängigerweise werden strong-Elemente durch Fettschrift und em-Elemente durch kursive Schrift visuell kenntlich gemacht. Die logische Beschreibung der Struktur des Textes, wie sie die obigen Beispielen veranschaulichen, vereinfacht es zum Beispiel, dass der Text auch einem Sehbehinderten vorgelesen oder als Braille ausgegeben werden kann, und ermöglicht Suchmaschinen die Auswertung der Texte unter Berücksichtigung ihrer Bedeutung.

HTML-Varianten

Beim Entwurf der letzten HTML-Version 4 sollte der Tatsache, dass in vielen HTML-Dokumenten noch Elemente und Attribute zur Präsentation eingesetzt werden, Rechnung getragen, aber auch eine stilistisch saubere Dokumenttypdefinition angeboten werden. Das Ergebnis waren schließlich drei Varianten:

Strict

Diese DTD umfasst den Kernbestand an Elementen und Attributen. Es fehlen die meisten Elemente und Attribute zur Beeinflussung der Präsentation, unter anderem die Elemente font, center und u sowie die Attribute bgcolor, width, height und target. Deren Rolle sollen in Strict-Dokumenten Stylesheets übernehmen. Text und nicht-blockbildende Elemente innerhalb der Elemente body, form, blockquote und noscript müssen sich grundsätzlich innerhalb eines Container-Elements befinden, zum Beispiel in einem p-Element.

Transitional

Die Transitional-Variante enthält noch ältere Elemente und Attribute, die auch physische Textauszeichnung ermöglichen. Durch diese DTD soll auch Webautoren, die noch nicht logische Strukturierung und Präsentation voneinander trennen, die Möglichkeit gegeben werden, standardkonformes HTML zu schreiben. Gleichzeitig soll sie sicherstellen, dass bestehende Webseiten weiterhin durch aktuelle Webbrowser angezeigt werden können.

Frameset

Diese Variante enthält zusätzlich zu allen Elementen der Transitional-Variante noch die Elemente für die Erzeugung von Framesets.

Zukunft der Varianten

Mit XHTML 1.1, der neuesten Version von HTML, verzichtet das W3-Consortium wieder auf die Unterscheidung und führt lediglich die Strict-Variante als „reine Lehre“ weiter. Dies setzt sich auch im momentan (2005) im Entwicklungsstadium begriffenen XHTML 2.0 fort. Elemente, die bislang nur in den Varianten Transitional und Frameset vorkamen, werden beinahe alle entfallen. Entsprechende Effekte müssen dann durch CSS, Javascript, XFrames oder andere Methoden erreicht werden, da sie zur logischen Textauszeichnung nicht notwendig sind. Ein Attribut, das aus der Transitional-Variante voraussichtlich den „Sprung“ in XHTML 2.0 schafft, ist das „value“-Attribut bei nummerierten Listenpunkten, das erlaubt, die Nummer des Listenpunktes selbst festzulegen.

Zusatztechniken und Weiterentwicklungen

Stylesheets

Im Laufe der Jahre ist HTML um Elemente erweitert worden, die sich mit der Gestaltung des Dokuments befassen, was der ursprünglichen Idee der Systemunabhängigkeit entgegen lief. Eine Rückbesinnung auf die Trennung von Inhalt (Struktur) und Layout wurde durch die Definition von CSS vorgenommen. So soll das Aussehen des Dokuments in einer separaten Datei, dem sogenannten Stylesheet, festgelegt werden. Dies verbessert die Anpassungsfähigkeit des Layouts an das jeweilige Ausgabegerät und an spezielle Bedürfnisse der Benutzer, z.B. von Sehbehinderten. Heutzutage ist die CSS-Unterstützung der Browser ausreichend, um damit eine anspruchsvolle Gestaltung zu realisieren.

Dynamisches HTML

Schon sehr früh in der Geschichte von HTML wurden Zusatztechniken erfunden, die es ermöglichen, HTML-Dokumente während der Anzeige im Browser dynamisch zu verändern. Die gebräuchlichste ist JavaScript. Man spricht bei solchen interaktiven Dokumenten von dynamischem HTML. Diese Techniken wurden von verschiedenen Browser-Herstellern, allen voran Microsoft und Netscape, unabhängig voneinander entwickelt. Daher gab es erhebliche Probleme bei der Umsetzung der Techniken zwischen den verschiedenen Browsern. Mittlerweile interpretieren alle verbreiteten JavaScript-fähigen Browser das Document Object Model (DOM). Dadurch ist es möglich, in allen Browsern lauffähige Skripte zu schreiben. Es gibt jedoch noch immer Differenzen bei der Unterstützung des DOM-Standards.

XML

Mittlerweile wurde die letzte Version des HTML-Standards (HTML 4.01) in der Metasprache XML neu formuliert. Das daraus entstandene XHTML 1.0 genügt den im Vergleich zu SGML strengeren syntaktischen Regeln von XML, ist aber in seinen drei DTD-Varianten semantisch mit der jeweils entsprechenden DTD-Variante von HTML 4.01 identisch. Aktuell liegt der XHTML-Standard in der Version 1.1 vor, der eine zusätzliche Modularisierung der Elemente einführt. Als zukünftiges universelles Format wird zunehmend XML selbst eingesetzt. Dieses arbeitet ebenfalls mit Tags, die jedoch per Dokumenttypdefinition sehr restriktiv eingesetzt werden können. XML ermöglicht somit ein selbstbeschreibendes Datenmodell. Zur Umwandlung von in XML gespeicherten Daten in die entsprechenden Anzeigeformate (z.B. XHTML) kann die Stylesheet-Sprache XSL Transformation verwendet werden.

Falsche Interpretation von Webdokumenten

Die verbreiteten Browser folgen bei der Auswertung von HTML nicht ganz dem Standard. Dies zwingt Webautoren dazu, ihre Dokumente in verschiedenen Browsern zu testen und gegebenenfalls anzupassen. Eine solche Anpassung an die Gegebenheiten auf der Leserseite ist zwar durchaus von Vorteil, aber häufig kommt es zu schwer umgehbaren Fehlinterpretationen. Durch die wohlüberlegte Verwendung von strukturierendem HTML kann immerhin gewährleistet werden, dass ein Webdokument in jedem Fall zumindest grundlegend zugänglich und lesbar ist. Der am weitesten verbreitete Webbrowser, der Internet Explorer, ist gutmütig und lässt so manchen Fehler durchgehen, hat jedoch insbesondere in CSS-Belangen einige Defizite, welchen Rechnung zu tragen ist. Die Browser mit Gecko-Engine (darunter Mozilla und Mozilla Firefox), Opera, Safari und Konqueror haben hier am wenigsten Probleme, tolerieren Codefehler jedoch weniger.

HTML lernen

SELFHTML ist ein deutschsprachiges und sehr umfangreiches Projekt, das für viele Themen rund um HTML Referenzmaterial bietet. Die Lektüre einer modernen linearen Einführung (siehe Weblinks) und die Handarbeit direkt in einem Texteditor ist empfehlenswert, um HTML richtig zu verstehen und voll auszunutzen. Für schnelle Erstellen von Webseiten ohne tiefere HTML-Kenntnis mag der Gebrauch eines so genannten WYSIWYG-Editors zunächst genügen. Diese Editoren produzieren einen HTML-Code, der die optischen Vorstellungen weitestgehend widerspiegelt. Allerdings wird die strukturelle und logische Auszeichnung, die dem Text erst einen echten Mehrwert gibt, dabei vernachlässigt. Diese erfordert ein gutes Verständnis von HTML, das ein WYSIWYG-Editor nicht ersetzen kann. Hinzu kommt, dass diese Editoren gelegentlich ungültiges HTML produzieren, was die Darstellung des Dokuments von der Fehlertoleranz des Webbrowsers abhängig macht. In der professionellen Webgestaltung werden solche HTML-Editoren daher häufig nur als zusätzliches Hilfsmittel benutzt, um etwa das Grundgerüst von Webseiten zu erstellen. Die Feinarbeit erfolgt dann in einem Texteditor direkt am HTML-Code.

Siehe auch


- XHTML
- CSS
- JavaScript, DHTML
- MHTML (MIME HTML)
- Web Accessibility Initiative, Barrierefreies Internet
- HTML-Editor

Literatur


- Stefan Mintert (Hrsg.): XHTML, CSS & Co. Die W3C-Spezifikationen für das Web-Publishing. Addison-Wesley, München 2003, ISBN 3-827318-726
- Mark Lubkowitz: Webseiten programmieren und gestalten - HTML, CSS, JavaScript, PHP, Perl, MySQL, SVG und Newsfeeds, mit CD. Galileo Press, Bonn 2004, ISBN 3898425576

Weblinks


- [http://www.w3.org/MarkUp/historical Einige Notizen zum Ursprung von HTML] (englisch)
- [http://www.w3.org/MarkUp/ Webpräsenz des Standardisierungsgremiums W3C] (englisch)
- HTML-Standards: [http://www.w3.org/TR/WD-html2/ 2.0], [http://www.w3.org/TR/REC-html32 3.2], [http://www.w3.org/TR/1998/REC-html40-19980424/ 4.0], [http://www.w3.org/TR/html4/ 4.01] (englisch)
- [http://www.edition-w3c.de/ edition W3C.de] Die W3C-Spezifikationen in deutscher Übersetzung und Kommentierung
- [http://de.selfhtml.org/ SELFHTML] Ausführliches Tutorial und Dokumentation
- [http://www.htmlwiki.de/ HTMLWiki] Ein Wiki über HTML und Webauthoring
- [http://www.lingo4u.de/article/checklist/ Checkliste für Webstandards]
- [http://validator.w3.org/ W3C-Validator] zur Überprüfung der syntaktischen Richtigkeit eines HTML-Dokuments (englisch)
- [http://uitest.com/en/analysis/ Verschiedene nützliche Testwerkzeuge], [http://uitest.com/en/check/ Site Check] (englisch) Kategorie:Beschreibungssprachen Kategorie:Datenformat Kategorie:Web-Entwicklung ! ja:Hypertext Markup Language ko:HTML simple:HTML th:HTML

Webbrowser

Webbrowser oder Browser [] (engl. für "Stöberer") sind Computerprogramme zum Betrachten von Webseiten im Internet. Neben HTML-Seiten können sie verschiedene andere Arten von Dokumenten anzeigen. Ursprünglich bezeichnet der aus dem Englischen entlehnte Begriff browsen (engl. to browse = stöbern, sich umsehen, schmökern) am Computer lediglich das Benutzen von Navigationselementen (Vor, Zurück, Index, ...) zum Lesen von Texten. Erweitert wurde dieser Begriff später durch das Aufkommen von Hypertext, bei dem man bestimmte, als Querverweis ("Hyperlink") wirkende Wörter auswählen kann, um zu einem anderen Text zu gelangen. Später kamen dann Funktionen zum Bildbetrachten dazu und auch so genannte verweissensitive Grafiken, bei denen man auf einer Computergrafik einen Bereich (zum Beispiel bei einer Weltkarte) anklickt und dadurch zu einer Seite über ein bestimmtes Land gelangt. Mit dem Trend zu Multimedia wurde der Browser eine der zentralen Schnittstellen auf einem PC. Man kann verschiedene Medien abspielen lassen, wie Musik oder Radio. Zudem lassen sich Programme oder Dateien auf den PC laden, um sie dort zu speichern und gegebenenfalls zu einem späteren Zeitpunkt zu öffnen und auszuführen. Insbesondere die Verbreitung von Breitband-Internetzugängen förderte diese zentralen Funktionen heutiger Browser. Somit verschwimmt zunehmend auch der Unterschied zu einem Dateimanager, der ursprünglich ausschließlich zum Öffnen, Kopieren oder Löschen von Dateien verwendet wurde. Viele Dateimanager haben heute auch Browser-Funktionen (Datei-Browser) und können auch zum Anzeigen von Dokumenten verwendet werden. Neben den unterstützten Dateiformaten wurden auch die Funktionen erweitert. So unterstützen viele Browser neben HTTP auch unter anderem die Protokolle FTP und Gopher. Einige Browser haben auch Funktionen für E-Mail oder Usenet. Andere Browser decken diese Funktionen durch externe Programme ab.

Geschichte

Tim Berners-Lee, ein Pionier der Verwendung von Hypertext, schuf 1990 den ersten Webbrowser unter dem Namen WorldWideWeb auf einer NeXT-Workstation und präsentierte im März 1991 dieses Programm am CERN. Große Verbreitung fanden Browser mit dem NCSA Mosaic, einem Browser mit grafischer Benutzeroberfläche (GUI), der ursprünglich auf Unix lief, aber bald schon auf Apple Macintosh und Microsoft Windows portiert wurde. Die Version 1.0 von Mosaic erschien 1993. Marc Andreessen, der das Entwicklerteam leitete, gründete kurz danach die Netscape Communications Corporation. Netscape brachte seinen Navigator im Oktober 1994 auf den Markt. Aufgrund des Erfolgs des Navigators brachte Microsoft, das bis dahin das Internet unterschätzt hatte, seinen Internet Explorer heraus, der nicht selbst entwickelt, sondern von der Firma Spyglass eingekauft worden war. Dies war der Beginn des so genannten Browserkriegs zwischen Microsoft und Netscape. Eine Folge des Browserkriegs war es, dass Browser sich stark verbreiteten, während andererseits die Konkurrenz zwischen Microsoft und Netscape dazu führte, dass es keine Unterstützung der technischen Standards gab, da beide Firmen in ihrem Wettkampf um Marktanteile selbsterfundene Erweiterungen in ihre Programme integrierten. Ab 1998 ging der Marktanteil von Netscape deutlich zurück - auch weil Microsoft dazu über ging, den Internet Explorer eng mit dem eigenen Betriebssystem Microsoft Windows zu verzahnen. In den folgenden Jahren wurde Microsoft mit einem Marktanteil von über 90 Prozent annähernd zum Monopolisten auf dem Browsermarkt. Netscape reagierte darauf, indem es sich zu einem quelloffenen Projekt veränderte - unter dem Namen Mozilla. Dennoch ging der Marktanteil von Netscape weiter zurück, bis das Unternehmen Ende 1998 von America Online (AOL) aufgekauft wurde. Neue Versionen von Netscape (Netscape 6.0, Netscape 7.0) hatten nur bescheidenen Erfolg. Dafür gewann der Mozilla-Browser ab 2002 langsam aber allmählich Marktanteile zurück, vor allem durch technische Vorzüge und durch Vorteile bei der Bedienung und der Sicherheit. Der Browser Opera, ein kleines und anpassungsfähiges Programm, erschien 1996 und hat sich seither vor allem in Europa eine Nische gesichert.

Arten

Opera Man unterscheidet zwischen textbasierten und grafischen Browsern. Textbasierte Browser können nur einfachen Text und Textformate wie HTML oder XML interpretieren und darstellen. Meist ermöglichen sie Computergrafik-Dokumente abzuspeichern oder mit externen Programmen darzustellen. Textbrowser sind besonders für Blinde nützlich, die das Internet barrierefrei nutzen wollen. Mit ihnen kann Text leicht in Sprache umgewandelt werden. Sie eignen sich besonders zur schnellen Recherche, da Bilder, Werbung u.ä. gar nicht geladen werden. Beispiele für textbasierte Browser: Links, Lynx und w3m. Grafische Browser setzen zumindest ein grafikfähiges Ausgabegerät voraus. Sie sind die meistverwendete Browser-Art und für alle Betriebssysteme mit einer grafischen Benutzeroberfläche (zum Beispiel Windows, Macintosh oder Unix mit X11) verfügbar. Grafische Browser zeigen Inhalte wie Computergrafiken, Filme oder Java-Applets überwiegend selbst an oder benutzen dazu externe Bausteine, so genannte Plugins. Plugin Manche Browser (wie Mozilla oder Opera) werden heute als Browser-Garnitur mit integrierten Funktionen für zum Beispiel E-Mail und Usenet ausgeliefert, andere (wie Internet Explorer und Konqueror) sind kombinierte Browser und Dateimanager. In den letzten Jahren hat eine Gegenbewegung eingesetzt, die sich für Browser ohne solche Zusatzfunktionen einsetzt, wie z.B. Galeon ("the web, only the web") und Firefox. Der marktbeherrschende Browser ist momentan (2005) der von Microsoft produzierte Internet Explorer. Die größten Konkurrenten zu Microsoft im Bereich Browser sind derzeit das Mozilla-Projekt (Mozilla Application Suite, Firefox und Camino), Opera Software ASA (Opera), KDE (Konqueror) und Apple (Safari). In vielen Statistiken wird festgestellt, dass immer mehr Benutzer Firefox oder Mozilla als Alternative zum Internet Explorer verwenden. Eine spezielle Gruppe von Webbrowsern stellen die Robots dar. Dies sind Programme, die das World Wide Web mit bestimmten Aufgaben durchforsten. Beispiele sind Robots für Webcrawler von Suchmaschinen. Moderne mobile Endgeräte (PDAs, Smartphones) verfügen ebenfalls über Browsersoftware, mit denen sie das World Wide Web benutzen können.

Zwischenspeicherung von Internetdateien

Der Browser speichert gegebenenfalls für einen begrenzten Zeitraum Seiten und Bilder auf der Festplatte des eigenen Arbeitsplatzes zwischen, um die Transferleitung von Datenverkehr zu entlasten und um den Seitenaufbau zu beschleunigen. Dabei sind meistens benutzerspezifische Einstellungen möglich, wann diese Daten letztendlich gelöscht werden sollen. Ein Nachteil dieses Verfahrens ist, dass unter Umständen nicht die aktuelle Fassung einer gewünschten Seite angezeigt wird. Es gibt Tastaturbefehle, um die zwischengespeicherten Seiten und Bilder zu löschen und eine aktuelle Fassung der angezeigten Seite zu laden: Mozilla: Strg-R oder Strg-F5, Internet Explorer: Strg-F5 (Strg-R oder einfach F5 aktualisieren die Seite auch, aber nur, wenn sie anhand ihrer Zeitmarkierung als veraltet eingestuft wird), Opera: Strg-R oder F5, Safari: cmd-R, Konqueror: Strg-R

Siehe auch

Liste von Webbrowsern - Browserkrieg - Browserspiele - Cookie - Favicon - Offlinebrowser - URI - Browsersignatur ! Kategorie:Anwendungsprogramm ja:Webブラウザ ko:웹 브라우저 ms:Pelayar web simple:Web browser th:โปรแกรมค้นดูเว็บ zh-min-nan:Bāng-ia̍h liû-lám-khì

Virtuelle Maschine

Eine virtuelle Maschine (VM) ist allgemein ein Modell eines Prozessors und der zugehörenden Systemarchitektur, dessen Rechenweise unabhängig von der technischen Ausführung beschrieben wird. Der Begriff der Maschine für virtuelle Ausführungsmodelle tauchte schon früh in der Entwicklung der Informatik auf, darunter die Turing-Maschine. Im gegenwärtigen Sprachgebrauch wird der Begriff VM zunehmend synonym für VM Systeme verwendet, während die Modelle davon abgrenzend VM Modelle genannt werden. Ein VM System ist ein Computerprogramm (Software), das eine virtuelle Maschine auf einem vorhandenen Prozessor emuliert. Der synonyme Gebrauch des Begriffs virtuelle Maschine für VM Systeme tritt besonders für Emulationssoftware von jenen VM Modellen auf, die dahingehend entworfen worden sind, sich besonders leicht auf realen CPUs emulieren zu lassen, anstatt die Grundlage einer Realisierung in Hardware zu sein. Man nennt diese plattformunabhängigen Modelle genauer portable VMs. Es gab immer wieder Versuche, auch die besonders portablen VMs in Hardware auszuführen, womit deren Ausf