Prozedurale Programmierung

Werbung
Babeș-Bolyai Universität
Cluj Napoca
Fakultät für Mathematik und Informatik
Grundlagen der Programmierung MLG5005
Prozedurale
Programmierung
"You must cut down the mightiest tree in the
forest... WITH... A HERRING!"
Prozedurale Programmierung
●
Strukturierte Datentypen
●
Was ist eine Funktion
●
Wie man Funktionen schreiben
Strukturierte Datentypen
●
Listen
●
Tupel
●
Dictionaries
Listen
Syntax
[Wert_1, ..., Wert_n]
kann:
●
 verändert werden
●
beliebige Elemente enthalten
●
sortiert werden
Funktionen:
append, count, index, insert, remove, reverse, sort
Listen
Operation
Erklärung
s in x
prüft, ob s in x ist
s not in x
prüft, ob s nicht in x ist
x+y
Verkettung von x und y
x[n]
liefert das n-te Element von x
x[n:m]
liefert eine Teilsequenz von n bis m
x[n:m:k]
liefert eine Teilsequenz von n bis m, aber
nur jedes k-te Element wird berücksichtigt
len(x)
liefert die Anzahl von Elementen
min(x)
liefert das kleinste Element
max(n)
liefert das größte Element
Listen
Tupel
Syntax
(Wert_1, ..., Wert_n)
kann:
nicht verändert werden
beliebige Elemente enthalten
Funktionen
index
Tupel
Dictionaries
Syntax
{ Key_1: Value1, Key_2: Value2, ... }
>>>type({})
type<dict>
assoziatives Array
Schüssel-Wert-Paare
Schlüssel müssen unveränderlich sein
Dictionaries
Zustand, Verhalten, Identität
Ein Objekt:
Zustand
Verhalten
Identität
unveränderlichen gegen veränderlichen Objekte
Grund-Datentypen (Zahlen, Strings, Tupel)
Listen, Dictionaries..
id (objekt)
type (objekt), isinstance (objekt,typ)
Prozedurale Programmierung
Ein Programmierparadigma = ein
fundamentaler Programmierstil
Imperative Programmierung: Programme
werden als aufeinander folgende Befehle
formuliert.
Zuweisung: a = 10
Prozedurale Programmierung
Imperative Programmierung
Prozedurale Programmierung
Objektorientierte Programmierung
Prozedurale Programmierung
Gemäß des prozeduralen Paradigmas wird
• der Zustand eines Systems mit Variablen
beschrieben
• werden die möglichen Systemabläufe
algorithmisch formuliert
• bilden Prozeduren das zentrale Strukturierungsund Abstraktionsmittel
Funktionen
 Funktion: etwas, das einen oder mehrere Wert(e) nimmt
(die Argumente) und einen oder mehrere Wert(e) zurückgibt
(das Ergebnis)
Syntax
def <Name>(P1, ..., Pn):
...
return <Resultat>
optionale Parameter
def test(param = 'Hallo'):
print (param)
Funktionen
Funktionen
Funktionen
Jede Funktion sollte anbieten:
●
sinnvolle Namen
●
Kommentare
●
Eine spezifikation
Testen?
Sichtbarkeit und Blöcke
Scope: der Programmabschnitt, in dem die Variable
nutzbar und sichtbar ist
Alle Variablen definiert in einem Einrückungslevel/einer
Funktion haben der gleiche Gültigkeitsbereich
globale gegen lokale Variabilen
Sichtbarkeit und Blöcke
globals(), locals()
Aufrufen
Block:
●
markiert durch eine homogene Einrückung
●
ausgeführt als eine unabhängige Einheit
Execution frames?
Namensräume:
●
Eine Abbildung von Namen auf Objekte
●
binding/unbinding/rebinding
●
dictionaries
Argumentübergabe
Argumente werden an lokale Variablen der
Funktion übergeben
call-by-value gegen call-by-reference
http://xkcd.com/729/
Argumentübergabe
Argumente werden an lokale Variablen der
Funktion übergeben
●
●
Unveränderliche Objekte ≈ call by value
call by reference am besten mit Tupel als
Funktionsrückgabe.
Call-by-object-reference!
Argumentübergabe
Argumentübergabe
Test-driven Development
Testfälle
●
●
ein Entwurfsschritt
gegeben durch eine Folge von Eingabewerten, die
für ein bestimmtes Testobjekt unter definierten
Randbedingungen eine zugehörige Folge von
Sollreaktionen erzeugt
Eine Testfunktion für jede Funktion
Testfunktion - Rechner
1. Eine Zahl einfügen
2. Interaktionsszenario
3. Tasks
T1. Berechne den Größten gemeinsamen Teiler
T2. Addition zweier rationaler Zahlen (c,e,g,i)
T3. Implementiere den Rechner: init, add, total
T4. Implementiere eine Benutzerschnittstelle
Testfunktion - Rechner
T1. Berechne den Größten gemeinsamen Teiler
Testfunktion - Rechner
T1. Berechne den Größten gemeinsamen Teiler
Testfall
Test-driven Development Schritte
●
●
●
für das erwünschte fehlerfreie Verhalten
für schon bekannte Fehlschläge
für das nächste Teilstück an Funktionalität
●
●
●
Refactoring
Code-Duplizierung
Code-Konventionen
→ schlicht und verständlich Code
References
1. The Python language reference.
http://docs.python.org/py3k/reference/index.html
2. The Python standard library.
http://docs.python.org/py3k/library/index.html
3. The Python tutorial.
http://docs.python.org/tutorial/index.html
4. Kent Beck.Test Driven Development: By Example.
Addison-Wesley Longman, 2002.
5. Martin Fowler. Refactoring. Improving the Design of
Existing Code. Addison-Wesley 1999
6. Galileo Open book
http://openbook.galileo-press.de/python/
Herunterladen