Home   Cover Cover Cover Cover
 

C#

Frage: Welche Prinzipien der Softwaretechnik werden von C# unterstützt? Inwiefern helfen diese Prinzipien bei der Entwicklung großer Softwaresysteme?

Antwort:

  • Typsicherheit. C# ist eine typsichere Sprache, d.h. der Compiler prüft die korrekte Verwendung von Typen in Ausdrücken, Zuweisungen und Methodenaufrufen (auch über Klassen- und Komponentengrenzen hinweg). Bei der Entwicklung großer Softwaresysteme hilft das, Fehler frühzeitig (d.h. zur Übersetzungszeit) zu finden, anstatt erst zur Laufzeit beim Testen. Das senkt die Entwicklungs- und Wartungskosten von Software beträchtlich.


  • Datenabstraktion. C# erlaubt es, Daten und Operationen zu neuen Objekten zusammenzufassen. Die Schnittstellen dieser Objekte können einfach gehalten werden; Komplexitäten der Implementierung können hinter dieser Schnittstelle verborgen werden (Information Hiding). Das hilft bei der Entwicklung großer Softwaresysteme, indem es Entwicklern erlaubt, ihre Daten und Operationen besser zu strukturieren und die Schnittstellen zwischen Objekten klein zu halten. Änderungen an der Software werden dadurch meist lokal gehalten, was die Wartungskosten senkt.


  • Objektorientierung. Objektorientierung ist eine logische Fortführung der Datenabstraktion. Objekte (bestehend aus Daten und Methoden) sind Exemplare von Klassen, die zu Typhierarchien angeordnet werden können. Eine Klasse kann Code von einer anderen Klasse erben, was die Entwicklungszeiten verkürzt: nur jene Teile einer Klasse müssen implementiert werden, die nicht von ihrer Basisklasse geerbt werden können. Interfacetypen können dazu verwendet werden, das Methodenprotokoll zu definieren, das eine bestimmte Klasse unterstützen soll. Alle Klassen, die ein bestimmtes Interface implementieren, garantieren, dass sie die dort spezifizierten Methoden anbieten. Dynamische Bindung ermöglicht es, mit Variablen zu arbeiten, ohne den Laufzeittyp der Objekte zu kennen, die gerade in diesen Variablen gespeichert sind. Wenn der statische Typ einer Variablen eine bestimmte Methode unterstützt, kann diese Methode auf die Variable angewendet werden, wodurch die entsprechende Methode des in der Variablen gespeicherten Objekts aufgerufen wird. Objektorientiertheit hilft, große Softwaresysteme erweiterbar und flexibel zu machen.


  • Komponentenbasierte Programmierung..NET-Assemblies sind Komponenten, die über ihre Schnittstellen verwendet werden. Sie werden in Binärform als *.dll- oder *.exe-Dateien gespeichert und können dynamisch geladen werden. Assemblies können einzeln ausgeliefert und bei Bedarf durch neuere Versionen ersetzt werden. Da Assemblies auch Metadaten (d.h. Typinformationen) enthalten, können sie auch zur Laufzeit mittels Reflection inspiziert und manipuliert werden. Das macht es möglich, ein System aus mehreren Komponenten zur Laufzeit mit Hilfe von Werkzeugen zusammenzubauen.


  • Ausnahmebehandlung.Ausnahmebehandlung ist ein Merkmal, das heute in fast allen modernen Programmiersprachen vorhanden ist. Es erlaubt, den Normalfall (d.h. die fehlerfreie Programmlogik) vom Fehlerbehandlungscode zu trennen. Ausnahmen können in einer Methode ausgelöst und in einem ihrer Rufer behandelt werden. Die CLR sorgt dafür, dass eine Ausnahme, die nicht behandelt wird, zum Abbruch des Programms führt (so dass Fehler nicht ignoriert werden). Große Programme bedienen sich dieser Technik, um Fehler auf systematische Weise zu behandeln.


  • Threading. C# unterstützt leichtgewichtige parallele Prozesse. Verschiedene Aktionen eines Programms können gleichzeitig stattfinden, ohne sich gegenseitig zu blockieren. Der Zugriff auf gemeinsame Daten kann durch Lock-Anweisungen geschützt werden, die eine Implementierung des bekannten Monitor-Konzepts darstellen. Threading ist vor allem bei der Implementierung von Benutzeroberflächen und Serverprogrammen nützlich.