Beruflich Dokumente
Kultur Dokumente
scriptsprachenorientierten
Programmierens
Prof. Dr. Manuel Mayer
Teil 1
© FOM Hochschule für Oekonomie & Management
gemeinnützige Gesellschaft mbH (FOM), Leimkugelstraße 6, 45141 Essen
Dieses Werk ist urheberrechtlich geschützt und nur für den persönlichen Gebrauch im Rahmen der Veranstaltungen der FOM
bestimmt.
Die durch die Urheberschaft begründeten Rechte (u.a. Vervielfältigung, Verbreitung, Übersetzung, Nachdruck) bleiben dem
Urheber vorbehalten.
Das Werk oder Teile daraus dürfen nicht ohne schriftliche Genehmigung der FOM reproduziert oder unter Verwendung
elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden.
Dank geht an Dr.-Ing. M. B. Endejan für die Inspiration und teilweise inhaltliche Übernahme des Skripts.
https://xkcd.com/1319/
0b1. Einleitung
Prüfung und Benotung
4
Modulziele (in knapper Form)
v Erkennen, dass die Sprachen typischerweise interpreterbasiert sind und eine oft
ausrichtungstypische bemerkenswerte Sprachmächtigkeit aufweisen.
5
Curriculum
v Compiler/Interpreter
v Funktionen
v Ein-/Ausgabe
v Reguläre Audrücke
6
Aufgabe der Vorlesungen
Die Vorlesungen und themenbezogenen Diskussionen dienen der
Erläuterung von Konzepten, Techniken, Methoden und Hintergründen. Sie
sollen zu den Übungen hinführen und zum Erkenntnisgewinn beitragen.
Übungen
Im Wechsel zwischen Vorlesung und Übung sollen die theoretisch
behandelten Inhalte praktisch umgesetzt und vertieft werden. In den
Übungen soll umfangreich Gelegenheit bestehen, Probleme aufzudecken
und sie zu lösen. Es wird mit Nachdruck eine veranstaltungsbegleitende
Eigenarbeit empfohlen.
7
Basisliteratur
Die Slides alleine sind keine gute Vorbereitung. Das Programmieren und
das Verinnerlichen von Konzepten ist nur mit Üben sinnvoll möglich.
8
Hilfreiche Ressourcen
v Offizielle Python-Webseite:
https://www.python.org
9
Weiterführende Literatur
v Van Roy, Peter & Haridi, Seif (2004): Concepts, Techniques, and
Models of Computer Programming, 1. Auflage, The MIT Press.
v Name, Tätigkeit
11
https://www.tiobe.com 12
https://www.tiobe.com
13
Khoirom, Mrs. Selina, Moirangthem Sonia, Borishphia Laikhuram, Jaeson
Laishram and Tekcham Davidson Singh. “Comparative Analysis of Python and
Java for Beginners.” (2020).
→ https://bit.ly/3JyYkc9
14
DISKUSSION
v Waren und falls ja, welche Begriffe waren Ihnen nicht geläufig?
v ...
15
https://xkcd.com/1270/
0b10. Programmierparadigmen
Multiparadigmen-Programmiersprachen:
Eine Programmiersprache kann die begriffsbestimmenden Merkmale
mehrerer Paradimen unterstützen. 17
Imperative Programmierung
18
Prozedurale Programmierung
19
Objektorientierte Programmierung
20
Deklarative Programmierung
21
Funktionale Programmierung
22
Logische Programmierung
Beispiel: Prolog
23
Auswahl einiger Programmiersprachen
24
Python und funktionale Programmierung
Warum?
Ein wesentliches Merkmal funktionaler Programmiersprachen ist das
Fehlen von Seiteneffekten und Zustandsänderungen.
Beispiel: Iterationen (z.B. for loop) sind nicht Teil des Konzepts
funktionaler Programmierung. Wer weiß warum?
25
https://xkcd.com/303/
Hybride Lösungen:
- Bytecode-Interpreter
- Just-in-Time-Compiler (JIT-Compiler)
27
Compiler
30
31
Hybrid: Bytecode-Interpreter
32
Hybrid: Just-in-Time-Compiler
33
0b11. Typisierung
https://xkcd.com/1537/
35
Typisierung (etwas ausführlicher)
v den Wertebereich,
v durchführbare Operationen und
v den Speicherbedarf.
36
Die Typisierung bestimmt die Art und Weise, wie Variablen* an Datentypen
gebunden werden.
37
Nicht typisiert vs. typisiert
LDR r0,[r4]
ADR r4,r2
LDR r1,[r4] a = [1, 'hi', 3.14]
SUBGE r0,r0,r1 a.each { |item| puts item }
ADRGE r4,r3
STRGE r0,[r4]
38
Statisch vs. dynamsich typisiert
39
Stark vs. schwach typisiert
8 8
add("5", 3) add("5", 3)
Traceback (most recent call last):
File “<stdin>”, line 1, in <module> ‘53’
File “<stdin>”, line 2, in add
TypeError: Can’t convert ‘int’ object to
str implicitly
40
Explizit vs. implizit typisiert
SimpleBeanFactoryAwareAspectFactory s = var s =
new SimpleBeanFactoryAwareAspectFactory(); new DynamicUrlManagerDataRepositoryFactory();
41
Optionale vs. erzwungene Typisierung
function add(a, b) {
return a + b;
} int add(int a, int b) {
return a + b;
function sub(a: number, b: number): number {
return a - b; }
}
42
o u t . . . t h e
w l e d g e ab
l y a n y k no
e r e i s h a rd m s o n t h e
” . . . th t i c t y p e s y s te
a l i t y f o r a
p a c t o f s ta s u l t i n g q u
im t t i m e o r re
v e l o p m e n
de a r e”
s o f t w
p ie c e o f
Hanenberg, Stefan. (2010). An Experiment About Static and Dynamic Type Systems Doubts About the Positive
Impact of Static Type Systems on Development Time. Proceedings of the Conference on Object-Oriented 43
Programming Systems, Languages, and Applications, OOPSLA. 45. 22-35. 10.1145/1869459.1869462.
44
Debug-Zeit der
<
Exceptions, die von Zeit, die benötigt wird,
einem statischen um mit dem Type-
Type-Checker Checker umzugehen
erkannt worden
wären
* von R. Smallshire, 1,7 Mio. Repositories, 15 Mio. Dateien, 3,6 Mio. Issues
Hanenberg, Stefan. (2010). An Experiment About Static and Dynamic Type Systems Doubts About the Positive
Impact of Static Type Systems on Development Time. Proceedings of the Conference on Object-Oriented
Programming Systems, Languages, and Applications, OOPSLA. 45. 22-35. 10.1145/1869459.1869462.
45
rl, P y tho n,
ra m in Pe
g th e pro g c h ti m e as
n d w riti n a lf a sm u
n g a an h
“Designi ta k es n o m o r e th
h e re sulting
Tc l and t
Rexx, or C , C + +, o r J a v a
i n
writing it n lyh a lf as lo ng.”
m is o
progra
Lutz Prechelt, An empirical comparison of C, C++, Java, Perl, Python, Rexx, and Tcl, IEEE Computer, Vol. 30, (10), p. 23-29, Oct 2000.
46
Eine Handvoll veröffentlichter Studien ist eine
miserable Grundlage für Entscheidungen zur
Technologieauswahl in einer Billionen-Euro-Industrie.
47
48
Statische Typisierung kann die Modularität erschweren...
BookingApplikation BookingService
uses
49
Und wenn wir darauf verzichten...
BookingApplikation BookingService
uses
booking = booking_service.make_booking()
51
Oft ist nicht die Typisierung das Problem
(ausgeführt auf einem MacBook Pro 2,6 GHz, Intel ore i5, 16 GB RAM) n=8, 1 von 92 möglichen Lösungen
54
https://xkcd.com/1987/
0b100. Installation
Installation von Python
v OSX und Linux haben zwar oft Python vorinstalliert, oft ist es eine ältere
Version, teilweise ist Python 2 gelinkt.
v IDLE (Entwicklungsumgebung)
v Dokumentation
56
OSX: Alternativ mit Homebrew (für Fortgeschrittene)
Homebrew-Installation:
$ xcode-select –-install
$ ruby -e "$(curl -fsSL
https:///raw.githubusercontent.com/Homebrew/install/master/install)"
Python-Installation:
$ brew install python
Pip (Paketmanager):
$ brew install pipenv
57
Entwicklungsumgebungen
Neben IDLE, das mit dem Installer standardmäßig installiert wird, gibt es eine
Reihe weitere Entwicklungsumgebungen (IDEs) für Python. Auswahl:
JupyterLab (Notebook-Feeling)
58
Interaktive Nutzung mit der Python Shell
59
https://xkcd.com/2497/
v Der Kopf wird mit einem abschließenden Doppelpunkt vom Körper getrennt.
PV01
C01:
Fragen Sie nach dem Vornamen und
danach nach dem Nachnamen des C02:
Benutzers und geben Sie folgende Schreiben Sie ein Programm, das
Ausgabe aus: nach der Anzahl an Tagen fragt
Hallo {Vorname} {Nachname} und die Stunden, Minuten und
Sekunden ausgibt.
C03:
Lassen Sie den Benutzer eine Zahl über 100 eingeben und danach
eine Zahl kleiner 10. Geben Sie aus, wie oft die kleinere Zahl in die
größere passt (ohne Nachkommastellen).
Variablen
v Objekte haben einen Zustand (state) und können verändert werden (mutation)
status = “on”
status = “on”
Id: 335892234058947
status Value: “on”
Type: str
Do it yourself:
Type: Unveränderlicher Objekttyp, bestimmt den Wertebereich und erlaubte Operationen
Objekt Typ
String str
Integer int
Fließkommazahl float
Liste list
Wörterbuch dict
Tupel tuple
Funktion function
Built-In-Funktion builtin_function_or_method
Casting (Konvertierung von Datentypen)
v Wie bereits bei dem Input-Beispiel gesehen, ist es manchmal notwendig, Daten zu
konvertieren.
v Python stellt Built-In-Klassen zur Verfügung, z. B. str, int, float, list, .....
Duck Typing
Mutable Immutable
v Bytes: bytes
639692234058947
b = a a 1000
b Type: int
877585340589475
a = a + 1 a 1001
Type: int
639692234058947
b 1000
Type: int
Immutable (Beispiel 2: Garbage Collector)
796792234058947
c = ‘ab‘ c “ab”
Type: str
796792234058947
c += ‘c‘ c “ab”
Type: str
407885804967933
“abc”
Type: str
Das nicht mehr referenzierte Objekt
wird “garbage-collected”.
Immutable (Beispiel 3: Indirekte Seiteneffekte)
985830895727395
x = (1, [20, 21], 3) x (1, [20,21], 3)
Type: tuple
x 985830895727395
y = x
(1, [99,21], 3)
x[1][0] = 99 y Type: tuple
a 950668743968328
a += [4]
[1,2,3,4]
Type: list
Mutable (Beispiel 2: Seiteneffekt)
458765495689543
x = [1, 2, 3] x [1,2,3]
Type: list
x 458765495689543
y = x
y [1,2,3]
Type: list
x 458765495689543
x += [4]
y [1,2,3,4]
Type: list
Seiteneffekt
Null, ähm, None
v Das Keyword None wird verwendet, um einen Null-
Wert zu definieren oder überhaupt keinen.
ist False.
v if
v if ... else
match http_status:
case 400:
return “Bad request“
case 200:
return “Ok“
.....
case _:
return “What‘s wrong with the internet?“
Vergleichsoperatoren (Überblick)
Operator Beschreibung
>, < Größer als, Kleiner als
>=, <= Größer gleich als, Kleiner gleich als
== Wert gleich
!= Wert ungleich
is Gleiches Objekt
is not Verschiedene Objekte
Operator Beschreibung
x and y x und y müssen wahr sein, damit der Ausdruck wahr
wird.
x or y Falls x oder y wahr ist, ist auch der Ausdruck wahr.
not x Umkehrung des Wertes von x:
Wahr wird Falsch und Falsch wird Wahr.
Truthy and falsey values (Überblick)
Truthy Falsey
True False
Die meisten Objekte None
1 0
4.1 0.0
[1, 2] [] (leere Liste)
{‘a’: 1, ‘b’: 2} {} (leeres Wörterbuch)
‘eine Zeichenkette’ “” (leere Zeichenkette)
‘False als Zeichenkette’
‘0’
Empty bodies
v Python erlaubt keine leeren Blöcke bei zusammengesetzten Anweisungen.
In Python 3 ist auch ... möglich, das ist etwas weniger “noisy”.
Iteration
v while
v for
v continue
v break
while
while ... else
break und continue
break verhindert
die Ausführung des
else-Zweiges
range
v Zählschleifen können sehr einfach mit range realisiert werden.
v Der Generator* range erzeugt ein iterierbares Objekt mit ganzen Zahlen
aus einem definierten Bereich.
C04:
Fragen Sie den Benutzer nach einer Zahl. C05:
Wenn sie kleiner 10 ist, geben Sie “Zu klein” Fragen Sie den Benutzer nach dem Vornamen
aus, wenn sie zwischen 10 und 20 liegt und nach einer Zahl. Geben Sie danach den
erwidern Sie “in Ordnung” und ansonsten Namen entsprechend oft aus.
“Zu hoch”.
C06:
Erzeugen Sie eine Variable mit einer Zufallszahl folgendermaßen:
import random
random_number = random.randint(1, 50)
Bitten Sie den Benutzer, die Zahl zu erraten. Geben Sie aus, ob die Zahl zu groß oder
zu klein ist, falls sie nicht erraten wurde und lassen Sie den Benutzer erneut raten.
Sobald er Sie errät, geben Sie die Anzahl der Versuche aus.
Coming next:
https://xkcd.com/835/