Organisatorisches/Einstieg

Ähnliche Dokumente
Funktionale Programmierung (in Clojure)

JAVA als erste Programmiersprache Semesterkurs

Informatik Java-Programmierkurs im Rahmen der Berufs- u. Studienorientierung für Schüler. Joliot-Curie-Gymnasium GR 2010 Nico Steinbach

Programmiersprachen und Programmierkonzepte

Grundlagen von Python

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Modellierung und Programmierung 1

Zum Abschluss wird gezeigt, wie aus einem C++ Quell-Programm ein ausführbares Programm erzeugt wird. 1. Installation von NetBeans...

Programmieren was ist das genau?

Algorithmen mit Python

Kontrollstrukturen - Universität Köln

Algorithmen und Programmieren II Einführung in Python

Vorkurs Informatik WiSe 15/16

Programmieren Lernen mit BYOB. Gerald Futschek 5. November 2012

Allgemeines. Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C. #include <stdio.h>

Einführung in PHP. (mit Aufgaben)

Anleitung zum Arbeiten mit Microsoft Visual Studio 2008 im Softwarepraktikum ET/IT

Prof. Dr.-Ing. Dietrich Schröder GIS und Programmiersprachen: Wohin geht die Reise?

Grundbegriffe der Informatik

Programmierkurs Python I

Python SVN-Revision 12

Version 0.3. Installation von MinGW und Eclipse CDT

Einführung in Eclipse und Java

Theoretische Grundlagen des Software Engineering

III.1 Prinzipien der funktionalen Programmierung - 1 -

Scala kann auch faul sein

Installation und Inbetriebnahme von Microsoft Visual C Express

2 Grundlagen der Programmierung

Objektorientiertes Programmieren mit Suse Linux

Scala & Lift. Ferenc Lajko

Objektorientierte Programmierung OOP

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

C ++ in der Computerlinguistik

Einführung in die C-Programmierung

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

Programmieren in Haskell Einführung

Programmierung für Mathematik (HS13)

1. Einführung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

Brainfuck. 1 Brainfuck. 1.1 Brainfuck Geschichte und Umfeld. 1.2 Esoterische Programmiersprachen

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester

Innere Klassen in Java

Informatik I (D-MAVT)

Einführung in die Programmierung

Programmieren Formulierung eines Algorithmus in einer Programmiersprache

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

1. Java Grundbegriffe

SEP 114. Design by Contract

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Programmieren für Ingenieure Sommer Ein Rechner. Rechner sind überall. Gerät, das mittels programmierbarer Rechenvorschriften Daten verarbeitet.

E-PRIME TUTORIUM Die Programmiersprache BASIC

Übung Theoretische Grundlagen

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

CGI Programmierung mit Ha. Markus Schwarz

Übungen zu C++ Kapitel 1

2D22 Prinzipien der Softwareentwicklung. Prinzipien der Softwareentwicklung S. Strahringer 1

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Klausur in Programmieren

Java Kurs für Anfänger Einheit 5 Methoden

Grundlagen. Kapitel 1

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch

Vorlesung Informatik II

Programmierkurs Java

Kapitel 4. Einführung in den Scannergenerator Flex. Einführung in den Scannergenerator Flex Wintersemester 2008/09 1 / 9

Prinzipien Objektorientierter Programmierung

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Informatik Programmiersprachen eine kurze Übersicht

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Programmierung. Programme, Compiler, virtuelle Maschinen, Java

ALP I. Funktionale Programmierung

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Java: Vererbung. Teil 3: super()

Theoretische Grundlagen der Informatik WS 09/10

Was ist Logische Programmierung?

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Informationen zur Verwendung von Visual Studio und cmake

Lokale Installation von DotNetNuke 4 ohne IIS

Grundlagen der Informatik - 6. Praktikum

Konventionen. Danksagung

Einführung in die Programmiersprache Python

Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg.

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung

Programmierkurs: Delphi: Einstieg

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Java lernen mit BlueJ

Installation einer C++ Entwicklungsumgebung unter Windows --- TDM-GCC und Eclipse installieren

Objektorientierte Programmierung

Programmieren I. Administratives / Java Installation. Thomas Vetter, Brian Amberg, Andreas Forster. 21. September 2010 UNIVERSITÄT BASEL

n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 -

Präsentation Von Laura Baake und Janina Schwemer

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Grundlagen der Programmierung UE

Grundlagen der Programmierung UE

Transkript:

1/31 Organisatorisches/Einstieg Florian Adamsky, B. Sc. (PhD cand.) florian.adamsky@iem.thm.de http://florian.adamsky.it/ cbd Softwareentwicklung im WS 2014/15

2/31 Outline 1 Motivation Theoretische Grundlagen Programmierparadigmen Übersetzung in Maschinencode 2 Entwicklungsumgebung

3/31 Table of Contents 1 Motivation Theoretische Grundlagen Programmierparadigmen Übersetzung in Maschinencode 2 Entwicklungsumgebung

4/31 Motivation: Warum Programmieren lernen? YouTube-Video: What Most Schools Don t Teach Programmieren ist die Sprache des 21. Jahrhunderts

5/31 Entscheidungsproblem Theorem (Entscheidungsproblem) Gibt es ein System von Axiomen, aus denen alle Gesetze der Mathematik mechanisch ableitbar sind? David Hilbert (1900)

5/31 Entscheidungsproblem Theorem (Entscheidungsproblem) Gibt es ein System von Axiomen, aus denen alle Gesetze der Mathematik mechanisch ableitbar sind? David Hilbert (1900) Negativbeweise durch: 1936: Alonzo Church mit seinem Lambda-Kalkül 1936: Alan Turing mit der Turing Maschine

6/31 λ-kalkül minimale universelle Programmiersprache entwickelt von Church und Stephen Kleene bestehst aus: Funktionsabstraktion λ x. A anonyme Funktion die x als Parameter bekommt und A als Funktionskörper hat Funktionsapplikation F A die Funktion F wird auf den Ausdruck A angewendet Abbildung: Alonzo Church by Princeton University

7/31 Turingmaschine mathematisches Modell das aus folgenden Komponenten besteht: unendlich langem Speicherband mit Feldern programmierbaren Lese- und Schreibkopf q1 Turingmaschine ist die Basis der Von-Neumann-Architektur... b b a a a a... Speicherband q 1 Abbildung: Darstellung auf Basis von Sebastian Sardina Abbildung: Alan Turing

8/31 Definitionen Programmierparadigma ist ein Programmierstil dem verschiedene Prinzipien zugrunde liegen. Eine spezielle Art über Probleme nachzudenken. Programmiersprache formale Sprache die ein oder mehrere Programmierparadigmen unterstützt (Multiparadigmen-Sprache).

9/31 OCaml C/C++ F# Imperativ Assembler Haskell Funktional Smalltalk zustandsfrei Programmierung zustandsbe haftet Objektori entiert C++ Prolog Logik Java Esoterik Brainfuck Whitespace

10/31 OCaml C/C++ F# Imperativ Assembler Haskell Funktional Smalltalk zustandsfrei Programmierung zustandsbe haftet Objektori entiert C++ Prolog Logik Java Esoterik Brainfuck Whitespace

11/31 Funktionale Programmierung Basiert auf dem λ-kalkül Formales Modell das auf Alonzo Church (1930) zurückgeht Funktionen entsprechen der mathematische Definition Funktionen sind nur abhängig von den Argumenten

11/31 Funktionale Programmierung Basiert auf dem λ-kalkül Formales Modell das auf Alonzo Church (1930) zurückgeht Funktionen entsprechen der mathematische Definition Funktionen sind nur abhängig von den Argumenten Definition (Funktion) f : D Z : x f (x), d.h. jedem Element x D ist genau ein Element durch f (x) Z zugeordnet. D Z 1 2 3 4 0 2 1

12/31 Beispiel für funktionale Programmierung Example (Imperative C#) int sum = 0; foreach (int i in mylist) { sum += (i + 1); }

12/31 Beispiel für funktionale Programmierung Example (Imperative C#) int sum = 0; foreach (int i in mylist) { sum += (i + 1); } Example (Funktional Lisp) (reduce '+ (mapcar '1+ mylist))

13/31 Prinzipien der funktionalen Programmierung First-Class Funktionen Higher-Order Functions Lazy Evaluation Rekursion Programmiersprachen Common Lisp, Racket, Clojure, Scheme, Haskell, F#, OCaml, R, Erlang, Mathematica,...

14/31 OCaml C/C++ F# Imperativ Assembler Haskell Funktional Smalltalk zustandsfrei Programmierung zustandsbe haftet Objektori entiert C++ Prolog Logik Java Esoterik Brainfuck Whitespace

15/31 Logik Programmierung basiert auf mathematischer Logik besteht daher aus einer Menge aus Axiomen Example (Prolog) grossvater(x,y) :- vater(x,z), vater(z,y). vater(adam,tobias). vater(tobias,frank).?- grossvater(adam,frank). true.

16/31 OCaml C/C++ F# Imperativ Assembler Haskell Funktional Smalltalk zustandsfrei Programmierung zustandsbe haftet Objektori entiert C++ Prolog Logik Java Esoterik Brainfuck Whitespace

17/31 Imperative Programmierung längste bekannte Programmierparadigma Quellcode legt fest, was in welcher Reihenfolge ausgeführt wird vergleichbar mit einem Kochrezept tue erst das, dann das Programmiersprachen C, Fortran, Ada, Cobol, Assembler

18/31 OCaml C/C++ F# Imperativ Assembler Haskell Funktional Smalltalk zustandsfrei Programmierung zustandsbe haftet Objektori entiert C++ Prolog Logik Java Esoterik Brainfuck Whitespace

19/31 Objektorientierte Programmierung Abbildung der Wirklichkeit in Form von Objekten, Attributen und Methoden Versteckt die imperative Programmierung in Klassen Example (Rechteck) Attribute höhe, breite Methoden vergrößern, berechneflaecheninhalt, verschieben,... Rechteck quadrat(32, 32); quadrat.vergroessern(100); quadrat.berecheflaecheninhalt(); quadrat.verkleinern(40);

20/31 Prinzipien der OO Programmierung Klassen, Objekte, Vererbung Datenkapselung Polymorphismus Komposition und Aggregation Programmiersprachen Simula, Smalltalk, Java, C#, C++, Python, Ruby, Perl, Lisp (CLOS),...

21/31 OCaml C/C++ F# Imperativ Assembler Haskell Funktional Smalltalk zustandsfrei Programmierung zustandsbe haftet Objektori entiert C++ Prolog Logik Java Esoterik Brainfuck Whitespace

22/31 Esoterische Programmierung Sind nicht für den praktischen Einsatz gedacht Man versucht möglichst unverständliche Syntax zu erzeugen Viel Spaß auf http://esolangs.org/wiki/main_page Programmiersprachen Brainfuck, Whitespaces, Shakespeare Programming Language, Omgrofl,

23/31 Hello World in esoterischen Sprachen Example (Brainfuck) ++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<++ +++++++++++++.>.+++.------.--------.>+.>.

23/31 Hello World in esoterischen Sprachen Example (Brainfuck) ++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<++ +++++++++++++.>.+++.------.--------.>+.>. Example (Omgrofl) lol iz 72 rofl lol lol iz 101

23/31 Hello World in esoterischen Sprachen Example (Brainfuck) ++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<++ +++++++++++++.>.+++.------.--------.>+.>. Example (Omgrofl) lol iz 72 rofl lol lol iz 101 Example (SPL) Romeo, a young man with a remarkable patience. Juliet, a likewise young woman of remarkable grace.

Compilevorgang Schritt 1 Quelltext int main() { if (a < b) cout << ffoo``; do while z = x - y; cin >> var; return 0; }

Compilevorgang Schritt 1 Quelltext int main() { if (a < b) cout << ffoo``; do while z = x - y; cin >> var; return 0; } compile Objekt-Datei 10010110101010100 11010101010101110 (LIB REF) (LIB REF)

Compilevorgang Schritt 1 Quelltext Objekt-Datei Binär-Datei int main() { if (a < b) cout << ffoo``; do while z = x - y; cin >> var; return 0; } compile 10010110101010100 11010101010101110 (LIB REF) (LIB REF) linken 10010110101010100 11010101010101110 01010110101001011 10101010010111010 Bibliothek 10010110101010100 11010101010101110 01010110101001011 10101010010111010

24/31 Compilevorgang Schritt 1 Quelltext Objekt-Datei Binär-Datei int main() { if (a < b) cout << ffoo``; do while z = x - y; cin >> var; return 0; } compile 10010110101010100 11010101010101110 (LIB REF) (LIB REF) linken 10010110101010100 11010101010101110 01010110101001011 10101010010111010 ausführen CPU Bibliothek 10010110101010100 11010101010101110 01010110101001011 10101010010111010

25/31 Compiler Vor- und Nachteile Vorteile sehr schnell, da Compiler viele Optimierung vornehmen kann Nachteile schwerer zu programmieren Systemabhängig

Interpreter Skript #/usr/bin/perl use Module; my $hello = Hello World ; say $hello;

Interpreter Skript #/usr/bin/perl use Module; my $hello = Hello World ; say $hello; ausführen Interpreter

Interpreter Skript #/usr/bin/perl use Module; my $hello = Hello World ; say $hello; ausführen Interpreter Bibliothek sub function { my ($a, $b, $c) = _; return $a + $b + $c; }

26/31 Interpreter Skript #/usr/bin/perl use Module; ausführen Interpreter 0010111010 CPU my $hello = Hello World ; say $hello; Bibliothek sub function { my ($a, $b, $c) = _; return $a + $b + $c; }

27/31 Interpreter Vor- und Nachteile Vorteile kein Compilieren notwendig kein selbstständiges Speichermanagement notwendig einfacher zu programmieren Betriebssystem-unabhängig, wenn Interpreter für das Betriebsystem zur Verfügung steht Nachteile deutlich langsamer als kompilierter Code

Virtuelle Maschine Quelltext int main() { if (a < b) cout << ffoo``; do while z = x - y; cin >> var; return 0; }

Virtuelle Maschine Quelltext int main() { if (a < b) cout << ffoo``; do while z = x - y; cin >> var; return 0; } compile Bytecode 0: iconst_2 1: istore_1 2: iload_1 3: sipush 1000 6: if_icmpge 44 9: iconst_2 10: istore_2 11: iload_2

28/31 Virtuelle Maschine VM 1010101 Linux ausführen Quelltext Bytecode int main() { if (a < b) cout << ffoo``; do while compile 0: iconst_2 1: istore_1 2: iload_1 3: sipush 1000 ausführen VM 1010101 Windows z = x - y; 6: if_icmpge 44 cin >> var; 9: iconst_2 return 0; 10: istore_2 } 11: iload_2 ausführen VM 1010101 Mac OS

29/31 VM Vor- und Nachteile Vorteile schneller als Interpreter-Sprache, weil vorcompiliert einfacher zu programmieren Betriebssystem-unabhängig, wenn VM für das Betriebsystem zur Verfügung steht Nachteile langsamer als C

30/31 Table of Contents 1 Motivation Theoretische Grundlagen Programmierparadigmen Übersetzung in Maschinencode 2 Entwicklungsumgebung

31/31 Entwicklungsumgebung IDE Code::Blocks http://www.codeblocks.org/ Visual C++ Express http://www.microsoft.com/ visualstudio/eng/products/ visual-studio-2010-express Eclipse CDT http://www.eclipse.org/cdt/ Texteditor Sublime Text 2 http://www.sublimetext.com/2 Notepad++ http://notepad-plus-plus.org/ Emacs http: //www.gnu.org/software/emacs/