Basisinformationstechnologie I 
Universität zu Köln. Historisch-Kulturwissenschaftliche Informationsverarbeitung 
Jan G. W...
Themenüberblick „Programmiersprachen I“ 
Phasen der Programmentwicklung 
 Analyse 
 Spezifikation 
 Entwurf 
 Algorith...
Neulich in den 
Sommerferien…
Analyse
Programmentwicklung: Analyse 
Descartes (1596-1650) 
„Regeln zur Leitung des 
Geistes" (1628): 
 Hohe Relevanz der 
Analy...
Programmentwicklung: Algorithmus 
Spezifikation: Problembeschreibung – im Gegensatz 
zum Algorithmus, der die Lösung des P...
Entwurf
Finden Sie einen Weg aus dem Labyrinth
Entwerfen Sie einen Algorithmus, der Sie aus jedem Labyrinth (mit Ausgang) führt
Terminierung von Algorithmen: 
Wir verlangen (zumeist) von 
Algorithmen, dass sie terminieren, 
d.h. dass sie in endlicher...
Programmentwicklung: Entwurfsphase III 
Pledge-Algorithmus: 
 Prämisse: Wir gehen davon aus, dass alle Ecken rechtwinklig...
Pseudocode 
Pseudocode Pledge-Algorithmus: 
 Setze Umdrehungszähler auf 0; 
 Wiederhole 
 Wiederhole 
 Gehe geradeaus;...
Implementation 
Programmerstellung und Programmiersprachen
Programmiersprachen
Strukturierte Computerorganisation 
Problemorientierte Sprache 
Assemblersprache 
Betriebssystemmaschine 
Befehlssatzarchi...
Programmiersprachen: Klassifizierung 
Maschinennahe Programmiersprache: Assembler 
Beispiel: „Hello World“ : 
DATA SEGMENT...
Programmiersprachen 
Anweisungen, die wir dem Computer geben, werden als Text 
formuliert, z.B.: 
In Python: 
print "Hello...
Programmiersprachen 
Programmtext ist formuliert nach festen Regeln: 
Beispiel C++: 
cout << "Hello World"; 
Die Regeln (G...
Spracheigenschaften und 
Programmierparadigmen
? var beispiel = 23;
Deklaration und Initialisierung 
In JavaScript: 
// Deklaration 
var eineVariable, eineWeitereVariable; 
// Initialisierun...
Typisierung 
Variablen: Behälter / Speicherstelle; Typisierung  Typ 
der Variable 
In JavaScript: 
// Deklaration 
var ei...
Datentypen (C++) 
Einfache Datentypen in C++: 
 bool  Wahrheitswerte 
 int  ganze Zahlen 
 unsigned int  Natürliche ...
Doppelte Genauigkeit…?!?
Paradigmen: 
 funktional 
 objektorientiert 
 prozedural 
 etc. etc. etc.
Programmierparadigmen: Funktionale Programmierung 
var randomize = function( lowerBound, 
upperBound ) { 
if( lowerBound >...
Objektorientierte Programmierung 
Objektorientierte Programmierung [C++, Java] 
 Zentrales Konzept: Objekt 
 Objekt 
 V...
Objektorientierung
Kapselung, Information Hiding, Geheimnisprinzip 
Abb.: Balzert, Heide: Lehrbuch der Objektmodellierung. Heidelberg, 2005.
Zentrales Konzept I: Klassen 
Gleichartige Objekte (Objekte mit denselben 
Operationen und gleichen Attributen) gehören zu...
Klassen in C++  Kapselung / Information Hiding 
class EineKlasse 
{ 
public: // öffentlicher Teil 
EineKlasse() // Konstr...
Notation von Klassen 
Abb.: Balzert, Heide: Lehrbuch der Objektmodellierung. Heidelberg, 2005.
Zentrales Konzept II: Vererbung 
 Eine Klasse kann Elemente (Variablen, Konstanten, Funktionen) von 
anderen Klassen erbe...
Martial Arts Objects (Vererbung) 
Martial Arts Fighter 
attribute 1: name 
attribute 2: gender 
attribute 2: two legs 
att...
Objektorientierte Programmiersprache: C++ 
C++: 
 Ermöglicht maschinennahe Programmierung (Stichw. 
„Zeiger“), als auch a...
Objektorientierte Programmiersprachen: Java 
Java 
 Besonderheit: Java-Programme werden in Bytecode übersetzt, 
anschließ...
/
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
Nächste SlideShare
Wird geladen in …5
×

BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I

600 Aufrufe

Veröffentlicht am

BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I

Veröffentlicht in: Bildung
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
600
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
178
Aktionen
Geteilt
0
Downloads
0
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie
  • Dimmu Borgir = Dunkle Burgen, Dunkle Städte
  • Analyse des gestellten Problems  ToDo: Eine Möglichkeit entwickeln, trotz Dunkelheit einen Weg aus dem Labyrinth zu finden

    Spezifikation: Problembeschreibung – im Gegensatz zum Algorithmus, der die Lösung des Problems angibt

    Beachten:
    Problemkomplex exakt und vollständig beschreiben
    Ein- und Ausgabewerte berücksichtigen (Parameter)
    Randbedingungen bzw. Spezialfälle berücksichtigen
  • Terminierung von Algorithmen
    Wir verlangen (zumeist) von Algorithmen, dass sie terminieren, d.h. dass sie in endlicher Zeit (und möglichst schnell  Performance) ihre Arbeit erledigt haben
    Performanz: Geschwindigkeit der Problemlösung
  • Terminierung von Algorithmen
    Wir verlangen (zumeist) von Algorithmen, dass sie terminieren, d.h. dass sie in endlicher Zeit (und möglichst schnell  Performance) ihre Arbeit erledigt haben
    Performanz: Geschwindigkeit der Problemlösung
  • Grundfrage Algorithmus:
    Existiert ein Algorithmus, der für jedes denkbare Labyrinth, aus dem es einen Ausgang gibt, einen Weg ins Freie findet?
  • Programmiersprache: Eine zum Formulieren von Programmen geschaffene künstliche / formale Sprache
    Warum braucht man so etwas? Darum:
  • compiler
    interpreter
  • Wer prüft zu welchem Zeitpunkt die Grammatik?

    Programmierung häufig mittels Programmierumgebungen (IDE, integrated develompent environment), die Werkzeuge beinhalten:
    Editor
    Compiler
    Debugger (Fehlersuche)

    Beispiele: Microsoft Visual Studio, Qt Creator, Eclipse

    Compiler  Computerprogramm, das ein in einer Hochsprache (C++, etc.) formuliertes Programm, das sog. Quellprogramm in ein Zielprogramm, z.B.:
    Bytecode (Sammlung von Befehlen für eine virtuelle Maschine) oder
    Maschinencode (Instruktionen, die der entsprechende Prozessor (Hardware) direkt umsetzen kann)
    übersetzt

    Compiler / compilierte Sprachen
    kompletter Programmtext wird in eine Folge von Maschinenbefehlen übersetzt, bevor die erste Programmanweisung ausgeführt wird. [C++]

    Interpreter / interpretierte Sprachen
    übersetzt immer nur eine einzige Programmanweisung in ein kleines Unterprogramm aus Maschinenbefehlen und führt dieses sofort aus. Anschließend wird mit der nächsten Anweisung genauso verfahren. [JavaScript, Python]

    Interpreter Pro: Einfacher zu konstruieren als Compiler

    Interpreter Contra: Ein Befehl, der mehrfach ausgeführt wird, muss jedes mal erneut übersetzt werden

  • Dynamische Typisierung
    Paradigmen: Prozedurale, funktionale und objektorientierte (klassenlose) Programmierung
  • Doppelte Genauigkeit…?!?
     Kollisionserkennung / Problem: „Clipping“
  • Funktionale Programmierung: Programme bestehen aus Funktionen.
  • Objektzustand umfasst die Attribute und jeweilige Verbindungen zu anderen Objekten

    Attribute: unveränderliche Merkmale des Objekts; die Attributwerte können Änderungen unterliegen

    Verhalten eines Objekts wird durch eine Menge von Operationen beschrieben; Änderung oder Abfrage des Zustandes ausschließlich durch Operationen
  • Vererbung beschreibt eine Beziehung zwischen einer allgemeinen Klasse (Basisklasse) und einer spezialisierten Klasse. Die spezialisierte Klasse ist vollständig konsistent mit der Basisklasse, enthält aber zusätzliche Informationen (Attribute, Operationen).

    Die allgemeine Klasse wird auch als Oberklasse (engl. super class), die spezialisierte Klasse als Unterklasse (engl. sub class) bezeichnet.

    Das Konzept der Vererbung ist nicht nur dazu gedacht, um gemeinsame Eigenschaften und Verhaltensweisen zusammenzufassen, sondern sie muss immer auch eine Generalisierung bzw. Spezialisierung darstellen, d.h. jedes Objekt der Unterklasse "ist ein" Objekt der Oberklasse.
  • Überprüfung, ob das entwickelte Programm die Problemstellung korrekt und vollständig löst

    Dazu: Ausführung des Programmes mit verschiedenen Eingabewerten und Startzuständen, um möglichst jede Situation abzubilden

    Automatisierte Tests  “Writing automated tests is accepted to produce higher quality code at lower cost.
    More tests == less time spent debugging”
  • BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I

    1. 1. Basisinformationstechnologie I Universität zu Köln. Historisch-Kulturwissenschaftliche Informationsverarbeitung Jan G. Wieners // jan.wieners@uni-koeln.de Wintersemester 2014/15 17. Dezember 2014 – Programmiersprachen I
    2. 2. Themenüberblick „Programmiersprachen I“ Phasen der Programmentwicklung  Analyse  Spezifikation  Entwurf  Algorithmus  Pseudocode  Implementation  Post-Implementation Programmiersprachen  Compiler / Interpreter  Typisierung  Paradigmen  Objektorientierung
    3. 3. Neulich in den Sommerferien…
    4. 4. Analyse
    5. 5. Programmentwicklung: Analyse Descartes (1596-1650) „Regeln zur Leitung des Geistes" (1628):  Hohe Relevanz der Analysephase  Aufteilung in Teil- und Unterprobleme  Hierarchischer Erkenntnisprozess  Analyse der Analyse i.e. Sicherung der Analyse
    6. 6. Programmentwicklung: Algorithmus Spezifikation: Problembeschreibung – im Gegensatz zum Algorithmus, der die Lösung des Problems angibt Algorithmus: Anleitung oder Vorschrift, wie sich ein Problem lösen lässt  Arbeitsdefinition Algorithmus: Eindeutige Beschreibung eines endlichen Verfahrens zur Lösung einer bestimmten Klasse von Problemen Algorithmus im Labyrinthbeispiel: Verfahren, um aus dem dunklen Labyrinth zu gelangen
    7. 7. Entwurf
    8. 8. Finden Sie einen Weg aus dem Labyrinth
    9. 9. Entwerfen Sie einen Algorithmus, der Sie aus jedem Labyrinth (mit Ausgang) führt
    10. 10. Terminierung von Algorithmen: Wir verlangen (zumeist) von Algorithmen, dass sie terminieren, d.h. dass sie in endlicher Zeit (und möglichst schnell  Performance) ihre Arbeit erledigt haben Entwerfen Sie einen Algorithmus, der Sie aus jedem Labyrinth (mit Ausgang) führt
    11. 11. Programmentwicklung: Entwurfsphase III Pledge-Algorithmus:  Prämisse: Wir gehen davon aus, dass alle Ecken rechtwinklig sind  Somit kommen nur Rechtsdrehungen und Linksdrehungen um jeweils 90 Grad vor  Wir verwalten unterwegs einen Umdrehungszähler, der:  bei jeder Linksdrehung um eins erhöht und  bei jeder Rechtsdrehung um eins verringert wird (auch bei der ersten Rechtsdrehung, die nach dem Auftreffen auf eine Wand ausgeführt wird).  Zu Beginn wird dieser Umdrehungszähler auf null gesetzt  Anschließend werden die beiden Anweisungen  geradeaus, bis Wand erreicht  Folge der Wand, bis Umdrehungszähler = 0 solange wiederholt, bis wir ins Freie gelangen
    12. 12. Pseudocode Pseudocode Pledge-Algorithmus:  Setze Umdrehungszähler auf 0;  Wiederhole  Wiederhole  Gehe geradeaus;  Solange Wand erreicht;  Drehe nach rechts;  Wiederhole  Folge dem Hindernis;  Solange Umdrehungszähler=0;  Solange ins Helle gelangt;  Der Entwurf ist unabhängig von der Programmiersprache!
    13. 13. Implementation Programmerstellung und Programmiersprachen
    14. 14. Programmiersprachen
    15. 15. Strukturierte Computerorganisation Problemorientierte Sprache Assemblersprache Betriebssystemmaschine Befehlssatzarchitektur (ISA) Mikroarchitektur Digitale Logik Ebene 5 Ebene 4 Ebene 3 Ebene 2 Ebene 1 Ebene 0
    16. 16. Programmiersprachen: Klassifizierung Maschinennahe Programmiersprache: Assembler Beispiel: „Hello World“ : DATA SEGMENT ;- Beginn des Datensegments Meldung db "Hello World" ;- Die Zeichenkette "Hello World" db "$" ;- Endzeichen der Zeichenkette DATA ENDS ;- Ende des Datensegment CODE SEGMENT ;- Beginn des Codesegements ASSUME CS:CODE,DS:DATA ;- Dem Assembler die Segmente mitteilen Anfang: ;- Label für den Anfang des Programms mov ax, DATA ;- das Daten... mov ds, ax ; ...segment festlegen mov dx, offset Meldung ;- den Text in das auf DS bezogene Datenregister laden mov ah, 09h ;- Die Unterfunktion 9 des Betriebssysteminterrupts 21h auswählen int 21h ;- den Betriebssysteminterrupt 21h (hier erfolgt Ausgabe des Texts) aufrufen mov ax, 4C00h ;- Die Unterfunktion 4Ch (Programmbeendigung) des Betriebssysteminterrupts 21h festlegen int 21h ;- diesen Befehl wiederum ausführen CODE ENDS ;- Ende des Codesegments END Anfang ;- dem Assembler das Ende des Labels Anfang mitteilen Vgl.: http://de.wikipedia.org/wiki/Assemblersprache
    17. 17. Programmiersprachen Anweisungen, die wir dem Computer geben, werden als Text formuliert, z.B.: In Python: print "Hello World!" In PHP: print "Hello World!"; In JavaScript: document.write("Hello World!"); In C++: cout << "Hello World";
    18. 18. Programmiersprachen Programmtext ist formuliert nach festen Regeln: Beispiel C++: cout << "Hello World"; Die Regeln (Grammatik) der Programmiersprache C++ schreiben vor, dass der Ausdruck cout << "Hello World" mit einem Semikolon abgeschlossen werden muss
    19. 19. Spracheigenschaften und Programmierparadigmen
    20. 20. ? var beispiel = 23;
    21. 21. Deklaration und Initialisierung In JavaScript: // Deklaration var eineVariable, eineWeitereVariable; // Initialisierung eineVariable = 23; eineWeitereVariable = “Hello World!“;
    22. 22. Typisierung Variablen: Behälter / Speicherstelle; Typisierung  Typ der Variable In JavaScript: // Deklaration var eineVariable, eineWeitereVariable;  Dynamische Typisierung In C++: int eineVariable = 23; char eineWeitereVariable[]="Hello World";  Statische Typisierung Datentyp
    23. 23. Datentypen (C++) Einfache Datentypen in C++:  bool  Wahrheitswerte  int  ganze Zahlen  unsigned int  Natürliche Zahlen  float  Fließkommazahlen  double  Fließkommazahlen, doppelte Genauigkeit  char  Zeichen Zusammengesetzte Datentypen (in C++):  string  Zeichenketten  array  Sammlung von Daten eines Datentyps
    24. 24. Doppelte Genauigkeit…?!?
    25. 25. Paradigmen:  funktional  objektorientiert  prozedural  etc. etc. etc.
    26. 26. Programmierparadigmen: Funktionale Programmierung var randomize = function( lowerBound, upperBound ) { if( lowerBound > upperBound ) { return( -1 ); } if( lowerBound === upperBound ) { return( lowerBound ); } return lowerBound + parseInt( Math.random() * ( upperBound-lowerBound+1 ), 10); }
    27. 27. Objektorientierte Programmierung Objektorientierte Programmierung [C++, Java]  Zentrales Konzept: Objekt  Objekt  Verfügt über einen bestimmten Zustand  Reagiert mit einem definierten Verhalten auf Anforderungen / seine Umgebung  Besitzt eine Identität, die es von anderen Objekten unterscheidet  Kann mit anderen Objekten verbunden sein
    28. 28. Objektorientierung
    29. 29. Kapselung, Information Hiding, Geheimnisprinzip Abb.: Balzert, Heide: Lehrbuch der Objektmodellierung. Heidelberg, 2005.
    30. 30. Zentrales Konzept I: Klassen Gleichartige Objekte (Objekte mit denselben Operationen und gleichen Attributen) gehören zur gleichen Klasse. Abstrakt vs. konkret: Jedes Objekt ist Exemplar bzw. Instanz einer Klasse Klasse: Definiert für eine Sammlung von Objekten deren  Struktur (Attribute)  Verhalten (Operationen)  Beziehungen  Verfügt über Mechanismen, um neue Objekte zu erzeugen (Object Factory)
    31. 31. Klassen in C++  Kapselung / Information Hiding class EineKlasse { public: // öffentlicher Teil EineKlasse() // Konstruktor { klassenVariable=23; } ~EineKlasse(); // Destruktor int gebeVariablezurueck(void) { return klassenVariable; } private: // privater Teil int klassenVariable; // private Variable };
    32. 32. Notation von Klassen Abb.: Balzert, Heide: Lehrbuch der Objektmodellierung. Heidelberg, 2005.
    33. 33. Zentrales Konzept II: Vererbung  Eine Klasse kann Elemente (Variablen, Konstanten, Funktionen) von anderen Klassen erben Beispiel C++: class Person { string name; //... }; class Mitarbeiter : Person { long sozialversicherungsNr; //... };
    34. 34. Martial Arts Objects (Vererbung) Martial Arts Fighter attribute 1: name attribute 2: gender attribute 2: two legs attribute 3: two arms behaviour 1: getName() behaviour 2: walk() behaviour 3: bong_sau() behaviour 4: tan_sau()
    35. 35. Objektorientierte Programmiersprache: C++ C++:  Ermöglicht maschinennahe Programmierung (Stichw. „Zeiger“), als auch abstrakte Programmierung (i.e. Objektorientierung)  Kompilierung über g++ Compiler, Microsoft Visual C++ Compiler, etc.
    36. 36. Objektorientierte Programmiersprachen: Java Java  Besonderheit: Java-Programme werden in Bytecode übersetzt, anschließend in einer Java-Laufzeitumgebung ausgeführt  Virtuelle Maschine (VM)  Vorteil: Plattformunabhängigkeit: Java-Programme laufen (zumeist) ohne weitere Anpassungen auf unterschiedlichen Computer- und Betriebssystemen, für die eine Java-VM existiert
    37. 37. /

    ×