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