Eigenschaften von Java

Werbung
Java
FH Merseburg WS 04/05
0. Einführung
Java ist eine objektorientierte Programmiersprache, die von Sun
Microsystems entwickelt wurde. Die nach dem Vorbild C++ modellierte JavaSprache wurde mit dem Ziel entwickelt, kompakt, einfach und auf alle
Plattformen und Betriebssysteme portierbar zu sein, sowohl was den
Quelltext als auch die Binärebene anbelangt.
Damit sind Java-Programme, dies können Applets oder auch Anwendungen sein,
auf jeder beliebigen Maschine lauffähig, auf der die virtuelle Java-Maschine
(JVM) installiert ist.
Java wird meist in einem Atemzug mit dem World Wide Web erwähnt, und
Browser wie der Netscape Navigator und der Microsoft Internet Explorer gelten
als »Java-fähig«. Das bedeutet, dass der fragliche Browser Java-Programme, die
sogenannten Applets, auf das System des Benutzers laden und ausführen kann.
Ein Applet ist ein dynamisches, interaktives Programm, das aus dem World
Wide Web in einen Web-Browser heruntergeladen werden kann und in einer
HTML-Webseite abläuft.
Applets erscheinen auf einer Web Page mehr oder weniger wie Grafiken, sind im
Gegensatz zu Grafiken aber dynamisch und interaktiv. Applets können genutzt
werden, um Animationen, Abbildungen, Spiele, Formulare, die sofort auf die
Eingabe des Benutzers reagieren, und andere interaktive Effekte auf einer Web
Page zusammen mit Text und Grafiken zu erstellen.
Java ist jedoch nicht nur eine Programmiersprache für die Appletentwicklung,
sondern eine ausgereifte Programmiersprache, mit der alle möglichen Aufgaben
ausgeführt und die gleiche Art von Problemen gelöst werden können wie mit
anderen Programmiersprachen, z.B. C oder C++.
Eine Java – Applikation ist ein Anwendungsprogramm, für deren Ausführung
kein Browser erforderlich ist. Das können allgemeine Programme sein, wie sie
auf jedem Computer vorhanden sind.
Geschichte
Java wurde von Sun Microsystems 1991 im Rahmen der Entwicklung von
Software für PDAs (Personal Digital Assistent) und Verbraucherelektronikgeräte
wie Fernseher, Videorecorder, Toaster und andere Haushaltsgeräte entwickelt.
Damals wurde mit Java das Ziel verfolgt, eine Sprache zu entwickeln, die
kompakt, schnell, effizient und leicht auf vielfältige Hardware-Systeme portierbar
ist. Keine der damals verfügbaren Sprachen erfüllte diese Anforderungen, denn
der jeweilige Code musste für jeden in Frage kommenden Chip neu kompiliert
werden, und diese waren größtenteils sehr spezifisch und wurden außerdem
häufig aktualisiert. Die PDAs waren damals ein Flop (obwohl sie momentan ein
Comeback haben) und der Markt für Elektrogeräte nutzte die neue Sprache nie
wirklich.
579863115
Seite 1 von 8
Java
FH Merseburg WS 04/05
Das Java-Team entdeckte jedoch, dass das Design der Sprache ideal für einen
anderen Zweck geeignet war: die Programmierung für das Internet. Seit etwa
1993 fand das World Wide Web weite Verbreitung, mit seinen unzähligen
Plattformen und Betriebssystemen, und es brauchte dringend eine
plattformunabhängige
Sprache.
Gleichzeitig
entstand
eine
universelle
Programmiersprache zur Entwicklung von Programmen, die bedienungsfreundlich
und auf verschiedene Plattformen portierbar sind.
Bei Sun wurde die Java-Sprache (unter dem Namen »Oak«) in verschiedenen
Projekten benutzt, erhielt aber bis zur Verknüpfung mit HotJava nicht viel
Aufmerksamkeit im kommerziellen Bereich. HotJava ist ein experimenteller
WWW-Browser, der 1994 (innerhalb weniger Monate) zum Herunterladen und
Ausführen von Applets entwickelt wurde. HotJava stieß zwar auf positive
Resonanz seitens der Web-Gemeinde, jedoch setzte sich Java erst durch, als die
Fähigkeit zur Abarbeitung von Applets in den Netscape Navigator integriert
wurden. Java hat derart an Bedeutung gewonnen, daß Sun unter der
Bezeichnung »JavaSoft« einen eigenen Geschäftsbereich gründete.
Eigenschaften von Java
Java White Papers www.java.sun.com/docs/white/

Plattformunabhängigkeit
Plattformunabhängigkeit bedeutet, daß ein Programm auf jedem beliebigen
Computersystem ausgeführt werden kann. Java-Programme laufen auf jedem
System, auf dem eine virtuelle Java-Maschine installiert ist.
Java ist sowohl auf der Quell- als auch der Binärebene plattformunabhängig. Auf
der Quellebene haben Javas primitive Datentypen konsistente Größen für alle
Entwicklungsplattformen. Die in Java enthaltene umfangreiche Klassenbibliothek
vereinfacht das Schreiben von Code, der von einer Plattform auf eine andere
verlagert werden kann. Plattformunabhängigkeit auf der Quellebene bedeutet,
dass Java-Quelldateien von einem System auf ein anderes überführen, auf
diesem kompilieren und dort ausgeführt werden kann.
Java-Binärdateien sind ebenfalls plattformunabhängig und laufen auf
verschiedenen Plattformen (sofern eine virtuelle Java-Maschine vorhanden ist)
ohne Notwendigkeit, den Quellcode neu kompilieren zu müssen.

Objektorientierung
Objektorientierte Programmierung (OOP) ist eine Technik, zur Entwicklung
flexibler,
modularer
Programme
sowie
zur
Gewährleistung
der
Wiederverwendung des Codes. Javas objektorientierte Konzepte haben viel von
C++, der Sprache, auf der Java basiert, aber auch von anderen OO - Sprachen
geerbt. Java umfasst eine umfangreiche Klassenbibliothek, die grundlegende
Datentypen,
Systemeinund
–ausgabefähigkeiten,
Bibliotheken
für
Netzfunktionen, Internet-Protokolle und Funktionen für Benutzeroberflächen
sowie andere Utilities bietet. Da diese in Java geschrieben wurden, sind sie
ebenfalls auf alle Plattformen portierbar.

Verteilung
579863115
Seite 2 von 8
Java
FH Merseburg WS 04/05
Java verfügt über eine umfangreiche Bibliothek von Routinen für TCP/IPProtokolle wie HTTP und FTP. Java Anwendungen können über das Netz auf
entfernte Objekte zugreifen, als wären sie lokal vorhanden. Servlets und Java
Server Pages machen die serverseitige Verarbeitung sehr effizient.

leichte Erlernbarkeit
Die Sprache sollte kompakt, einfach und damit leicht zu schreiben, zu
kompilieren, zu debuggen und vor allem leichter zu lernen sein. Eine
»kompakte« Sprache bedeutet, daß sie robuster ist, weil das potentielle Risiko,
beim Programmieren schwer abzugrenzende Fehler zu machen, geringer ist.
Java wurde nach C und C++ modelliert. Ein Großteil der Syntax und der
objektorientierten Struktur wurde von C++ entlehnt. Jedoch wurden die
komplexeren Teile dieser Sprachen absichtlich aus Java ausgeschlossen. Dadurch
ist die Sprache einfacher, ohne dass Leistung geopfert wurde. In Java gibt es
z.B. keine Pointer (Zeiger) und auch keine Pointer-Arithmetik. Strings
(Zeichenketten) und Arrays sind in Java echte Objekte. Die Speicherverwaltung
erfolgt automatisch.

Robustheit
Komplexe Features aus C/C++, die schwierig zu handhaben waren, wurden
weggelassen (siehe Unterschiede zu C/C++)
Sprachkonzept (Vergleich mit C/C++)
Merkmal
C++
Java
Methoden /
Funktionen
auch klassenlose
Funktionen möglich
Globale Funktionen
werden immer lokal zu einer
Klasse definiert
Klassenmethoden (benötigen kein
Objekt zur Ausführung und haben
keinen Zugriff auf die
Instanzmerkmale eines Objektes)
Blöcke
{};
{}
Booleanwerte
können als Integer
ausgewertet werden
nur true oder false möglich
Neue
Datentypen
Arrays
Typedef
neue Klasse definieren
Zeiger
Echte Arrays
Strings
Array of char
Instanz der Klasse STRING
Pointer
Vorhanden
Nicht implementiert
Casting
Automatisch
Manuell
Speicherhandlin
g
Manuell
Automatisch (Carbage Collection)
Strukturen und
Unions
Vorhanden
Nicht implementiert
Mehrfachvererb
Möglich
Interfaces
579863115
Seite 3 von 8
Java
FH Merseburg WS 04/05
ung

Sicherheit
Durch die Virtuelle Maschine werden sicherheitsrelevante Prüfungen des
Bytecodes vorgenommen (Bytecode – Verifyer). Ebenso können Java –
Programme nicht auf das lokale Dateisystem zugreifen, keine Verbindung zu
anderen Rechnern im Netz aufbauen oder andere Programme starten.

Multithread - Fähigkeit
Java Programme können in einzelne Prozesse (Threads) unterteilt werden, die
unabhängig voneinander laufen. Dafür sind in Java Methoden der InterprozessKommunikation und der Synchronisation enthalten.
Die Virtuelle Maschine
Beim Kompilieren eines in C oder einer anderen gängigen Sprache geschriebenen
Programms übersetzt der Compiler normalerweise das Programm in
Maschinencode
oder
Prozessoranweisungen.
Diese
Anweisungen
oder
Instruktionen passen spezifisch zum Prozessor eines Rechners.
Die Java-Entwicklungsumgebung umfasst zwei Teile: einen Java-Compiler und
einen Java-Interpreter. Der Compiler erzeugt keinen Maschinencode, sondern
sogenannten Bytecode.
Bytecodes sind Instruktionen, die aussehen wie Maschinencode, die aber nicht
spezifisch an einen bestimmten Prozessor gebunden sind.
Ein Java-Programm wird in einem sogenannten »Bytecode-Interpreter«
ausgeführt, der seinerseits das Java-Programm ausführt. Der BytecodeInterpreter von Java wird auch virtuelle Java-Maschine (JVM) oder JavaLaufzeit-Interpreter genannt.
579863115
Seite 4 von 8
Java
FH Merseburg WS 04/05
Was sind die Vorteile des Bytecode-Prinzips und der VM ???
 ...
Welche Nachteile hat dieses Prinzip ?
 ...
Entwicklungsumgebungen
Um in Java programmieren zu können, benötigt man eine JavaEntwicklungsumgebung. Das Java Developer Kit (JDK) stellt eine solche dar. Es
enthält Werkzeuge zum Kompilieren und Testen von Java - Applets und Anwendungen.
Die Versionen von Java oder Java API, wie es gewöhnlich genannt wird,
entsprechen den Versionen des Java Developer's Kit von Sun.
JDK 1.0.x
 Fehlende Funktionalitäten
 Sicherheitsprobleme
JDK 1.1.x
 Java Archive (JAR)
 Unterstützung des Public Key Verschlüsselungsverfahrens
 Erweiterungen des AWT (Druckeranbindung, Font-Unterstützung etc.)
 Verbesserte Ereignisbehandlung
 Java Beans
 Klasse für mathematische Berechnungen
 SQL-Zugriff auf DB
 Java Native Interface (JNI)
J2SDK 1.2
 Erweiterung der Sicherheitsschnittstelle (Signierung von JAR – Dateien)
 Erweiterte AWT-Funktionalitäten (JFC – Java 2D, UI-Components, Swing etc.)
 Erweiterung des RMI-Konzeptes
 Object Serialization (Objektinhalte in einem Stream)
579863115
Seite 5 von 8
Java



FH Merseburg WS 04/05
Interface Definition Language (IDL)
Java Servlets / JSP
Verbesserte Audio-Unterstützung (MIDI, WAVAIF, AU)
J2SDK 1.3
 Inkrementelle Verbesserungen zu 1.2 -> Performanceverbesserung
J2SDK 1.4
 Reguläre Ausdrücke für Pattern Matching
 Neues E/A – Konzept (skalierbare E/A Operationen für Sockets und Files)
 Neue Deployment Facilities (Web Start Support, DOM (Level2) und SAX Support)
 Encoder/Decoder für Zeichenkonvertierungen
 Verbesserungen im Filehandling (locking, memory mapping)
 JDBC 3.0
 Java Crytography Extension (JCE) / Java Secure Socket Extension (JSSE)
J2SDK 1.5
 Generics - vergleichbar mit Templates, wie in C++ bekannt ist,
 Enumerations - Aufzählungstypen
Java Compiler API - Zugriff auf den Java-Compiler
 Autoboxing - Konvertieren eines primitiven Typs (z.B. boolean, int, short) in
die entsprechende Wrapper-Klasse (Boolean, Integer, Short) wird durch
Compiler realisiert
 Statische Imports - statische Methoden und Konstanten können direkt
importiert und ohne vorangestellte Typangabe genutzt werden
 Neue I/O APIs - Schwierigkeiten in Verbindung mit dem Socket-API bzw.
fehlenden Schnittstellen sowie die nicht mehr ausreichende java.io.FileKlasse führten zur Überarbeitung von IO-Features der Java-Plattform.
 Einfachere Loops - Vereinfachung des Java-Codes wird durch eine
erweiterte Semantik für Loops definiert und dadurch der Quellcode auf die
notwendigen Teile reduziert
 Monitoring und Management Specification der Java Virtual Machine –
bisher fehlen (vor allem Remote) Möglichkeiten zum Laden und Unladen von
Klassen, zum Ermitteln des Speicherverbrauchs, des HotSpot-Status usw.
Ziel ist es, eine Schnittstelle zu schaffen, welche auch zur Laufzeit der
Anwendung (im Gegensatz zu den jetzigen APIs) genutzt werden kann.
Die JDK-Versionen sind aufwärtskompatibel.
JDK Tools (Auswahl):
 java
Java Interpreter
 javac
Java Compiler
 javadoc
 javap
Dissassembler
 appletviewer
 jar
Java Archive Tool
 jdb
Java Debugger
 javakey (1.1)
Digital Signing Tool
 updateAWT
Steigerung der Performanz
 Native Thread Support (Verteilung auf mehrere Prozessoren - Solaris)
 Weniger Speicherverbrauch
 Schnellere Speicherallokation und Garbage Collection
 Native Library
579863115
Seite 6 von 8
Java

FH Merseburg WS 04/05
Integrierte Just-in-Time (JIT) Compiler
Darüber hinaus gibt es verschiedene integrierte Java-Entwicklungsumgebungen
(IDE), die auf unterschiedlichen Versionen des JDK aufbauen. Beispiele sind:
 Forte von Sun,
 Visual J++ von Microsoft !!! --> .net und C#
 JBuilder von Borland/Inprise
 Visual Age von IBM
 Eclipse
Die Entwicklungsumgebungen können in der Regel das jeweils aktuelle JDK
einbinden.
Die meisten Entwicklungsumgebungen sind sogenannte »Two-Way-Tools«, die
den visuellen Programmentwurf und den Quellcode synchronisieren. Alle
Änderungen am visuellen Entwurf gehen automatisch auch in den Quellcode ein.
Alle Änderungen des Quellcodes, die die visuelle Oberfläche betreffen, werden
auch unmittelbar im visuellen Entwurf berücksichtigt. Diese Synchronisierung
ermöglicht eine schnelle, effiziente und einfache Programmentwicklung (RAD –
Rapid Application Programming).
Gegenwärtige Entwicklungen



J2SDK 1.5
Microsoft und „pure Java“/C#
J2EE
Ein Beispielprogramm:
class Motorrad {
String Marke;
String Farbe;
boolean Motorstatus;
void start() {
if (Motorstatus == true)
System.out.println("Der Motor laeuft bereits.");
else {
Motorstatus = true;
System.out.println("Der Motor ist jetzt an.");
}
}
void Eigenschaften() {
System.out.println("Das Motorrad ist eine " + Marke + “Farbe ”+ color + ".");
if (Motorstatus == true)
System.out.println("Der Motor ist an.");
else System.out.println("Der Motor ist aus.");
}
public static void main (String args[]) {
Motorrad m = new Motorrad();
m.Marke = "Yamaha RZ350";
m.Farbe = "Gelb";
579863115
Seite 7 von 8
Java
FH Merseburg WS 04/05
System.out.println("Aufruf Eigenschaften...");
m.Eigenschaften();
System.out.println("Start des Motors...");
m.start();
System.out.println("Aufruf Eigenschaften...");
m.Eigenschaften();
System.out.println("Start des Motors...");
m.start();
}
}
***
579863115
Seite 8 von 8
Herunterladen