Objektorientierte Programmierung mit C#

Vorwort
Im Laufe der letzten 21 Jahre habe ich grob geschätzt 25-30k Zeilen Quelltext geschrieben und das in den unterschiedlichsten Sprachen - für einen ITler, der die Programmierung jahrelang nur als Hobby und später nie zum alleinigen Schwerpunkt hatte, ist das sicherlich nicht schlecht. In die Schätzung eingeflossen sind auch tausende Zeilen aus heutiger Sicht hochgradig ineffizienten (Basic-)Codes meiner ersten Programmierschritte. Dafür fanden sich in meinem Programmierstil seit jeher nur wenige Leerzeilen, Kommentare in Extrazeilen und auch kurze zusammengehörige Befehle (z.B. if … then … else ; ) schreibe ich oft in nur einer Zeile, was die Zeilenzahl noch etwas aufwertet. ;) Ein kleiner Teil meine Quelltexte ist u.A. hier auf proteino.de veröffentlicht - gut möglich, dass in Zukunft gelegentlich die ein oder andere C#-Zeile hier online geht.

Der erste Eindruck von Visual C#
Dennoch hatte ich mich in all der Zeit, von einigen Minianpassungen an vorhandenem Code abgesehen, nie wirklich umfangreich mit C# beschäftigt. Hintergründe dafür sind einerseits meine Vorliebe zur extrem sauberen, gut lesbaren und schnellen Hochsprache Pascal, andererseits aber eben auch die Herkunft von C# mit den zugehörigen Nachteilen. Diese Sprache stammt schließlich von Microsoft und ist daher auch auf Windows optimiert. Immerhin, man hat die Option, den Code mittels Mono auf Linux/Unix zu portieren. Ob dann auch wirklich jedes Objekt wie erwartet funktioniert, habe ich nicht getestet, da sind aber zumindest optische Unterschiede zu erwarten. Für Visual C# spricht, dass für so manche Anwendung ohnehin eine Windowslösung genügt, da die Mehrzahl der “normalen” Arbeitsplätze noch immer auf Windows basiert. Eine der weiteren großen Schwächen der Microsoft-Entwicklungsumgebungen hat sich in den letzten Jahren ebenfalls nahezu in Luft aufgelöst, denn die IDE ist schon sehr gut und der Compiler ebenfalls Spitzenklasse. Auch einer der größten früheren Nachteile z.B. gegenüber Borland-IDEs ist beseitigt: Die (online-)Hilfe zu den Microsoft-Sprachen ist inzwischen wirklich hervorragend.

Da ich für ein aktuelles Projekt eine Komponente benötige, die mir Lazarus derzeit nicht bieten kann (es gibt nur externe C-Header und die sind mit stinkenden Pointern übersäht), bestand ein guter Grund, sich jetzt endlich intensiv mit C# zu beschäftigen. Um es kurz zu fassen: Ich bin sehr positiv überrascht. Es gibt einige sehr schöne Komponenten, die man bei Lazarus nicht findet und auch in früheren Visual/Borland C++ -Umgebungen nicht enthalten waren. Andererseits bietet Lazarus aber auch Dutzende von wirklich guten und vielfältigen Komponenten, die man bei Visual C# (Express) nicht findet. Der Compiler scheint sehr gut und effizient zu laufen. Bereits während der Laufzeit bekommt man Fehler angezeigt und seit einigen Jahren schafft Microsoft es sogar, die Fehler recht zuverlässig an der Stelle anzuzeigen, wo sie sind und auch die Fehlerursache wird korrekt und meist gut verständlich benannt. Wer sich noch an Visual Studio von vor ca. 10 Jahren erinnern kann, weiß, dass C-Entwicklung mit Microsoftumgebungen ein Alptraum war und es hat wirklich lange gedauert, bis sich dies spürbar besserte. Der Compiler selbst erzeugt stabile und (Dank der externen .NET-Bibliotheken) sehr kleine ausführbare Dateien. Bei einem Punkt hinkt die IDE aus Redmond dem Stand der Zeit allerdings noch weit hinterher: Die Möglichkeiten der Codefaltung sind sehr mäßig und liegen Welten hinter den Fähigkeiten von Lazarus oder auch dem Programmers Notepad. Letzteres kann natürlich bei den Vorschlägen zu Objekten, Funktionen und Variablen nicht mit den integrierten IDEs mithalten und ist eher für bestimmte Dinge wie z.B. Softwareentwicklung für Mikrocontroller oder auch Webentwicklung mittels html/php die perfekte Lösung. Die inzwischen erreichten Fähigkeiten der Visual-IDE haben letztes Jahr auch den Weg zu Atmel gefunden. Sowohl das im letzten Jahr erschienene AVR Studio 5, als auch die inzwischen als Beta vorgestellte 6er Version basieren auf der IDE aus Redmond.

Einstieg oder Umstieg - es ist nicht schwer
Bleibt die Frage, wie schnell man in die Sprache reinkommt. Nun, wer sich mit objektorientierter Programmierung auf der Basis der gängigen Forms-Objekte auskennt, hat schon den halben Weg geschafft. Dabei spielt es keine Rolle, ob man diese Objekte zuvor mittels einer C/C++ - IDE oder mittels Delphi/Lazarus genutzt hat. Die zweite Voraussetzung für einen direkten Ein-/Umstieg ist die Kenntnis der typischen C-Syntax und die beherrscht wohl jeder, der entweder in C/C++ oder auch in PHP bereits umfangreich programmiert hat. Vor allem muss man sich unter C# nicht mehr mit Pointern herumplagen - diese lassen sich, wie auch unter Pascal, zwar nutzen, aber auch problemlos und vor allem standardmäßig vermeiden. Kann man beide Punkte bei den Vorkenntnissen abhaken, ist der Umstieg ein Kinderspiel, denn gute 90-95% der Einarbeitung sind damit über andere Sprachen bereits erledigt.

Hat man nur wenig Programmiererfahrung oder will man C# gar als erste Sprache erlernen, so ist dies ähnlich einfach, wie (Objekt-)Pascal. Es gibt unzählige gut erklärte Beispiele, wie bereits erwähnt, eine hervorragende Entwicklungsumgebung mit sehr guter Online-Hilfe und ohnehin sind viele der Objekte recht intuitiv mittels IDE zu ändern und auch die Verwendung der Objekte im Code ist alles andere als Hexenwerk. Was man nicht hin bekommt, erklärt einem meist schon einer der ersten Treffer einer Anfrage an Tante Google oder Onkel Bing. Insofern kann diese Sprache wirklich von jedem zu logischem Denken befähigten Menschen leicht erlernt werden.

Einen kleinen Beispielquelltext zur Verwendung von dynamisch generierten Forms-Objekten stelle ich im nächsten Artikel heute noch online. Inhaltlich wird das nichts spannendes an Algorithmen bieten, es zeigt aber wie einfach und verständlich sich interessante Ansichten erstellen lassen.

Was könnte man gegenüber anderen Sprachen vermissen?
Mir fielen bisher vor allem zwei Punkte auf. Zum ersten ist es (ohne zusätzliche Bibliotheken mit etwas Aufwand) nicht möglich, Assembler direkt in den C#-Code einzufügen und zweitens verbietet C# es grundsätzlich, Unterfunktionen zu nutzen. Innerhalb der Forms-Klasse sind nur ebenbürtige Funktionen zugelassen, die oft sehr hilfreichen Unterfunktionen sind schlichtweg nicht nutzbar. Grund dafür war wohl, dass mancher Programmierer durch extreme Verschachtelungen erfolgreich unlesbaren Code erzeugt hat …
Als Fazit lässt sich sagen, dass Visual C# in einigen Punkten eine durchaus interessante Alternative zu Pascal-Umgebungen ist und für die Anwendungsentwicklung auf jeden Fall wesentlich empfehlenswerter ist, als das “verpointerte” C++.

Einen Kommentar schreiben