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 Programmentwicklung: Analyse
Hohe Relevanz der Analysephase Aufteilung in Teil- und Unterprobleme Hierarchischer Erkenntnisprozess Analyse der Analyse i.e. Sicherung der Analyse Programmentwicklung: Analyse Vgl.: http://www.netzmafia.de/skripten/ad/ad2.html
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 Programmentwicklung: Algorithmus
1. Vorsichtig (es ist ja dunkel) der Nase nach gehen, bis wir auf eine Wand treffen 2. Wir mit der linken Hand an der Wand entlang gehen Programmentwicklung: Entwurfsphase I
Labyrinth, aus dem es einen Ausgang gibt, einen Weg ins Freie findet? Pledge-Algorithmus: Zusätzlich zur Gangrichtung berücksichtigen wir die Drehungen, die an den Ecken ausgeführt werden Programmentwicklung: Entwurfsphase III
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 Programmentwicklung: Entwurfsphase III
Repeat Gehe geradeaus; Until Wand erreicht; Drehe nach rechts; Repeat Folge dem Hindernis; Until Umdrehungszähler=0; Until ins Helle gelangt; Entwurf ist unabhängig von Programmiersprache! Programmentwicklung: Entwurfsphase III Vgl.: Vöcking, Berhold et. al.:Taschenbuch der Algorithmen. Springer. 2008. S. 75-81.
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 Programmiersprachen: Klassifizierung Vgl.: http://de.wikipedia.org/wiki/Assemblersprache
“Hello World“; Die Regeln (Grammatik) der Programmiersprache C++ schreiben vor, dass der Ausdruck cout << “Hello World“ mit einem Semikolon abgeschlossen werden muss Programmiersprachen
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 „kompilieren“: Verb, Anwendung eines Compilers auf ein Quellprogramm Programmiersprachen
übersetzt, bevor die erste Programmanweisung ausgeführt wird. [C++] Interpreter ü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 Compiler vs. Interpreter
[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 Programmierparadigmen
Programmierung (i.e. Objektorientierung) Kompilierung über g++ Compiler, Microsoft Visual C++ Compiler, etc. Objektorientierte Programmiersprachen: C++
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 Objektorientierte Programmiersprachen: Java
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” (vgl.: Francesco Carucci (Crytek): http://www.slideshare.net/fcarucci/aaa-automated-testing) Testphase
pass Refactor the code to eliminate all possible duplications and code smells” (vgl.: Francesco Carucci (Crytek): http://www.slideshare.net/fcarucci/aaa-automated-testing) Test-driven development
Entwurfsphase bei der Programmentwicklung. Aufgabe 2: Was bezeichnet eine Spezifikation, was ein Algorithmus? Aufgabe 3: Erläutern Sie bitte den Unterschied zwischen einem Compiler und einem Interpreter. Aufgabe 4: Worin unterscheidet sich die dynamische von der statischen Typisierung? Welche Vor- und Nachteile haben beide Konzepte? Aufgabe 5: Unterscheiden Sie bitte das funktionale Programmierparadigma vom objektorientierten. Hausaufgaben