Was ist überhaupt ein Programm?
Ein Computerprogramm ist eine Folge von Befehlen, die auf einem Computer zur Ausführung gebracht werden können, um damit eine bestimmte Funktionalität (z. B. Textverarbeitung) zu erzielen.
Das Computerprogramm liegt zumeist auf einem Datenträger als ausführbare Programmdatei (im sog. Maschinencode) vor und wird zur Ausführung in den Arbeitsspeicher des Rechners geladen.
Das Programm wird als Abfolge von Prozessorbefehlen von dem Prozessor des Computers verarbeitet und damit zur Ausführung gebracht.
Nach [http://de.wikipedia.org]
Wann wurde das erste Computer-Programm geschrieben?
1842/1843 von Ada Lovelace auf der AnalyticalEngine von Charles Babbage!
[http://www.fourmilab.ch/babbage/]
[http://de.wikipedia.org]
Grace Hopper: Entwickelte den ersten Compiler (1952) und erfand die Sprache COBOL (nach 1957).
Sie „erfand“ den Begriff debugging.
Ken Thompson und Dennis Ritchie: Die Väter von UNIX und C (1971)
Hall of Fame I
Niklaus Wirth (strukturierte Programmierung und PASCAL):
Programming is a constructive art.
James Gosling (CTO der Produktentwicklergruppe bei SUN) ist einer der Urväter der objektorientierten und plattform- unabhängigen Programmiersprache JAVA.
[http://de.wikipedia.org]
Bjarne Stroustrup: C++
Hall of Fame II
[http://de.wikipedia.org]
Diese Grafik sagt nicht, dass es nur einen „Überlebenden“ gibt!
Programmiersprachen
Hello World
define method hallo-welt()
format-out("Hallo Welt!\n");
end method hallo-welt;
hallo-welt();
main :: IO ()
main = putStrLn "Hallo Welt!"
,'(17,),&$7,21',9,6,21 352*5$0,'+(//2:25/' 352&('85(',9,6,21
0$,1',63/$<+DOOR:HOW 6723581
LQFOXGHLRVWUHDP!
LQWPDLQ^
VWGFRXW+DOOR:HOWVWGHQGO
` FODVV+DOOR^
SXEOLFVWDWLFYRLGPDLQ6WULQJ>@DUJV^
6\VWHPRXWSULQWOQ+DOOR:HOW
``
[http://de.wikipedia.org/wiki/Liste_von_Hallo-Welt-Programmen/Programmiersprachen]
UNIVAC (1951)
Z1 (1938)
Der erste IBM-PC, das Modell IBM 5150
[http://de.wikipedia.org und http://www.atarimuseum.de/1040st.htm]
Apple Lisa (1983)
C64 (um 1985)
AppleII (1977)
Die Auswahl auf den letzten Seiten erfolgte ziemlich willkürlich und ist unvollständig!
Hall of Fame III
Lochkartensteuerung der Jacquard-Maschine (19. Jhr.)Atari 1040ST (1988)
Reale Welt
Modelle
Programme, Maschinen
Systeme
analysieren, modellieren
entwerfen, bauen
implementieren, testen
installieren, anwenden
Programme in der realen Welt
Programme
Programmieren heißt:
Dem Computer in kleinen Schritten erklären, was er tun soll!
Eine solche Folge von einzelnen Maßnahmen zur Erreichung eines gewünschten Ergebnisses kennt man auch aus anderen Bereichen:
§ Bedienungsanleitungen
§ mathematische Berechnungsvorschriften (Gauss, Euklid,
§ Spiele,…
Eine derartige Folge bezeichnen wir als Algorithmus.
Beispiele
Die Beschreibung setzt auf einem gegebenen Umfang an Basisaktionen auf.
Marmorkuchen:
•Fetten Sie eine Kranz- oder Gugelhupfform gründlich ein.
•Streuen Sie sie mit Semmelbröseln aus.
•Schlagen Sie die Butter oder Margarine zusammen mit dem Zucker, dem Vanillinzucker und dem Salz zu einer hellschaumigen Masse.
•Rühren Sie nach und nach die Eier gründlich unter.
•Heizen Sie den Backofen auf 175 Grad vor.
•Mischen Sie das Mehl mit den Mandeln und dem Backpulver.
•…
Wir implementieren Algorithmen in Programmen!
BinaereSuche(A,Schluessel,links,rechts) 1 while links ≤ rechts do
2 mitte := (links + rechts)/2 {Mitte bestimmen, Ergebnis runden}
3 if A[mitte] = Schluessel then return mitte 4 if A[mitte] > Schluessel then rechts := mitte-1 5 if A[mitte] < Schluessel then links := mitte+1 6 endwhile
7 return "nicht gefunden"
Programmcode
Die Lösung dieses Dilemmas:
Wir codieren in einer höheren Programmier-Sprache und lassen die so erstellten Programmtexte in Maschinensprache übersetzen!
Ein Rechner versteht im Prinzip nur Maschinensprache - das sind binäre, rechnerspezifische Anweisungen.
Eine für den Menschen völlig ungeeignete Darstellung.
01001011010010……
Compiler
• Eine Maschinensprache besteht aus einem Satz von Befehlen, die eine ganz bestimmte Rechenmaschine ausführen kann.
• Höhere Programmiersprachen sind nicht an Maschinen orientiert, sondern an den Problemen.
• Sie werden entweder von einem speziellen Programm
interpretiert (Interpreter) oder von einem Compiler in eine Folge von Maschinenbefehlen übersetzt und dann ausgeführt
.
• Der Compiler überprüft auch die grammatikalische Korrektheit des Quelltextes und zeigt diese Fehler an.
Was ist der Nachteil eines Interpreters?
Syntax=Grammatik Semantik=Bedeutung
Compiler Test
Idee oder Vorgabe
exakt definierte Programmieraufgabe
(Spezifikation)
algorithmische Formulierung einer Lösung
Programm
Computer- Software/ Hardware
Test: Tut das Programm, was es soll?
Test: Entspricht das Programm der ursprünglichen Idee bzw.
Vorgabe?
fertig
ja nein
Test: Läuft das Programm?
nein
nein
ja
ja
Programmerstellung
Editieren
Testen Compilieren
Debugging
Test ok
Test nicht ok Quell-
Programm
ausführbares Programm
Editieren: Erstellen und ändern eines Programmtextes Compilieren: Übersetzen eines Programmtextes in ein
Maschinenprogramm
Testen: Systematische Erprobung eines (fast) fertigen (Teil-) Programms
Debugging: Fehlersuche und -beseitigung (to debug = entlausen)
Programmentwicklung
Gute Programme, schlechte Programme
§ Gute Struktur
§ Effiziente Nutzung der Sprache!
§ Verständlich und
nachvollziehbar= wartbar
§ performant
§ unstrukturiert
§ Für die gewählte Sprache nicht adäquat umgesetzt
§ unkommentiert
§ undokumentiert
§ zu lange Antwortzeiten
Selbstverständlich unterstellen wir dabei, dass die Programme ihren Zweck (ihre Spezifikation) erfüllen. Das alleine macht aber noch kein gutes Programm aus!