30.10.2013 Aufrufe

Vergleich von OOPS

Vergleich von OOPS

Vergleich von OOPS

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!