1
Hier wird Wissen Wirklichkeit
Modul: Programmierung B-PRGGrundlagen der Programmierung 1 – Teil 1 – V3
Variablen – Datentypen – Objekte
Prof. Dr. Detlef KrömkerProfessur für Graphische DatenverarbeitungInstitut für InformatikFachbereich Informatik und Mathematik (12)
Prof. Dr. Detlef Krömker2 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Rückblick
Wir haben bisher 6 zentrale Grundbegriffe kennen gelernt:
Daten – Information – Wissen
Computer und ihre Leistungsfähigkeit;
Algorithmen und erste Beschreibungsmöglichkeiten
und schließlich der Unterschied zum Programm.
2
Prof. Dr. Detlef Krömker3 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Unser heutiges Lernziel
Daten und Informationen in Programmiersprachen
Begriffe wie Variable, Konstante, Literale; Datentyp, abstrakter Datentyp, Objekte kennen lernen
Zuweisung kennen lernen
Typing und Typwandlung: casting und coercion
Prof. Dr. Detlef Krömker4 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Übersicht
‣ Daten und Informationen in Programmiersprachen
‣ Variablen – Datentypen – Objekte
‣ Typisierung
3
Prof. Dr. Detlef Krömker5 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Daten und Informationen in Programmiersprachen
In einem Programm stehen Anweisungen, die auf Daten operieren.
Wir benötigen in den Programmiersprachen also Sprachkonstrukte, die es uns erlauben, auf Daten zuzugreifen: sie festzulegen (zu definieren), sie zu lesenund wieder zu ändern.
Ziele: ‣ für den Programmierer möglichst einfach und bequem sein, quasi so, wie
wir es aus der Mathematik oder in der Schriftsprache gewöhnt sind. ‣ Fehler (insbesondere Tippfehler und manche Denkfehler) möglichst
frühzeitig vom Compiler/Interpreter erkennen
Diese Forderungen sind gegenläufig und können streng nicht beide gleichzeitigerfüllt werden.
Prof. Dr. Detlef Krömker6 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Rückblick auf V1: Daten und Informationen
‣ Daten sind (maschinen-) lesbare und bearbeitbare Repräsentationen von Informationen
ID ⎯→⎯α D: DatenI: Informationα: Zuordnung: Interpretationsvorschrift
(muss keine Funktion/Relation sein)
⎩⎨⎧
⎯→⎯⎯→⎯
88X 01011000
2
1
α
α Buchstabe
Dezimalzahl
4
Prof. Dr. Detlef Krömker7 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Variablen – Datentypen – Objekte
‣ Bis in die fünfziger Jahre hinein, wurden Computer in Maschinensprache programmiertBefehle nahmen direkten Bezug auf Speicherstellen: Adressen
‣ Namen (Bezeichner, Symbole) für einzelne Speicherzellen
‣ Hierfür wurde alsbald der Begriff Variable üblich.
‣ In Programmiersprachen bezeichnet "Variable" also einen Bezug (Referenz) auf einen (Daten-)Behälter, also eine Speicherzelle.
Prof. Dr. Detlef Krömker8 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Variable
‣ Achtung: In der Mathematik ist eine "Variable" eine Bezeichnung, die in einem Term oder einer Formel vorkommt, z.B. 3u + 2: Platzhalter für einen Wert,
oder in einem funktionalen Zusammenhang der Art y = f(x) x als unabhängige und y als abhängige Variable.
‣ In der Physik bezeichnet man mit "Variable" eine Größe, deren Wert von der Zeit oder einer anderen Größe abhängt.
5
Prof. Dr. Detlef Krömker9 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Ausdrücke und Zuweisung (Beispiel)
Anweisungsfolge wie1. Y = 52. X = 43. X = X/2 + 3*Y
‣ Diese Form (diesen Operator) nennt man Zuweisung (assignment). ‣ Das Gleichheitszeichen hat hier eine besondere Bedeutung‣ Semantik in einer Programmiersprache:
Führe die Anweisungen in der Reihenfolge 1. bis 3. aus, im Einzelnen 1. Weise der Variablen (also der Speicherzelle mit der Bezeichnung X) den
Wert 4 zu.2. Weise der Variablen (also der Speicherzelle mit der Bezeichnung Y) den
Wert 5 zu.3. Berechne den Term (Ausdruck) auf der Rechten Seite, also 4/2 + 3*5
gleich 17 und weise den errechneten Wert 17 der Variablen (also der Speicherzelle mit der Bezeichnung X) zu.
Prof. Dr. Detlef Krömker10 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Beispiel (2)
1. Y = 52. X = 43. X = X/2 + 3*Y
‣ In der Mathematik: diese Schreibweisen als Gleichung auffassenDie 3. Anweisung als Gleichung aufgefasst würde man auflösen zu
X = 6Y, mit „Gleichung 2.“ also Y=1,5.
‣ 1. – 3. als Gleichungssystem aufgefasst wäre widersprüchlich und die Lösungsmenge für X = {}, die leere Menge.
6
Prof. Dr. Detlef Krömker11 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Zuweisungsoperator
Um diese Verwechslungen zu vermeiden, werden in manchen Programmiersprachen als Zuweisungsoperator andere Symbole benutzt, z.B.
= in Python, Java, C, C++
:= in Pascal, Ada
← in APL
Prof. Dr. Detlef Krömker12 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Typisierung
Beispiel:X = ‚ANTON’Y = ‚ & ’Z = ‚BERTA’. U = X + Y + Z
arithmetisch interpretiert macht das keinen Sinn, erst recht nicht dieses auf Datenebene plump zu errechnen.
Vielmehr könnte der Operator + bei Zeichenketten eine Aneinanderreihung bedeuten, also etwa
U = ‚ANTON & BERTA’
7
Prof. Dr. Detlef Krömker13 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Datentypen
‣ Die Bedeutung von Operatoren in Ausdrücken hängt von der Art (=dem Typ, engl. type) der Daten abGleiche Operatorenzeichen (z.B, +) können abhängig vom Datentyp durchaus Verschiedenes bedeuten (In der OOP nennt man das Polymorphie)
‣ Ein Datentyp in der Informatik ist die Zusammenfassung von Objektmengen mit den darauf definierten Operationen.
‣ Dabei werden durch den Datentyp unter Verwendung einer so genannten Signatur ausschließlich die Namen dieser Objekt- und Operationsmengen spezifiziert.
‣ Ein so spezifizierter Datentyp besitzt jedoch noch keine Semantik.
Prof. Dr. Detlef Krömker14 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Abstrakter Datentyp
Ein Abstrakter Datentyp (ADT) ist im wesentlichen durch eine formale Beschreibung seiner Schnittstelle zur Umwelt charakterisiert. Ein ADT ist nur eine Erweiterung des Begriffs „Datentyp“:
Die Defnition des ADT hält sich dabei an folgendes Muster:
‣ Typ/Wertebereich (welche Werte nimmt der ADT an bzw. mit welchen Datentypen geht er um)
‣ Methoden - die Syntax wie mit dem Datentyp gearbeitet wird‣ Axiome - die die Semantik des Datentypen definieren
Man kann auf diese Weise einen Datentyp beschreiben ohne sich um die Details der Implementierung zu kümmern, daher „abstrakt“.
8
Prof. Dr. Detlef Krömker15 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Eigenschaften eines ADTs (1)
‣ Präzise Beschreibung (precise specification): Die Schnittstelle (Interface) muss eindeutig und vollständig beschrieben sein.
‣ Einfachheit (simplicity): Der Anwender muss sich nicht um die innere Realisation des ADT kümmern, da der ADT seine Repräsentation und Verwaltung im Speicher selbst übernimmt.
‣ Kapselung (encapsulation): Das Interface soll als eine hermetische Grenze aufgefasst werden. Der Anwender soll sehr genau wissen, was ein ADT tut, aber keinesfalls, wie er es tut.
Prof. Dr. Detlef Krömker16 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Eigenschaften eines ADTs (2)
‣ Geschütztheit (integrity): Der Anwender kann in die interne Struktur der Daten nicht eingreifen. Die Gefahr, Daten ungewollt zu löschen bzw. zu verändern sowie Programmierfehler zu begehen, ist dadurch deutlich herabgesetzt.
‣ Modularität (modularity): Das modulare Prinzip erlaubt übersichtliches und damit sicheres Programmieren und leichten Austausch von Programmteilen. Bei der Fehlersuche können einzelne Module sehr isoliert betrachtet werden. Viele Verbesserungen können über ADTsnachträglich ohne die geringste Änderung in sämtlichen Umgebungs-bzw. Anwendungsprogrammen übernommen werden.
9
Prof. Dr. Detlef Krömker17 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Beispiel (1)
‣ Eine Signatur ist ein Paar (Sorten, Operationen), wobei Sorten Namen für Objektmengen und Operationen Namen für Operationen auf diesen Mengen repräsentieren.
‣ Eine vereinfachte Version des Datentyps Ganzzahl (Integer), der hier Simple Integer heiße:
Simple Integer Sorten intOperationen empty: -> int
+ : int x int -> int- : int x int -> int
End Simple Integer bisher keine Semantik
Prof. Dr. Detlef Krömker18 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Beispiel (2)
Was ein int ist, wird bisher nirgendwo definiert. Hierzu müsste noch eine Zuordnung des Sortennamens zu einer Menge
erfolgen. zum Beispiel: die Menge der natürlichen Zahlen. Dann wären auch + und - definiert (semantisch) definiert.
Derartige Zuordnungen fallen in den Bereich der Semantik.
Diese Spezifikation würde man in der Mathematik als Algebra bezeichnen.
In der Informatik als abstrakten Datebtyp.
10
Prof. Dr. Detlef Krömker19 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Datentypen in Programmiersprachen
‣ Programmiersprachen bieten eine jeweils spezifische Menge an vordefinierten Datentypen an, wie Ganze Zahlen, Fließkommazahlen oder Zeichenketten
‣ Die Namen dieser Datentypen und die genauen Definitionen der Wertebereiche und der dazugehörigen Operationen unterscheiden sich jedoch zum Teil stark.
‣ Datentypen werden also in der Programmierung verwendet, um Speicherbereichen eine konkrete Syntax und (Teil-)Semantikzuzuweisen.
Prof. Dr. Detlef Krömker20 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Variablen - Konstanten - Literale
‣ Wenn diese Speicherbereiche veränderlich (mutable) sein sollen nennt man sie Variablen oder
‣ die nicht veränderlich Konstanten (constants, unmutable) .
‣ Direkt in der Programmiersprache angegebene Werte für Operatoren nennt man Literale, z.B. 42, 3.14, ‚Anton’, usw.
‣ Man unterscheidet zusätzlich elementare (nicht weiter zerlegbare) und zusammengesetzte (zerlegbar in elementare) Datentypen.
11
Prof. Dr. Detlef Krömker21 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Objekte
Der Begriff Objekt im Kontext der Objektorientierten Programmierung (Abkürzung OOP) .
Aus der Blickrichtung der Datentypen ist OOP eine Variante, bei der zusammengehörige Daten (Attribute) und die darauf arbeitende Programmlogik (Metoden) zu Einheiten zusammengefasst werden, den so genannten Objekten.
Prof. Dr. Detlef Krömker22 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Prozedurales ObjektorientiertesProgrammieren Programmieren
12
Prof. Dr. Detlef Krömker23 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Die Konzeption der Objekte erfolgt auf Basis der folgender Paradigmen (1)
‣ Abstraktion: Jedes Objekt im System kann als ein abstraktes Modell eines Akteurs betrachtet werden, der Aufträge erledigen, seinen Zustand berichten und ändern und mit den anderen Objekten im System kommunizieren kann, ohne offen legen zu müssen, wie diese Fähigkeiten implementiert sind (vgl. abstrakter Datentyp (ADT)).
‣ Kapselung: Objekte können den internen Zustand anderer Objekte nicht in unerwarteter Weise lesen oder ändern. Ein Objekt hat eine Schnittstelle, die darüber bestimmt, auf welche Weise mit dem Objekt interagiert werden kann.
‣ Polymorphie: Verschiedene Objekte können auf die gleiche Nachricht unterschiedlich reagieren. Wird die Zuordnung einer Nachricht zur Reaktion auf die Nachricht erst zur Laufzeit aufgelöst, dann wird dies auch späte Bindung (oder dynamische Bindung) genannt.
Prof. Dr. Detlef Krömker24 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
‣ Vererbung: Neue Arten von Objekten können auf der Basis bereits vorhandener Objekt-Definitionen festgelegt werden. Es können neue Bestandteile hinzugenommen werden oder vorhandene überlagert werden. (ohne Vererbung objektbasierter Programmierung).
‣ Klassen: Klassen sind Vorlagen, aus denen Objekte (Instanzen) zur Laufzeit erzeugt werden. Im Programm werden dann nicht einzelne Objekte, sondern eine Klasse gleichartiger Objekte definiert.
Die Konzeption der Objekte erfolgt auf Basis der folgender Paradigmen (2)
13
Prof. Dr. Detlef Krömker25 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Klassen
sind die Konstruktionspläne für Objekte.
Die Klasse entspricht in etwa einem Datentyp wie in der prozeduralenProgrammierung, geht aber darüber hinaus: sie definiert zudem die Algorithmen, die auf diesen Daten operieren.
Ähnlich zum abstrakten Datentyp (aber realisiert, d.h. konkret!)
Zur Laufzeit eines Programms interagieren einzelne Objekte miteinander: wird als Grundmuster durch die Definition der einzelnen Klassen festgelegt.
Prof. Dr. Detlef Krömker26 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Die Konzeption der Objekte erfolgt auf Basis der folgender Paradigmen (3)
‣ Methoden: Die einer Klasse von Objekten zugeordneten Algorithmen bezeichnet man auch als Methoden.
Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur oder Routine gebraucht, obwohl eine Funktion, Routine oder Prozedur eher als Implementierung einer Methode zu betrachten ist.
‣ Im täglichen Sprachgebrauch sagt man "Objekt A ruft Methode m von Objekt B auf."
‣ Spezielle Methoden zur Erzeugung bzw. "Zerstörung" von Objekten heißen Konstruktoren und Destruktoren.
14
Prof. Dr. Detlef Krömker27 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Objektorientierte Programmiersprachen‣ wie Smalltalk und auch in Python arbeiten nach dem Prinzip alles ist ein
Objekt: auch elementare Typen wie Ganzzahlen (Integer) werden durch Objekte repräsentiert.
‣ Viele Sprachen, unter anderem C++ und Java folgen allerdings nicht der „reinen Lehre“ der Objektorientierung; daher sind dort elementare Typen keine vollwertigen Objekte, sondern müssen auf Methoden und Struktur verzichten.
‣ So wie die prozeduralen Programmierung durch Verfahren wie die strukturierte Programmierung verfeinert wurden
‣ auch Verfeinerungen der objektorientierten Programmierung:‣ Entwurfsmuster (englisch design patterns), ‣ Design by Contract (DBC) und ‣ grafische Modellierungssprachen wie UML‣ Extreme Programming‣ aspektorientierte Programmierung
Prof. Dr. Detlef Krömker28 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Zusammenfassung der Ideen und KonzepteDaten
Adressen Variablen Datentypen abstrakte Datentypen Konstanten (Theorie)Literale
Objekte (Praxis)
(Bezeichner Syntax SemantikNamen, Polymorphie AbstraktionSymbole) Kapselung
KlassenVererbung
15
Prof. Dr. Detlef Krömker29 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Zusammenfassung der Ideen und KonzepteKontrollstrukturen (Vorgriff)
imperativ strukturiertes / modulares objektorientiertesprozedural Programmieren Programmieren
(Sub-)Routinen kein goto (Sprung) MethodenModule Nachrichten
Prof. Dr. Detlef Krömker30 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Typisierung (1)
‣ Eine Typisierung (engl. typing) dient dazu, dass die Elemente und Einheiten der Programmiersprachen, wie z.B. Variablen, Funktionen oder Objekte (im Sinne der objektorientierten Programmierung) nur „korrekt“ verwendet werden können.
‣ Ziel ist es, Programmierfehler der Art „5 + ‚Anna’“ so früh wie möglich zu erkennen, z.B. schon beim Eintippen in einem Syntax-gesteuertenEditor oder im Compiler/Interpreter oder durch das Laufzeitsystem abzufangen, insbesondere um eine Verschleppung von Laufzeitfehlern zu vermeiden.
‣ Diese „verschleppten“ Fehler sind oft sehr schwer zu finden. Ein umgangssprachliches Beispiel für die dahinter liegende Problematik ist, dass man nicht Äpfel mit Birnen vergleichen soll.
16
Prof. Dr. Detlef Krömker31 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Typisierung (2)
‣ Typen liefern Bedingungen, deren Einhaltung bzw. Verletzung bei der Übersetzung oder späteren Ausführung vom Typsystem kontrolliert werden kann und somit eine Maßnahme gegen Programmierfehler darstellt.
‣ Man unterscheidet:starke Typisierung - schwache Typisierung(strong typing) (weak typing)
‣ dynamische Typisierung - statische Typisierung (dynamic typing) (static typing)
Prof. Dr. Detlef Krömker32 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Starke - schwache Typisierung (1)
‣ Bei der starken Typisierung (oder strengen Typisierung) bleibt eine einmal durchgeführte Bindung zwischen Variable und Datentyp bestehen, es wird auch (möglichst) keine implizite Typkonvertierung vorgenommen.
‣ Eine nicht stark typisierte Sprache bezeichnet man als schwach typisiert.
‣ Leider ist das Konzept des strong typing alles andere als eindeutig. In der Literatur finden sich diverse Regeln, die sich teilweise garwidersprechen.
17
Prof. Dr. Detlef Krömker33 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Regeln fürs strong typing
‣ Typüberprüfungen zur Compile-Zeit; ‣ Typkonvertierungen generell verboten; ‣ Typkonvertierungen müssen explizit durchgeführt werden; ‣ die Sprache hat keine Mechanismen, um das Typ-System zu
entgehen, wie etwa type casts (Typumwandlungen) in C; ‣ ein komplexes, fein abgestuftes System an Typen mit Sub-Typen; ‣ das Typ-System muss das Laufzeitverhalten eines Programmes
garantieren.
Versucht man alle bisher in der Literatur aufgestellten Regeln für strongtyping auf bekannte Programmiersprachen anzuwenden, hält keine Sprache dieser Überprüfung stand:
Prof. Dr. Detlef Krömker34 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Vorteile - Nachteile der statischen Typisierung
‣ Vorteile :Der Compiler kennt zu jeder Zeit den Typ eines Wertes (Datums) im
Speicher, d.h. (1) Typfehler können zur Compilezeit, spätestens beim Binden erkannt werden, (2) Compiler erzeugt performanterenCode, weil Typprüfungen zur Laufzeit nicht nötig sind!
‣ Nachteile: (1) Variablen müssen vom Programmierer vor der Benutzung deklariert werden (insbesondere auch die Größe eines zusammengesetzten Datentyps), (2) die Übersetzer sind aufwendiger, weil dort mehr Aufwand für die Analyse anfällt und (3) viele effiziente Programmiertricks auf Datenebene (z.B. ändere einen kleinen Buchstaben „a“ in einen großen „A“, durch Subtraktion von 20(16) sind nicht möglich.
18
Prof. Dr. Detlef Krömker35 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Dynamische - statische Typisierung
‣ Bei der dynamischen Typisierung (engl. dynamic typing) erfolgt die Typzuweisung der Variablen zur Laufzeit eines Programmes durch das Laufzeitsystem, z.B. einer virtuellen Maschine.
‣ Dies erspart es dem Entwickler, die Typisierung „von Hand“vorzunehmen, bringt aber gewisse Nachteile für die Performance und bei der Fehlersuche mit sich.
‣ Bei der statischen Typisierung muss zur Übersetzungszeit der Datentyp von Variablen bekannt sein. Dies erfolgt in der Regel (vor der Benutzung) durch :die Deklaration (Bekanntmachung) der Variable beim Compiler oder Interpreter: Es ist damit zulässig, diese an anderen Stellen im selben Quelltext zu verwenden.
Prof. Dr. Detlef Krömker36 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Vorteile - Nachteile Dynamische Typisierung
‣ Vorteile der dynamischen Typisierung: (1) Auswahl des Operators wird zur Laufzeit entschieden, einfaches Operator overloading und einfacheres → "Generic Programming", (2) Wesentlich kürzere Compile-Zeiten, weil viele Überprüfungen entfallen;(3) Variablen müssen nicht deklariert werden (4) Variable muss nicht an festen Speicherbereich gebunden werden
‣ Nachteile: (1) Typ von Variable/Wert wird zur Laufzeit (jedesmal) überprüft Werte im Speicher müssen (unveränderlichen) Type-Tag haben, also geringere Performance (langsamer!) und mehr Speicherplatz (2) Debugger benötigt wesentlich höhere Funktionalität
19
Prof. Dr. Detlef Krömker37 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Zusammenfassung
‣ static vs. dynamic typing und strong vs. weak typing sind orthogonal zueinander
Prof. Dr. Detlef Krömker38 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
WARNUNG
‣ Leider findet man häufig einen falscher Sprachgebrauch – oder vielleicht auch Unverständnis über diese Konzepte: FALSCH ist:
‣ "strong" = "static und strong",
‣ oder gar: "strong" = "static", "C = strongly typed" ...
20
Prof. Dr. Detlef Krömker39 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Typkonvertierung
Wir unterscheiden in Programmiersprachen grundsätzlich zwei Arten von Typkonvertierungen:
(1) implizite Typkonvertierung oder coercion (engl. Nötigung, Zwang)
(2) explizite Typkonvertierung oder cast(ing) (engl eingießen, formen, werfen, …)
Prof. Dr. Detlef Krömker40 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Implizite Typkonvertierung (1)
finden wir sehr häufig bei Zahlen, Dabei ist eine Regel unterlegt, dass wenn zwei nichtgleiche Zahlentypen miteinander verknüpft werden sollen, zunächst zum allgemeineren (höheren) Typ gewandelt wird, also z.B. eine
natürliche Zahl ganze Zahl reelle Zahl komplexe Zahl
Das kann implizit geschehen, weil Verwechslungen kaum möglich sind und auch keine Informationen verloren gehen
21
Prof. Dr. Detlef Krömker41 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Implizite Typkonvertierung (2)
Fraglich wäre dies aber ggf. in folgendem Falla ist eine ganze Zahl (integer), z.B. 4 b ist eine Zeichenkette (string), z.B. ’22’
Welchen Typ hat dann a + b?
‣ für ganze Zahlen wäre a + b die Addition und das Ergebnis eine ganze Zahl
‣ für Zeichenketten wäre a + b die Konkatenation und das Ergebnis ’422’
In diesen Fällen ist die Typwandlung nicht mehr durch allgemein übliche Konventionen gedeckt und in der Regel auch in Programmiersprachen nicht realisiert.
Prof. Dr. Detlef Krömker42 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Expliziten Typwandlungen (1)
Man unterscheidet prinzipiell drei Arten:
‣ checked: es wird zur Laufzeit überprüft, ob der Zieltyp „mächtiger“ ist als der Quelltyp
‣ unchecked: keine Typüberprüfung zur Laufzeit, ggf. generiert die Hardware eine Fehlermeldung
‣ bit pattern: Daten werden in keiner Weise überprüft, das Bitmuster wird uminterpretiert.
22
Prof. Dr. Detlef Krömker43 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Expliziten Typwandlungen (2)
Jede Programmiersprache hat dabei ihren eigenen Regelsatz:
‣ In Ada: werden die drei o.g. Arten unterstützt
‣ In C/C++: Ein cast ist entweder unchecked oder bitpattern, Informationen gehen ggf. verloren 1,3 wird zu 1
‣ Gerade C++ hat diesbezüglich mehrere verschiedene CastOperatoren:‣ static_cast<type>(value_to_cast)‣ dynamic_cast<type>(value_to_cast)‣ const_cast<type>(value_to_cast)‣ reinterpret_cast<type>(value_to_cast)
Prof. Dr. Detlef Krömker44 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Typwandlung
Wir sehen hieraus, das Typkonvertierung ein mächtiges aber durchaus nicht unproblematische Verfahren ist.
Wir werden das Problem der Typkonvertierung insbesondere an unserer Beispielsprache Python noch mehrfach diskutieren.
23
Prof. Dr. Detlef Krömker45 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Zusammenfassung
Daten und Informationen in Programmiersprachen
Begriffe wie Variable, Konstante, Literale; Datentyp, abstrakter Datentyp, Objekte kennen gelernt
und ganz nebenbei Basiskonzepte des OO-Programmierens kennen gelernt
Typing und Typwandlung: casting und coercion
Prof. Dr. Detlef Krömker46 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Fragen und (hoffentlich) Antworten
24
Prof. Dr. Detlef Krömker47 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V3WS 2005/2006
Ausblick
‣ Numerische Datentypen: allgemein und in Python
‣ Zeichenketten allgemein und in Python
Danke für Ihre Aufmerksamkeit