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/