|
|
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.
|