Folgerungen:
laut Anbieter |
Kritik |
Einfach |
nur einfacher als C++ |
Objektorientiert |
es gibt bereits genug andere OO- Programmiersprachen |
Verteilbar |
Sicherheit der Quellen |
Interpretierbar |
keine sprachliche Eigenschaft |
Robust |
Sicherheit der Programmausführung |
Sicher |
kritisch |
Architekturneutral |
Ziel jeder höheren Programmiersprache |
Portabel |
Ziel jeder höheren Programmiersprache |
Leistungsstark |
keine sprachliche Eigenschaft |
Multithreaded |
für Client/Server benötigt |
Dynamisch |
Sicherheit der Links |
Folgerungen:
Folgerungen:
Applet Sicherheit:
Sicheres Laden von Klassen:
Sicherheitslücken:
Sicherheitslücken, die bekannt sind, aber nicht viel Schaden anrichten können. Speicherallokation: Anlegen von immer neuen Objekten, so daß Speicher blockiert wird.Verwendung von vielen Threads: Verwaltungszeit wird benötigt. In die Gutmütigkeit des Anwenders vertrauen: "Speichere mich lokal und starte mich erneut."
Übersicht
Sicherheitsdienst |
Mechanismen |
Vertraulichkeit |
Verschlüsselung |
Verhinderung einer Verkehrsflußanalyse |
Verschlüsselung, Fülldaten, Routingkontrolle |
Erkennung der Datenunversehrtheit |
Verschlüsselung, Elektronische Unterschrift, Datenunversehrtheitmechanismus |
Authentifikation des Kommunikationspartners |
Verschlüsselung, Elektronische Unterschrift, Authentifikationsprotokoll |
Authentifikation des Ursprungs der Daten |
Verschlüsselung, Elektronische Unterschrift |
Zugangs- und Zugriffskontrolle |
Zugangskontrollmechanismus |
Urhebernachweis |
Elektronische Unterschrift, Datenunversehrtheitmechanismus |
Empfängernachweis |
Elektronische Unterschrift, Datenunversehrtheitmechanismus |
Integration in Java:
Vergleich |
Java (mit Kommentar) |
C++ |
Zeiger |
nicht vorhanden: sicherer, Fehlervermeidung, weniger Möglichkeiten |
vorhanden |
Zeichen |
Speicherung als 16-Bit-Unicode: Vorteile für internationale Zeichen |
Speicherung als ein Byte |
Zeichenketten |
Unterscheidung in konstante und variable Zeichenketten: Fehlervermeidung |
vorhanden |
numerische Datentypen |
nur vorzeichenbehaftet: Fehlervermeidung, weniger Möglichkeiten |
vorzeichenbehaftete und vorzeichenlose |
Boolsche Werte |
vorhanden: irgendwie logisch |
nicht vorhanden |
Aufzählungstyp, Typdefinition, zusammengesetzte Datentypen und Varianten |
nicht vorhanden: als Objekte formulierbar |
vorhanden |
Folgerung: Die bessere Objektorientierung, die aber bereits Eiffel und Smalltalk haben, und einfachere Handhabung werden durch weniger Möglichkeiten erkauft
Vergleich |
Java(mit Kommentar) |
C++ |
Felder (Arrays) |
Zur Laufzeit wird eine Überprüfung auf korrekten Zugriff innerhalb der Dimensionen des Feldes durchgeführt: Felder werden wie Objekte behandelt, aber Fehler werden vom System überprüft |
statische Feldalloziierung ohne Überprüfung auf Zugriffe außerhalb der definierten Grenzen des Feldes oder dynamisch über Objekte und programmierte Überprüfung |
Mehrfachverer- bung |
nicht vorhanden, nur Klassenerweiterung möglich |
vorhanden |
parametrische Module (Logik des Zugriffs ändert sich nicht [Stack, Liste, Schlange ...], aber für verschiedene Datentypen einsetzbar) |
nicht vorhanden wegen dem Versuch eines statischen Typsystems: Sicherheit wird sich durch Codeökonomie erkauft, größter Mangel |
vorhanden: templates |
Speicherver- waltung |
wird vom System übernommen, Garbage Collection durch Thread im Hintergrund: Fehlervermeidung aber wann erfolgt die Freigabe? |
explizite Freigabe von Speicherblöcken durch den Programmierer |
Typkonversion und -umwandlung |
einschränkt: Sicherheit |
Implizit und Explizit |
Folgerung: Generelle Probleme objektorientierter Sprachen bleiben bestehen (z.B.negative Typrekursion: Die Klasse Dreieck erbt von der Klasse Polygon auch die Methode "Füge Ecke hinzu". Der Verzicht auf sprachliche Mittel (besonders der parametrischen Module) stellt einen Rückschritt dar.
Vergleich |
Java (mit Kommentar) |
C++ |
Namesräume |
Packages, Klassen, Felder: zusammengehörende Klassen sind besser als Ausnahmeregeln |
Global, Klassen |
Thread-Support |
vorhanden: im Netz notwendig um Client/Server zu unterstützen |
nicht vorhanden |
Folgerung: Java ist besser auf Netze ausgerichtet