Vergleich von OOPS
Vergleich von OOPS
Vergleich von OOPS
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Vergleich</strong> <strong>von</strong> objektorientierten Programmiersprachen<br />
Java, C++*, C# und Delphi**<br />
<strong>Vergleich</strong> <strong>von</strong> objektorientierten Programmiersprachen<br />
Java, C++*, C# und Delphi**<br />
Konzept Java C++ C# Delphi<br />
Geschichte<br />
Veröffentlichung Java 1: 1995 1985<br />
ISO-Standard seit<br />
1995<br />
2000 1995<br />
Basisdatentypen vorhanden vorhanden werden implizit wie<br />
benutzerdefinierte<br />
Typen behandelt<br />
Boolesche Werte<br />
Zeichensätze<br />
Basisdatentyp<br />
boolean<br />
Unicode (16 Bit<br />
Zeichensatz)<br />
Basisdatentyp<br />
bool<br />
ASCII<br />
Basisdatentyp<br />
bool<br />
Unicode (16 Bit<br />
Zeichensatz)<br />
vorhanden<br />
Basisdatentyp<br />
boolean<br />
ASCII, Unicode<br />
Felder (Arrays)<br />
Zeichenketten<br />
null<br />
Konzept Java C++ C# Delphi<br />
Klassenkonzept<br />
Schnittstellen<br />
Mehrfachvererbung<br />
eigenständiges<br />
Konzept der Sprache<br />
Prüfung der Feldgrenzen<br />
zur Laufzeit<br />
(nicht<br />
abschaltbar)<br />
Klassen String rsp.<br />
StringBuffer<br />
Literal (Schlüsselwort)<br />
eigenständiges<br />
Konzept der Sprache<br />
mit Hilfe <strong>von</strong><br />
Schnittstellen<br />
simulierbar<br />
implementiert mittels<br />
Zeigern, keine<br />
Überprüfungen zur<br />
Laufzeit<br />
eigenständiges<br />
Konzept der Sprache<br />
Prüfung der Feldgrenzen<br />
zur Laufzeit<br />
(nicht<br />
abschaltbar)<br />
Implementiert<br />
(Laufzeitüberprüfung<br />
mittels<br />
Compilierswitches<br />
steuerbar)<br />
Klasse string ?! Basisdatentyp<br />
string<br />
muß definiert werden<br />
mittels abstrakter<br />
Klassen simulierbar<br />
Konzept der Sprache<br />
null<br />
eigenständiges<br />
Konzept der Sprache<br />
(wie in Java)<br />
mit Hilfe <strong>von</strong><br />
Schnittstellen<br />
simulierbar<br />
Schlüsselwort nil<br />
(unklar: COM)<br />
(unklar: COM)<br />
Horst Hansen FHTW Berlin 2008<br />
<strong>Vergleich</strong> <strong>von</strong> <strong>OOPS</strong> 1/10<br />
Horst Hansen FHTW Berlin 2008<br />
<strong>Vergleich</strong> <strong>von</strong> <strong>OOPS</strong> 2/10<br />
<strong>Vergleich</strong> <strong>von</strong> objektorientierten Programmiersprachen<br />
Java, C++*, C# und Delphi**<br />
<strong>Vergleich</strong> <strong>von</strong> objektorientierten Programmiersprachen<br />
Java, C++*, C# und Delphi**<br />
Konzept Java C++ C# Delphi<br />
Speicherung <strong>von</strong><br />
Objekten<br />
Organisation der<br />
Klassen<br />
virtuelle Methoden<br />
Verwendung <strong>von</strong><br />
Methoden der Oberklasse<br />
nur auf dem Heap<br />
Baum (Hierarchie)<br />
(Wurzelklasse<br />
Object)<br />
alle<br />
(late binding)<br />
Schlüsselwort<br />
„super” (nur<br />
direkte Oberklasse)<br />
wahlweise auf<br />
dem Heap oder<br />
dem Stack<br />
DAG mit mehreren<br />
Wurzeln<br />
nur die mit Schlüsselwort<br />
virtual<br />
(early binding)<br />
Aufruf mit vorgestelltem<br />
Klassennamen<br />
(beliebig<br />
tief)<br />
nur auf dem Heap<br />
Baum (Hierarchie)<br />
(Wurzelkalsse<br />
object)<br />
nur die mit dem<br />
Schlüsselwort „virtual”<br />
(wie in C++)<br />
(early binding)<br />
aber mit zusätzlichem<br />
Schlüsselwort<br />
„override”<br />
Schlüsselwort<br />
„base“ (beliebige<br />
Oberklasse)<br />
nur auf dem Heap<br />
Baum (Hierarchie)<br />
(Wurzelklasse<br />
TObject)<br />
Schlüsselwörter<br />
„virtual“ und „override“<br />
Schlüsselwort<br />
„inherited“<br />
Konzept Java C++ C# Delphi<br />
Klassenvariablen und<br />
Klassenmethoden<br />
Parameterübergabe<br />
Konstruktor<br />
Destruktor<br />
Überladen <strong>von</strong> Operatoren<br />
ja ja ja Klassenmethoden<br />
ja, Klassenvariablen<br />
seit .NET<br />
call-by-value<br />
(Basisdatentypen)<br />
call-by-reference<br />
(Objekttypen)<br />
call-by-value, callby-reference<br />
Standardkonstruktor<br />
wird bei Bedarf<br />
vom Compiler<br />
erzeugt<br />
gibt es nicht<br />
statt dessen<br />
Methode „finalize“<br />
call-by-value oder<br />
call-by-reference<br />
Standardkonstruktor<br />
wird bei Bedarf<br />
vom Compiler<br />
erzeugt<br />
notwendig<br />
Schlüsselwörter<br />
„ref” und „out”<br />
Standardkonstruktor<br />
wird bei Bedarf<br />
vom Compiler<br />
erzeugt<br />
andere Syntax für<br />
„finalize“ in Java<br />
nicht möglich möglich möglich für ausgewählte<br />
Operatoren<br />
Standardkonstruktor<br />
notwendig: wird<br />
vom Compiler<br />
erzeugt<br />
seit .NET<br />
Horst Hansen FHTW Berlin 2008<br />
<strong>Vergleich</strong> <strong>von</strong> <strong>OOPS</strong> 3/10<br />
Horst Hansen FHTW Berlin 2008<br />
<strong>Vergleich</strong> <strong>von</strong> <strong>OOPS</strong> 4/10
<strong>Vergleich</strong> <strong>von</strong> objektorientierten Programmiersprachen<br />
Java, C++*, C# und Delphi**<br />
<strong>Vergleich</strong> <strong>von</strong> objektorientierten Programmiersprachen<br />
Java, C++*, C# und Delphi**<br />
weitere Konzepte<br />
ausgeführter Programmcode<br />
Zugriffsrechte<br />
Spezialisierung<br />
Speicherverwaltung<br />
Threads<br />
Konzept Java C++ C# Delphi<br />
Einbinden anderer<br />
Programmkomponenten<br />
Bytecode /<br />
Maschinencode<br />
(JIT) mittels VM<br />
public, „none“, protected,<br />
private<br />
unterbunden durch<br />
„final“<br />
Automatische Garbagecollection<br />
eigenständiges<br />
Konzept der Sprache<br />
Import <strong>von</strong> Paketen<br />
oder Klassen<br />
durch den Compiler<br />
Maschinencode<br />
public, „none“, protected,<br />
private<br />
keine Möglichkeit<br />
explizite Freigabe<br />
erforderlich<br />
nicht in der Sprache<br />
vorhanden<br />
mittels #include<br />
"Datei" und Präprozessor<br />
Common Language<br />
Runtime<br />
(CLR)<br />
public, protected,<br />
private, internal,<br />
protected internal<br />
unterbunden durch<br />
„sealed“<br />
Automatische Garbagecollection<br />
Maschinencode<br />
public, protected,<br />
private, published<br />
?! in Klassenbibliothek<br />
implementiert<br />
wie in Java<br />
Import <strong>von</strong> Units<br />
mittels uses-Klausel<br />
Konzept Java C++ C# Delphi<br />
Modularisierung <strong>von</strong><br />
Programmen<br />
Ein- und Ausgabe<br />
neue Ein- und Ausgabe<br />
Klassen und<br />
Pakete<br />
viele beliebig kombinerbare<br />
spezialiserte<br />
Klassen<br />
wenige Klassen;<br />
effiziente Implementierung<br />
keine bzw. mittels<br />
#include; weiteres<br />
Hilfsmittel sind<br />
Namensräume<br />
wenige einfache<br />
Klassen<br />
n.a.<br />
Laufzeitinformation Reflection-Klassen im Standard<br />
wahrsch. vorhand.<br />
Klassenbibliotheken<br />
gehören zur Sprache<br />
wenige (parametrisierte)<br />
Klassen im<br />
Standard definiert<br />
(Standard Template<br />
Library)<br />
Assemblies und<br />
Namensräume<br />
vorhanden<br />
vorhanden<br />
Reflection-Klassen<br />
Common Base<br />
Library<br />
Units (Unit bildet<br />
eigenen Namensraum)<br />
verschiedene<br />
Stream-Klassen<br />
mittels Funktionen<br />
Visual Component<br />
Library (VCL)<br />
Horst Hansen FHTW Berlin 2008<br />
<strong>Vergleich</strong> <strong>von</strong> <strong>OOPS</strong> 5/10<br />
Horst Hansen FHTW Berlin 2008<br />
<strong>Vergleich</strong> <strong>von</strong> <strong>OOPS</strong> 6/10<br />
<strong>Vergleich</strong> <strong>von</strong> objektorientierten Programmiersprachen<br />
Java, C++*, C# und Delphi**<br />
<strong>Vergleich</strong> <strong>von</strong> objektorientierten Programmiersprachen<br />
Java, C++*, C# und Delphi**<br />
Konzept Java C++ C# Delphi<br />
Unterstützung für<br />
Programme mit graphischer<br />
Benutzerschnittstelle<br />
moderne Konzepte<br />
der objektorientierten<br />
Programmierung<br />
Methoden <strong>von</strong> Objekten<br />
zur Laufzeit veränderbar<br />
sehr umfangreich<br />
nur über Referenzen<br />
auf andere<br />
Objekte<br />
separate Bibliotheken<br />
verwendbar<br />
mittels Funktionszeigern<br />
sehr umfangreich<br />
(.net-Bibliotheken)<br />
mittels „delegates“<br />
sehr umfangreich,<br />
Kernziel <strong>von</strong> Delphi<br />
(RAD Tool)<br />
mittels Funktionsreferenzen<br />
Horst Hansen FHTW Berlin 2008<br />
<strong>Vergleich</strong> <strong>von</strong> <strong>OOPS</strong> 7/10<br />
Konzept Java C++ C# Delphi<br />
Konstanten<br />
Überläufe in der<br />
Ganzzahlarithmetik<br />
Schlüsselwort<br />
„final“<br />
Schlüsselwort<br />
„const“<br />
Unterscheidung<br />
zwischen Compiletime<br />
und Runtime<br />
Konstanten:<br />
Schlüsselwörter<br />
„const“ und „readonly“<br />
nicht behandelbar nicht behandelbar Schlüsselwort<br />
„secure“, generiert<br />
Ausnahme<br />
zur Laufzeit<br />
indexer n.a. n.a. einfacher Zugriff<br />
auf Felder innerhalb<br />
<strong>von</strong> Objekten<br />
properties (mit get<br />
und set)<br />
delegates<br />
nicht direkt unterstützt<br />
nicht vorhanden<br />
simulierbar mittels<br />
Schnittstellen<br />
nicht direkt unterstützt<br />
nicht vorhanden<br />
simulierbar mittels<br />
Funktionszeigern<br />
Sprachmittel<br />
Sparchmittel delegate<br />
Schlüsselwort<br />
„const“<br />
behandelbar (per<br />
Compilereinstellungen)<br />
ja (Schlüsselwort<br />
default)<br />
eigenes Konzept<br />
der Sprache<br />
per Funktionsreferenzen<br />
Horst Hansen FHTW Berlin 2008<br />
<strong>Vergleich</strong> <strong>von</strong> <strong>OOPS</strong> 8/10
<strong>Vergleich</strong> <strong>von</strong> objektorientierten Programmiersprachen<br />
Java, C++*, C# und Delphi**<br />
<strong>Vergleich</strong> <strong>von</strong> objektorientierten Programmiersprachen<br />
Java, C++*, C# und Delphi**<br />
Konzept Java C++ C# Delphi<br />
Konzepte generischer<br />
Datentypen<br />
parametrisierte<br />
Datentypen<br />
generische Containerklassen<br />
generische Algorithmen<br />
seit Java 5 (2005)<br />
Parametrisierung<br />
Nur während der<br />
Compilation<br />
bekannt!<br />
seit Java 5 (2005)<br />
innerhalb der Containerklassen<br />
Templates<br />
Auflösung mittels<br />
eines Compilervorlaufs:<br />
Codevervielfätigung<br />
Standard Template<br />
Library (STL)<br />
(1985)<br />
Standard Template<br />
Library (STL)<br />
(1985)<br />
nicht vorhanden<br />
nicht vorhanden<br />
? nicht vorhanden<br />
? nicht vorhanden<br />
* C++ ist keine objektorientierte, sondern eine „hybride” Programmiersprache. Sie<br />
erlaubt objektorientiertes Programmieren, aber auch imperatives und „vermischtes”<br />
Programmieren!<br />
** Die Angaben in der Spalte „Delphi” stammen <strong>von</strong> Herrn Thomas Burkard, 2005/<br />
2006 Student an der FHTW Berlin.<br />
Horst Hansen FHTW Berlin 2008<br />
<strong>Vergleich</strong> <strong>von</strong> <strong>OOPS</strong> 9/10<br />
Horst Hansen FHTW Berlin 2008<br />
<strong>Vergleich</strong> <strong>von</strong> <strong>OOPS</strong> 10/10