fit 2002 > Programmmiersprachentypen > die reale Praxis > objektorientierte Sprachen

Überblick

Im folgenden wird die praktische Verwendung von objektorientierten Sprachen am Beispiel von C# - im direkten Vergleich zu Java - besprochen.

C# (ausgesprochen "Sie scharp", im Gegensatz zur Note gleicher Schreibweise) ist eine neue Programmiersprache, eingeführt von Microsoft (namentlich Anders Hejlsberg) gemeinsam mit der Entwicklerplattform .NET. Oberflächlich betrachtet, fällt eine bestechende Ähnlichkeit zu Java auf: enthalten sind Sprachmittel wie Einfachvererbung, Interfaces (Schnittstellen), eine nahezu identische Syntax und Übersetzung in Zwischencode (Bytecode) im Gegensatz zu echtem Maschinencode. Um sich von Java zu distanzieren, borgt C# Designmuster von Delphi, eine direkte Integration mit COM (Component Object Model) und nicht zu letzt seine Schlüsselrolle in Microsofts .NET-Framework. Microsoft zufolge wurde die Sprachdefinition von C# hauptsächlich von C und C++ abgeleitet, und dies schlägt sich in vielen Sprachelementen nieder. C# ist mächtiger als Java in Bezug darauf, wovon geerbt werden kann (z.B. C-type structs), und fügt auch eigene neue Features wie Source Code Versioning hinzu. Trotz Microsofts Schweigen zu dem Thema ist C# Java ähnlicher als jede andere Sprache. Eine Reaktion wie diese muss jedoch vermutlich erwartet werden man nehme nur den Erfolg der letztgenannten Sprache und die Produktivitätssteigerungen über C++, wie von Unternehmen geschildert, die sie einsetzen. Am deutlichsten spiegelt sich der Durchsatz und Erfolg von Java wider in der Anzahl der Programmierer, die sie einsetzen: laut letzten Schätzungen wird sie weltweit von 2½ Millionen Programmierern verwendet. Die Anzahl der Applikationen, die über die Sprache entstanden sind, ist gewaltig und ist in fast jeden Bereich der Informatik vorgedrungen, von Haushaltsgeräten bis hin zu Mobiltelefonen (man erinnere sich an den Start von Java-Phones in Japan). Die große Frage ist nun: Kann C# diese Stufe an Akzeptanz unter den Anwendern erreichen? Man wird abwarten und beobachten müssen, wie von Kalpathi S. Suresh, Vorsitzendem und CEO von SSI Ltd. Auf den Punkt gebracht: "I find all these incremental. If C# isn't there, we could always get (back) to Java or C and C++. These are not exactly new technologies; they are more of marketing hype created by big companies. We'll have to give them time to settle and see if these will really have any impact on the IT industry."

Von Java "geborgte" Spracheigenschaften

  • Klassen. Klassen werden in C# sehr ähnlich wie in Java deklariert. Das macht durchaus Sinn; Erfahrung lehrte uns dass das Java-Modell relativ gut funktioniert. Das Java-Schlüsselwort "import" wurde durch "using" ersetzt (bekannt aus der C++-Welt), erfüllt jedoch dieselbe Funktion wie in Java. Der Punkt, an dem Klassen ihre Ausführung beginnen, ist die static Main()-Methode, wie folgendes (einfaches) Beispiel illustriert: using System; class Hello { static void Main() { Console.WriteLine("Hello, Tom”); } } In diesem Beispiel bezieht sich der Name System auf einen Namespace, der eine Menge an grundlegenden C# utility-Klassen verwendet. Ebenfalls enthalten ist die Console-Klasse, welche hier verwendet wird um einen String auszugeben.
  • Klassen können abstract deklariert werden: Abstrakte Klassen können nicht instanziert werden, sondern lediglich als Basisklassen für Vererbungshierarchien verwendet werden.
  • Interfaces: wie in Java ist ein Interface eine abstrakte Definition einer Menge von Methoden. Klassen, die ein Interface implementieren, müssen alle im Interface definierten Methoden implementieren. Eine Klasse kann mehrere Interfaces implementieren.
  • Boolsche Operationen: Konditionale Ausdrücke liefern ein Resultat vom Datentyp bool, einem eigenen Datentyp in der Sprache. Es gibt keine direkte Umwandlung zwischen bool und irgendeinem anderen Datentyp.
  • Fehler: Wie in Java (und in C++) können Objekte zur Fehlerbehandlung geworfen (throw) und gefangen (catch) werden.
  • Speichermanagement: das darunterliegende. NET-Framework übernimmt das automatische Speichermanagement (wie der Java-GarbageCollector).

Von C/C++ geborgte Spracheigenschaften

  • structs: ein C#-struct verhält sich wie ein C++-struct, indem es sowohl Daten als auch Methoden enthalten kann. Structs können auch Interfaces implementieren. Jedoch gibt es Unterschiede zwischen structs und Klassen (z.B. kann von structs nicht geerbt werden).
  • Präprozessor: es gibt Präpozessor-Direktiven für bedingte Übersetzung, Warnungen, Fehler, and Zeilenkontrolle. Die verfügbaren Direktiven sind: #define #undef #if #elif #else #endif #warning #error #line[] Im Gegensatz zu C/C++ gibt es keine #include-Direktive. Weiters können mithilfe der #define-Direktive keine Werte zugewiesen; somit gibt es auch keine Quellcode- Ersetzung.
  • Überladen von Operatoren: einige Operatoren können überladen werden, andere nicht. Insbesondere können keine Zuweisungsoperatoren überladen werden. Überladbare unäre Operatoren sind: + - ! ~ ++ -- true false. Überladbare binäre Operatoren sind + - * / % & | ^ << >> == != < > <= >=

C#-features

  • intermediate language (Zwischensprache): Microsoft ist sehr flexibel, wann MSIL zu reinem Maschinencode übersetzt wird. Dem Unternehmen ist es sehr wichtig zu betonen, C# werde nicht interpretiert, sondern in Maschinencode übersetzt. Es ist bekannt, dass viele Programmierer die Tatsache akzeptieren, dass Java-Programme grundsätzlich langsamer laufen als alles, was in C geschrieben ist. Microsofts Strategie ist somit offensichtlich zu betonen, dass MSIL höhere Performance bietet als Java Bytecode. Jedoch machen die Verfügbarkeit von Just-In-Time-Compilern für Java die beiden Sprachen relativ gleichwertig bezogen auf Performance. Behauptungen wie "C# wird übersetzt, und Java wird interpretiert" sind Marketing-Gewäsch - Java Bytecode und MSIL sind beides assembler-artige Zwischensprachen die in Maschinencode übersetzt werden, sei es zur Laufzeit oder einem anderen Zeitpunkt.
  • grundlegende Datentypen: Es gibt mehr grundlegende Datentypen als in Java, C oder C++. Verfügbare Typen sind bool, byte, ubyte, short, ushort, int, uint, long, ulong, float, double und decimal. Wie in Java haben alle Typen dieselbe Größe. Wie in C/C++ gibt es signed/unsigned-Varianten. Wie in Java enthält ein char einen 16-bit Unicode Character. Neu ist hingegen der decimal-Typ, der bis zu 28 Ziffern zur Basis 10 enthalten kann.
  • COM – Intgration: dergrösste Vorteil für Windows-Programmierer dürfte die nahtlose Integration von COM, Microsofts Win32 Komponentenmodell, sein. Schlussendlich soll es möglich sein, COM Clients und Server in jeder beliebigen.NET-Sprache zu schreiben. C#-Klassen können von existierenden COM-Componenten abgleitet sein; die resultierente Klasse kann ebenfalls als COM-Komponente verwendet werden und ihrerseits zB in Jscript abgeleitet werden um eine dritte COM-Komponente zu generieren.
  • Delegates, Callbacks: delegierte Objekte beinhalten Informstionen um eine bestimmte Methode eines bestimmten Objekts aufzurufen. Der Delegate kann an einen anderen Ort übergeben werden und an dieser Stelle verwendet werden, um einen typ-sicheren Aufruf für diese Methode zu bewirken. Callback- Methoden sind Beispiele für Delegates. Das event-Schlüsselwort wird in der Deklaration einer Methode verwendet, die als Delegate aufgerufen werden soll wenn ein bestimmter Event auftritt.

Concolusio

Die Ähnlichkeit von C+ mit C++ und Java ist von großem Vorteil, insbesondere für jene Unternehmen, die bereits eine Anzahl an ausgebildeten Programmieren der beiden Sprachen beschäftigen. C++ - Programmierer werden C# ohne Schwierigkeiten verstehen. Darüber hinaus werden Windows-Programmierer, die sich bereits eingehend mit Java beschäftigt haben, sich noch schneller in C# zuhause fühlen. Grundlegender Slogan in der Welt der Programmierer: "Wer Java gelernt hat und C++ kann, kann bereits 90% von dem, was er für C# braucht".

Weiterführende Informationen


>[c#]
C# - Introduction and Overview
>[java] Java Technology - An early history

>Entstehungskontext | Konzepte und Techniken | Entwicklung und Auswirkungen | Praxis | Bewertung