Das Konzept implizit typisierter Variablen und Dynamic Objects mit Bezug auf deren Umsetzung in C# 4.0


Seminar Paper, 2010
19 Pages, Grade: 1,3

Excerpt

Inhaltsverzeichnis

1. Einleitung

2. Das Typsystem in der Programmiersprache C#

3. Implizit typisierte Variablen
3.1. Typinferenz als Basis implizit typisierter Variablen
3.2. Entwicklung in der Programmierung
3.3. Implementierung in C#
3.4. Beurteilung des Konzepts

4. Dynamisch getypte Variablen
4.1. Statische Typisierung
4.2. Prinzip dynamischer Objekte
4.3. Implementierung in C#
4.4. Beurteilung des Konzepts

5. Die Konzepte im Vergleich

6. Schlussbetrachtung

Literaturverzeichnis

A. Schriften:

B. Internetquellen:

„Well-typed programs cannot go wrong"

Robin Milner, 19781

1. Einleitung

C# gehört zu den in letzten Jahren meistverwendeten Programmiersprachen. Die Sprache bleibt nicht auf einem Punkt stehen. Mittlerweile ist die Version 4.0 eingeführt worden und der Sprachumfang wächst mit jeder neuen Version. Die ansteigende Funktionalität und der in den Vordergrund rückende Komfort steigern die Mächtigkeit von C# mit jeder Version. Der Grundgedanke den C# von Anfang an verfolgt, eine stark typisierten Sprache mit der Gewährleistung einer hohen Typsicherheit, soll bestehen bleiben.2 C# wurde konzipiert, um robuste und langlebige Komponenten entwickeln zu können, die die Bewältigung des realen Lebens erleichtern. Die Komponenten bilden den Mittelpunkt für alle Objekte und stellen die Kernelemente der Sprache. Robustheit und Langlebigkeit der Software sind wichtige Aspekte, die monatelang laufende Webserver ohne außerplanmäßige Neustarts ermöglicht haben. Gerade die einfache, sichere und intuitive Umgebung sowie eine Fehlerbehandlung die Ausnahmebehandlungen ermöglicht, haben dazu beigetragen. Die wichtigste Voraussetzung dafür liegt in der Typsicherheit der Sprache. Sie schützt den Programmierer vor unsicheren Typumwandlungen, vor nicht initialisierten Variablen und anderen häufig auftretenden Programmierfehlern.3 In dem Entwicklungsprozess von C# und mit dem Erscheinen neuer Versionen hat sich an der Typisierung in C# grundlegendes verändert. Ab Version 3.0 ist die Verwendung implizit typisierter Variablen erlaubt. In Version 4.0 wurde mit den dynamischen Objekten noch einen Schritt weiter gegangen. Die vorliegende Seminararbeit soll einen Einblick in diese zwei Konzepte geben und sich mit deren Herkunft und Funktionsweise auseinander setzen. Die Frage bei der Beurteilung der Innovationen ist, ob und warum Veränderungen in dem Typsystem durchgeführt wurden. Die Begründung der Vorteile ist genauso maßgeblich, wie das Aufdecken von Nachteilen. Der zusammenfassende Vergleich ermöglicht einen Überblick, wann implizit typisierte Variablen oder dynamische Objekte eingesetzt werden können. Dabei ist der Grundgedanken von C#, die Entwicklung langlebiger und robuster Programme, zu bewahren.

2. Das Typsystem in der Programmiersprache C#

Die Konzepte, die in dieser Seminararbeit vorgestellt werden sollen, basieren auf einem Typsystem. Das Prinzip ist bei vielen Programmiersprachen ähnlich, unterscheidet sich im Detail stark. Bevor die Konzepte erläutert werden, soll zunächst ein Überblick über die Verwendung von Typsystemen, das einheitliche Typsystem in C# und dem Typ object als Sonderrolle gegeben werden. Dieser soll grundlegende Voraussetzungen schaffen, die nötig sind, um das Grundgerüst der Typisierung in C# und aufbauende Konzepte nachvollziehen zu können.

In der Programmierung muss Speicher für Daten reserviert werden. Wie viel Speicher benötigt wird, ist abhängig von dem Typ der Daten. Während des Programmverlaufs können Variablen verschiedene Typen annehmen. Dieser legt den Wertebereich einer Variablen fest. In getypten Sprachen können Variablen Typen zugeordnet werden. Ist der Wertebereich nicht eingeschränkt spricht man von einer ungetypten Programmiersprache. Bei diesen Sprachen kommt ein universeller Typ oder gar keine Typen zum Einsatz. Das erlaubt die Verwendung von Operationen auf nicht vorgesehene Argumente. Die Folge können abhängig von der Sprache Exceptions, Fehler bis nicht spezifizierbare Effekte sein. Das Verhindern von Fehlern ist Aufgabe von Typsystemen.4 Typsysteme sind Bestandteile jeder getypten Sprache. Sie überwachen die Variablen, alle Ausdrücke des Programms und die Einhaltung der nach der Programmiersprache spezifizierten Regeln. Ein solches Typensystem findet in C# Anwendung. In der getypten Sprache C# sind wie in anderen Programmiersprachen Typen vordefiniert. Dazu gehören einfache Typen wie Zahlen, Zeichen und boolesche Werte, wobei zwischen den meisten einfachen Typen eine Kompatibilitätsbeziehung besteht.5 Als Referenztypen stehen Strings als Zeichenketten zur Verfügung. Neben den vordefinierten können Typen von den Benutzern definiert werden. An benutzerdefinierten Werttypen bietet C# Enumerationen und Structs. Benutzerdefinierte Referenztypen in Form von Klassen, Interfaces, Delegates oder Arrays sind in C# möglich. Bis zur Einführung von C# 3.0 musste bei der Deklaration einer Variablen eine der zum Beispiel aufgeführten Datentypen bei der Programmierung in C# angegeben werden. Sonst hätte der Compiler einen Kompilierungsfehler ausgegeben.6

In C# sind alle Typen mit dem Typ object kompatibel. Dieser Typ hat in C# eine besondere Bedeutung. Er bildet die Basis für die Typhierarchie und wird vom Compiler auf der Klasse System.Object abgebildet. Alle Typen stammen vom Typ object ab. Er kann auf beliebige Daten zeigen, einschließlich jeder von der Anwendung erkannten Objektinstanz. Die Verwendung von object macht bei Variablen Sinn, bei denen man zur Kompilierungszeit nicht weiß auf welchen Datentyp sie zeigt. Der Zugriff erfolgt typsicher. Das bedeutet in dem Zusammenhang, dass der ursprüngliche Typ der Daten bekannt ist. Wenn eine Zahl als object abgelegt ist, kann auf sie nicht wie auf einen Text zugegriffen werden. Jeder Referenztyp kann in object umgewandelt und in den Ursprung zurückgewandelt werden. Dies betrifft nicht ausschließlich Referenztypen. Werttypen können durch boxing verarbeitet werden.7

Bei einer Zuweisung durch object von Werttypen wird der Wert in ein Objekt einer implizit erzeugten Hilfsklasse eingebunden und der Variablen zugeordnet. Das wird als boxing bezeichnet. Beim unboxing wird der Wert aus dem Hilfsobjekt ausgepackt. Der Vorteil wird bei generischen Container-Typen ersichtlich. Durch das boxing und unboxing kann man diese Typen mit Elementen eines Referenztyps und eines Werttyps bereichern. Das Boxing und Unboxing ist leistungsintensiv.8 Unabhängig vom Datentyp bleibt, dass eine Object-Variable nicht auf den eigentlichen Datenwert zeigt. Der Code zum Lokalisieren der Daten dauert aufgrund des Zeigers bei Werttypen etwas länger, als bei Variablen mit einem expliziten Typ.9

Die Klasse System.Object hat eine Sonderstellung in C#. Alle Klassen in C# sind direkt oder indirekt von dem Wurzelelement System.Object abgeleitet. Durch die in der Klasse System.Object enthaltenen Methoden, die von den Klassen und Structs geerbt werden, können die Methoden auf Objekte mit verschiedenen Typen angewandt werden. Bei boxing-Werten wird der Aufruf von object- Methoden an die eingepackten Objekte weitergegeben. Zu den wichtigsten Methoden gehört GetType. Diese liefert den Typ einer Konstanten, Variablen und eines ganzen Ausdrucks als Objekt des Typs System.Type. Durch die implizite Vererbung benötigen Programmiersprachen vorwiegend keine Klasse zur Deklaration der Vererbung von Object.10

3. Implizit typisierte Variablen

Als erstes soll definiert werden, was Typinferenz in der Informatik bedeutet. Die Typinferenz wurde vor und unabhängig von C# entwickelt. Die Entwicklung wird nachfolgend an einem Beispiel der verwendeten Typüberprüfung in Haskell dargestellt. Anschließend werden Möglichkeit der Implementierung von implizit typisierten Variablen in der Sprache C# aufgezeigt und warum Typinferenz in deren Typsystem eingeführt wurde. Zusammenfassend soll durch Erläuterung der Vor- und Nachteile, die durch dieses Konzept entstehen können, eine Beurteilung der Einführung von Typinferenz in C# versucht werden, die den Umgang mit implizit typisierten Variablen verdeutlicht.

3.1. Typinferenz als Basis implizit typisierter Variablen

Das englische Wort inference ist die Abstammung des Ausdrucks Inferenz. Es kann als Rückschluss oder Schlussfolgerung übersetzt werden.11 In Zusammenhang mit den Typen bedeutet Typinferenz Typrückschluss. Auf die Informatik bezogen heißt das auf einen nicht explizit angegebenen Typ für einen gegebenen Ausdruck rückschließen zu können. Hierzu wird ein Algorithmus zur Hilfe genommen, um auf den richtigen Typ folgern zu können. Das finden eines Algorithmus hier]zu kann schwer oder nicht möglich sein. Der Grund ist die starke Abhängigkeit der Typinferenz von dem jeweiligen Typsystem.

3.2. Entwicklung in der Programmierung

Hindley hat 1969 die Idee der Typinferenz von Curry aus den 1950er Jahren aufgegriffen.12 Milner hat diese Idee aufgegriffen und wird als Innovator der Typinferenz gesehen. Durch die Wiederentdeckung von Milner gab es einen wesentlichen Fortschritt in den Programmiersprachen. Die Folge waren anspruchsvollere Typsysteme, die die Voraussetzung für Typinferenz bildeten. Die Typinferenz lässt sich gut am Hindley-Milner Typsystem, der ursprünglichen Basis moderner Typinferenzen13, veranschaulichen. Dieses System findet zum Beispiel in den Programmiersprachen ML und Haskell Anwendung.

[...]


1 Vgl. Pierce, Benjamin C.: S.11.

2 Vgl. Mössenböck, Hanspeter: S.vii.

3 Vgl. Gunnerson, Eric: Kapitel 1.2.2.

4 Vgl. Grumm, Peter Hans; Sommer, Manfred: S.127.

5 Vgl. Mössenböck, Hanspeter: S.17ff.

6 Vgl. Kühnel, Andreas: Kapitel 8.2.1.

7 Vgl. Roden, Golo: S.19.

8 Vgl. Mössenböck, Hanspeter: S.26ff.

9 Vgl. MSDN Library/Datentyp/Object-Datentyp.

10 Vgl. MSDN Library/System-Namespace/Object-Klasse.

11 Vgl. Duden - Das große Fremdwörterbuch: ƎInferenzƎ.

12 Vgl. http://www.cis.upenn.edu/~bcpierce/types/archives/1988/msg00042.html.

13 Vgl. Pierce, Benjamin C.: S.336.

Excerpt out of 19 pages

Details

Title
Das Konzept implizit typisierter Variablen und Dynamic Objects mit Bezug auf deren Umsetzung in C# 4.0
College
Helmut Schmidt University - University of the Federal Armed Forces Hamburg
Course
Softwareentwicklung
Grade
1,3
Author
Year
2010
Pages
19
Catalog Number
V162772
ISBN (eBook)
9783640782222
ISBN (Book)
9783640782512
File size
466 KB
Language
German
Tags
Konzept, Variablen, Dynamic, Objects, Bezug, Umsetzung
Quote paper
Alexander Rothe (Author), 2010, Das Konzept implizit typisierter Variablen und Dynamic Objects mit Bezug auf deren Umsetzung in C# 4.0, Munich, GRIN Verlag, https://www.grin.com/document/162772

Comments

  • No comments yet.
Read the ebook
Title: Das Konzept implizit typisierter Variablen und Dynamic Objects mit Bezug auf deren Umsetzung in C# 4.0


Upload papers

Your term paper / thesis:

- Publication as eBook and book
- High royalties for the sales
- Completely free - with ISBN
- It only takes five minutes
- Every paper finds readers

Publish now - it's free