Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode...

24
1 Hier wird Wissen Wirklichkeit Modul: Programmierung B-PRG Grundlagen der Programmierung 1 – Teil 1 – V3 Variablen – Datentypen – Objekte Prof. Dr. Detlef Krömker Professur für Graphische Datenverarbeitung Institut für Informatik Fachbereich Informatik und Mathematik (12) Prof. Dr. Detlef Krömker 2 Hier wird Wissen Wirklichkeit Programmieren 1 – Teil 1 V3 WS 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.

Transcript of Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode...

Page 1: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur oder Routine gebraucht, obwohl eine Funktion, Routine

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.

Page 2: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur oder Routine gebraucht, obwohl eine Funktion, Routine

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

Page 3: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur oder Routine gebraucht, obwohl eine Funktion, Routine

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

Page 4: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur oder Routine gebraucht, obwohl eine Funktion, Routine

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.

Page 5: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur oder Routine gebraucht, obwohl eine Funktion, Routine

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.

Page 6: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur oder Routine gebraucht, obwohl eine Funktion, Routine

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’

Page 7: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur oder Routine gebraucht, obwohl eine Funktion, Routine

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

Page 8: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur oder Routine gebraucht, obwohl eine Funktion, Routine

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.

Page 9: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur oder Routine gebraucht, obwohl eine Funktion, Routine

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.

Page 10: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur oder Routine gebraucht, obwohl eine Funktion, Routine

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.

Page 11: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur oder Routine gebraucht, obwohl eine Funktion, Routine

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

Page 12: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur oder Routine gebraucht, obwohl eine Funktion, Routine

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)

Page 13: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur oder Routine gebraucht, obwohl eine Funktion, Routine

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.

Page 14: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur oder Routine gebraucht, obwohl eine Funktion, Routine

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

Page 15: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur oder Routine gebraucht, obwohl eine Funktion, Routine

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.

Page 16: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur oder Routine gebraucht, obwohl eine Funktion, Routine

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.

Page 17: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur oder Routine gebraucht, obwohl eine Funktion, Routine

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.

Page 18: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur oder Routine gebraucht, obwohl eine Funktion, Routine

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

Page 19: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur oder Routine gebraucht, obwohl eine Funktion, Routine

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

Page 20: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur oder Routine gebraucht, obwohl eine Funktion, Routine

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

Page 21: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur oder Routine gebraucht, obwohl eine Funktion, Routine

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.

Page 22: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur oder Routine gebraucht, obwohl eine Funktion, Routine

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.

Page 23: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur oder Routine gebraucht, obwohl eine Funktion, Routine

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

Page 24: Modul: Programmierung B-PRG Grundlagen der Programmierung ... · Häufig wird der Begriff Methode synonym zu Funktion oder Prozedur oder Routine gebraucht, obwohl eine Funktion, Routine

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