OOP mit Java: Spracheigenschaften von Java
Spracheigenschaften von Java
Portabilität
Virtuelle Maschine
durch die Definition eines Interpretierers, einer
Virtuellen Maschine
bewährtes Prinzip:
erprobt bei Pascal, Smalltalk, Prolog, TeX, ...
Datentypen plattformunabhängig
die Zahlenbereiche aller ganzen Zahlen sind in der Sprachdefinition festgelegt.
für die reellen Zahlen wird der IEEE-754-Standard zu Grunde gelegt
Objektorientiert
nur objektorientierte Sprachelemente
nicht wie in C++ prozedurale und objektorientierte Sprachelemente gemischt
Kapselung
alle Daten werden nur über Methoden gelesen und verändert
Vererbung
Wiederverwendung und Veränderung von Programmteilen durch Vererbung und Überschreiben von Methoden
Polymorphie
Objekte aus verschiedenen Klassen reagieren auf den Aufruf von gleich aussehenden Methoden unterschiedlich
Interfaces
keine Mehrfachvererbung, aber mehrere Schnittstellen zu einer Klasse
Multithreaded
Threads
zur Ausführung von Coroutinen, zur zeitlich unabhängigen, parallelen Ausführung von Berechnungen.
Synchronisation
mit Hilfe von
Monitore
und
condition variables
(nach C.A.R. Hoare).
Robustheit
keine Zeiger
keine expliziten Zeiger, nur Referenzen auf Objekte
keine expliziten Adressen
automatische Speicherverwaltung
für dynamisch erzeugte Objekte,
garbage collection
Indexüberprüfung
bei Feldzugriffen, nicht abschaltbar
Referenzüberprüfung
bei Referenzieren eines Objekts
Konversionen
keine unsicheren Konversionen,
keine Konversion von
int
nach Zeiger und umgekehrt
Sicherheit
Sicherheit
beim Laden von Programmteilen über das Netz
Bytecode Verifizierung
Authentifizierung
mit kryptografischen Verfahren
Flexibilität
dynamisch
können Programmteile zur Laufzeit dazugeladen werden
flexibel
nur die Teile (Klassen) einer Anwendung, die benötigt werden, werden geladen.
auf Anforderung
on demand
Klassen werden erst dann geladen, wenn sie gebraucht werden
Unterschiede zu C und C++
kein Präprozessor
keine
#define
,
#ifdef ... #endif
und
#include
Anweisungen
keine
typedef
s
keine Strukturen und Unions,
struct
und
union
keine Variablen und Funktionen außerhalb von Klassen
keine Mehrfachvererbung, aber mehrere Interfaces
keine automatische Typumwandlung
keine expliziten Zeiger
keine manuelle Speicherverwaltung für dynamische Datenstrukturen
Letzte Änderung: 14.02.2012
©
Prof. Dr. Uwe Schmidt