Basisinformationstechnologie I
Wintersemester 2013/14
18. Dezember 2013 – Programmiersprachen I

Universität zu Köln. Hist...
Themenüberblick „Programmiersprachen I“

Phasen der Programmentwicklung
 Analyse
 Spezifikation

 Entwurf
 Algorithmus...
Neulich in den
Sommerferien…
Analyse
Programmentwicklung: Analyse
Descartes (1596-1650)
„Regeln zur Leitung des
Geistes" (1628):
 Hohe Relevanz der
Analysepha...
Programmentwicklung: Algorithmus
Spezifikation: Problembeschreibung – im Gegensatz
zum Algorithmus, der die Lösung des Pro...
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 Ze...
Programmentwicklung: Entwurfsphase III
Pledge-Algorithmus:
 Prämisse: Wir gehen davon aus, dass alle Ecken rechtwinklig
s...
Pseudocode
Pseudocode Pledge-Algorithmus:



Setze Umdrehungszähler auf 0;
Wiederhole
 Wiederhole
 Gehe geradeaus;

 ...
Implementation
Programmerstellung und Programmiersprachen
Programmiersprachen
Strukturierte Computerorganisation
Ebene 5

Problemorientierte Sprache

Ebene 4

Assemblersprache

Ebene 3

Betriebssystem...
Programmiersprachen: Klassifizierung
Maschinennahe Programmiersprache: Assembler
Beispiel: „Hello World“ :
DATA SEGMENT
Me...
Programmiersprachen
Anweisungen, die wir dem Computer geben, werden als Text
formuliert, z.B.:

In Python:
print "Hello Wo...
Programmiersprachen
Programmtext ist formuliert nach festen Regeln:

Beispiel C++:
cout << "Hello World";
Die Regeln (Gram...
Spracheigenschaften und
Programmierparadigmen
?

var beispiel = 23;
Deklaration und Initialisierung
In JavaScript:
// Deklaration
var eineVariable, eineWeitereVariable;
// Initialisierung
ei...
Typisierung
Variablen: Behälter / Speicherstelle; Typisierung  Typ
der Variable

In JavaScript:
// Deklaration
var eineVa...
Datentypen (C++)

Einfache Datentypen in C++:







bool  Wahrheitswerte
int  ganze Zahlen
unsigned int  Natürli...
Doppelte Genauigkeit…?!?
Paradigmen:
 funktional
 objektorientiert
 prozedural
 etc. etc. etc.
Programmierparadigmen: Funktionale Programmierung

var randomize = function( lowerBound,
upperBound ) {
if( lowerBound > u...
Programmierparadigmen: Prozedurale Programmierung

Prozedurale Programmierung: Aufteilung von
Programmen in Teilprogramme ...
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 zur
...
Klassen in C++  Kapselung / Information Hiding
class EineKlasse
{
public:
// öffentlicher Teil
EineKlasse()
// Konstrukto...
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 erben
...
Martial Arts Fighter
attribute 1: name
attribute 2: gender
attribute 2: two legs
attribute 3: two arms
behaviour 1: printN...
Objektorientierte Programmiersprache: C++

C++:
 Ermöglicht maschinennahe Programmierung (Stichw.
„Zeiger“), als auch abs...
Objektorientierte Programmiersprachen: Java

Java
 Besonderheit: Java-Programme werden in Bytecode übersetzt,
anschließen...
Endspurt der
Implementation…
Refactoring
Refactoring
(Refaktorisierung /
Umgestaltung): Manuelle
oder automatisierte
Programmverbesserung
(u.a. Perform...
Test-driven development

“Write the simplest code that could possibly
make the test pass
Refactor the code to eliminate al...
…notwendig, irgendwie, leider: Dokumentation
/
Quellennachweise





http://www.kulturbrause.de
http://freehdwalls.net/wp-content/uploads/evilminion-despicable-me-car...
Bit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen I
Bit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen I
Bit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen I
Bit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen I
Bit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen I
Bit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen I
Bit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen I
Bit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen I
Bit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen I
Nächste SlideShare
Wird geladen in …5
×

Bit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen I

487 Aufrufe

Veröffentlicht am

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
487
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
153
Aktionen
Geteilt
0
Downloads
0
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Bit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen I

  1. 1. Basisinformationstechnologie I Wintersemester 2013/14 18. Dezember 2013 – Programmiersprachen I Universität zu Köln. Historisch-Kulturwissenschaftliche Informationsverarbeitung Jan G. Wieners // jan.wieners@uni-koeln.de
  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 Algorithmus  Arbeitsdefinition : 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 Ebene 5 Problemorientierte Sprache Ebene 4 Assemblersprache Ebene 3 Betriebssystemmaschine Ebene 2 Befehlssatzarchitektur (ISA) Ebene 1 Mikroarchitektur Ebene 0 Digitale Logik
  16. 16. Programmiersprachen: Klassifizierung Maschinennahe Programmiersprache: Assembler Beispiel: „Hello World“ : DATA SEGMENT Meldung db "Hello World" db "$" DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA Anfang: mov ax, DATA mov ds, ax mov dx, offset Meldung laden mov ah, 09h 21h auswählen int 21h mov ax, 4C00h int 21h CODE ENDS END Anfang Vgl.: http://de.wikipedia.org/wiki/Assemblersprache ;;;;;;;;; ;- Beginn des Datensegments Die Zeichenkette "Hello World" Endzeichen der Zeichenkette Ende des Datensegment Beginn des Codesegements Dem Assembler die Segmente mitteilen Label für den Anfang des Programms das Daten... ...segment festlegen den Text in das auf DS bezogene Datenregister ;- Die Unterfunktion 9 des Betriebssysteminterrupts ;- den Betriebssysteminterrupt 21h (hier erfolgt Ausgabe des Texts) aufrufen ;- Die Unterfunktion 4Ch (Programmbeendigung) des Betriebssysteminterrupts 21h festlegen ;- diesen Befehl wiederum ausführen ;- Ende des Codesegments ;- dem Assembler das Ende des Labels Anfang mitteilen
  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. Programmierparadigmen: Prozedurale Programmierung Prozedurale Programmierung: Aufteilung von Programmen in Teilprogramme bzw. -Aufgaben: Prozeduren [C, Pascal] 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: int klassenVariable; }; // privater Teil // 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 Fighter attribute 1: name attribute 2: gender attribute 2: two legs attribute 3: two arms behaviour 1: printName() 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. Endspurt der Implementation…
  38. 38. Refactoring Refactoring (Refaktorisierung / Umgestaltung): Manuelle oder automatisierte Programmverbesserung (u.a. Performance, CodeQualität) unter Beibehaltung des Programmverhaltens
  39. 39. Test-driven development “Write the simplest code that could possibly make the test pass Refactor the code to eliminate all possible duplications and code smells” (vgl.: Francesco Carucci (Crytek): http://www.slideshare.net/fcarucci/aaa-automated-testing)
  40. 40. …notwendig, irgendwie, leider: Dokumentation
  41. 41. /
  42. 42. Quellennachweise    http://www.kulturbrause.de http://freehdwalls.net/wp-content/uploads/evilminion-despicable-me-cartoon-hd-wallpaper.jpg http://www.spiegel.de/fotostrecke/fotostrecke62645.html

×