Programmierkurs

Transcription

Programmierkurs
Pr og r ammier kur s
SoSe 2013
Markus Geveler
Inst. f. Applied Mathematics, TU Dortmund
[email protected]
HOME
http://www.mathematik.tu-dortmund.de/sites/pk-ss13
Lesson 1
Was machen wir heute hier?
Motivation
Einführung in die Inhalte des Kurses
kleine Einführung in die Informatik
Tutorial: den Account benutzen
Tutorial: Scratch – erste Programme selbst machen
Präsenzübungen zu Scratch
Motivation
Film: http://www.code.org
Motivation
Wofür muss man Programmieren können?
praktisch alle technischen Vorgänge heute involvieren
Computer
neue Probleme erfordern neue Lösungen (Programme)
Beispiel Wissenschaft: mathematische Problemstellungen:
Numerische Simulation
Beispiel Industrie: auch: Numerische Simulation
auch in Deutschland werden in Zukunft viel mehr
Programmierer gebraucht → Fachkäftemangel
→ programmieren zu können ist eine mächtige Fähigkeit
Motivation
Beispiel Strömungssimulation
Ziel: Berechnung des Verhaltens von 'Allem was fließen kann'
grafische Darstellung
Berechnung von Kenngrößen (z.B.: ortsabhängige Dichte)
Methode: z.B: finite Elemente
Motivation
Beispiel Strömungssimulation
numerische Simulationen stellen große Anforderungen
an CPU-Zeit und Hauptspeicher
→ Heim-PC fur wirklichkeitsnahe Simulation zu schwach
→ externe Rechnungen auf HPC-Sites:
Rangliste TOP500 via Linpack-Benchmark
Inhalte
Was machen wir in diesem Kurs?
lernen, was man wissen muss, um Computer
Programmieren zu können
→ Computerhardware
→ essentielle Software
→ etwas über Algorithmen
→ etwas über Datenstrukturen
→ etwas über Softwarekonstruktion
→ ein wenig Sprachtheorie / Komplexitätstheorie
eine Programmiersprache !
→ C++
Inhalte
Was machen wir in diesem Kurs?
→ C++ ist Kern des Kurses)
→ Objektorientierte Herangehensweise (hauptsächlich)
→ Algorithmische Grundlagen (ein wenig)
→ Wie schriebt man bessere Programme mit C++?
→ Und was heisst eigentlich besser? (hoffentlich viel)
Einstie g
Jetzt geht es los:
Was muss man wissen, um produktiv zu programmieren
und guten Code zu schreiben?
→ Hardware + Software
in den
→ Lebenszyklus eines Programmes
→ erste Programme selbst machen (erst mal mit einer
einfachen, grafischen Programmiersprache)
Har dware und Softwar e
Hardware
materielle Teile des Computers
→ CPU + Arbeitsspeicher
→ Persistenzspeicher (Festplatte)
→ Grafikchip
→ Mainboard, auf das alles aufgebracht ist
Har dware und Softwar e
Software
erst einmal für uns: 'Programme'
→ befindet sich bei der Ausführung im Arbeitsspeicher
→ hauptsächlich: Anweisungen zur Informationsverarbeitung
→ ein Betriebssystem ist ein solches Programm
Har dware
Aufbau eines Computers 'in unserem Sinne'
Zentraleinheit: Hauptprozessor CPU
Arbeitsspeicher (random access memory RAM)
→ zur kurzfristigen Speicherung von Informationen,
→ Kennzeichen: klein, schnell,
→ Informationen sind weg, wenn kein Strom mehr da
Plattenspeicher (hard disk, storage)
→ zur langfristigen Speicherung,
→ Kennzeichen: gross, langsam, Informationen bleiben
langfristig erhalten
Eingabegeräte: Tastatur, Maus, etc.
Ausgabegeräte: Monitor, Drucker, etc.
Verbindung über Netzwerk:
→ verschiedene Techniken je nach Anwendungszweck
→ unterschiedliche Leistungsparameter
Har dware
Die CPU: Von-Neumann Architektur
Steuerwerk (CU)
→ steuert die Ausführung von Programmen
→ hat dafür eigenen Speicher (wichtig!)
Rechenwerk (ALU)
→ führt einfache arithmetische
Operationen aus:
→ addieren, multiplizieren
Gemeinsamer Speicher
→ für Programm und Daten
I/O
→ zum Bildschirm
→ von der Tastatur, etc.
Har dware
Jenseits der CPU...
Hardware ist nicht so 'einfach'
→ Hardware ist parallel
→ Hardware ist verteilt
→ im Folgenden: immer nur eine, normale CPU
Software I
Betriebssystem (OS)
Ein Betriebssystem ist die Software, die die Verwendung
eines Computers ermöglicht. Es verwaltet Betriebsmittel wie
Speicher, Ein- und Ausgabegeräte und steuert die Ausführung
von Programmen, insbesondere:
→ Benutzerverwaltung
→ Laden und Ausführung von Programmen
→ Verwaltung der Prozessorzeit
→ Verwaltung des Speicherplatzes für Anwendungen
→ Verwaltung der angeschlossenen Gerate
→ Verbindung zur Aussenwelt (Netzwerk)
Software I
Betriebssystemkernel
Betriebssysteme bestehen in der Regel aus einem Kern (kernel),
der die Hardware des Computers verwaltet,
sowie grundlegenden Systemprogrammen,
die dem Start des Betriebssystems und dessen
Konfiguration dienen.
Beispiele für Betriebssysteme:
Windows, Mac OS, Linux, Android, iOS
Zugang zum OS:
→ Kommandozeile (lernen wir gleich kennen)
→ grafische Benutzeroberfläche
Software II
Compiler
ein geschriebenes Programm nicht ohne weiteres für den
Rechner verständlich
→ vor der Ausführung durch den Rechner Umwandlung
Notwendig Programm muss übersetzt werden
→ Übersetzung durch Compiler
→ erst danach Ausführung durch Rechner möglich
→ auch Betriebssystem und Compiler sind Programme
Programmier ung
Definition
Programmiersprache: formalisierte Sprache
→ die Sätze bestehen aus Worten eines
festgelegten Zeichenvorrats (Alphabet)
→ gültige Sätze müssen anhand einer endlichen
Regelmenge (Syntax) gebildet werden
→ legt die Bedeutung (Semantik) eines Satzes fest
Programm: eine Reihe von Sätzen, die in einer
Programmiersprache formuliert sind
Programmier sprachen
Arten
maschinennahe Programmiersprachen:
→ betrachten explizit Speicherzellen und Register
→ hängen vom konkreten Prozessor und der
Rechnerarchitektur ab
→ Maschinensprache, Assemblersprache
höhere Programmiersprachen:
→ Abstraktion von der konkreten Hardware
→ Cobol, Fortran, C, C++, Java
→ Akademisches Interesse: Prolog, Lisp
Programmier sprachen
Arten höherer Programmiersprachen
imperative Sprachen:
→ Pascal, C, C++, Java
→ ablauforientierte Sicht
→ persistenter Zustand wird schrittweise verändert
funktionale Sprachen: Lisp, Haskell
→ Problemlösung durch mathematische Funktionen beschreiben
logische Sprachen: Prolog
→ Problemlösung durch logische Formeln beschreiben
Merke: Objektorientierung ist nur eine Ausprägung von
imperativen Sprachen
Exkur s
Bevor wir weitermachen:
Schauen wir uns das mal praktisch an:
Gleichzeitig: unsere erste Präsenzübung:
PÜ
→ Loggen Sie sich ein
→ öffnen Sie einen Editor
→ schreiben Sie das HelloWorld Programm
→ compilieren Sie das Programm
→ führen Sie es aus
Einloggen
PÜ
Ter minal star ten
PÜ
Editor star ten
PÜ
Programm schreiben
Dann speichern als 'helloworld.cpp' !
PÜ
Compilier en
PÜ
Ausführen
PÜ
Zusammenfassung
PÜ
Hello World!
→ Programm in für Menschen verständlicher Sprache schreiben:
→ nedit helloworld.cpp
→ Programm in für Rechner verständliche Form übersetzen:
→ g++ helloworld.cpp -o helloworld
→ Übersetztes Programm ausführen:
→ helloworld
→ Programm solange verändern, bis es das macht, was es soll,
→ dazu obige Schritte wiederholen
Software III
Linker
Was ist in unserem HelloWorld – Programm passiert?
→ eine einzelne Datei, die den Quelltext (Sourcecode) enthält,
wurde zu einem Programm (einer Objektdatei) compiliert:
Software III
Linker
Objekte nicht unbedingt aus einer Datei: das können ganze
Bibliotheken sein!
→ auch externe Bibliotheken (Wiederverwendung)
→ unterscheide statisches/dynamisches Linken
→ wir haben den Linker gerade implizit mitaufgerufen
Software III
Linker
Unter einem Linker oder Binder (auch: Bindelader)
versteht man ein Computerprogramm, das einzelne
Programmmodule zu einem ausführbaren Programm
zusammenstellt (verbindet).
Programme selbst er stellen
Scratch
http://scratch.mit.edu/
→ bevor wir C++ lernen
→ hier lernen wir vor allem etwas über
→ die Sprachelemente von Programmiersprachen
→ den Ablauf von Computerprogrammen
Tutorial
Scratch
Selbst probieren:
PÜ
Führen Sie die ersten 8 Schritte der
Scratch-Einführung aus!
Scratch
PÜ
Programme selbst er stellen
Scratch mit mehreren sprites
Tutorial
Programme selbst er stellen
Scratch mit mehreren Sprites
Tutorial
Programme selbst er stellen
Scratch mit mehreren Sprites
Tutorial
Scratch
Mini-Spiel
PÜ
→ erweitern Sie das Tutorial-Programm so,
dass alle Richtungen abgedeckt sind
(auch oben, unten)
→ erweitern Sie das Programm so, dass man
den Ball mit der Figur in ein Ziel schieben kann
→ wenn der Ball im Ziel ankommt, soll dies dem
Benutzer kenntlich gemacht werden (z.B.: durch
die Ausgabe einer Nachricht)
→ verwenden Sie als Ziel eine weitere sprite