340 likes | 562 Views
Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II). Pascal Schmidt 25. November 2010. The story so far…. Phyton ist mächtig, einfach, portabel, frei, erweiterbar, objektorientiert. Primitive Datentypen: (Plain/Long) Integer , und String
E N D
Die Programmiersprache Python - was sie in der Schule leisten kann(Einführung Teil II) Pascal Schmidt 25. November 2010
The story so far… • Phyton ist mächtig, einfach, portabel, frei, erweiterbar, objektorientiert. • Primitive Datentypen: (Plain/Long) Integer, und String • Komplexe Datentypen: Liste(array) und Tuple, Assoziative Liste (dictionary), • Set • Für alle Datentypen Unmengen an vordefinierten brauchbaren Funktionen • Blöcke durch gleichmäßige Einrückung. Nix da: pass! • Boolean und Vergleichsoperatoren wie gehabt, aber: in Phyton hat alles • einen Wahrheitswert. • Kontrollstrukturen: if-elif-else, while-else, for-else (nützlich: range()-Fkt.) • kein switch-Äquivalent. • Definieren eigener Funktionen: def Name (Arg1,…ArgN): FunctBody • Dynamische Typisierung!
Gliederung 1. Getting started with Python • Programmierbeispiel 2. Fehlerbehandlung • ..mithilfe von Exceptions • Arten von Ausnahmen • try-except-else 3. Objektorientierte Programmierung • Grundlegende Realisierung • OOP in practice: Klasse(n)! • Vererbung 4. GUI-Programmierung • Vom Editor zur grafischen Oberfläche Pascal Schmidt: Die Programmiersprache Python – Teil II
Getting started with Python Zum Ausprobieren: • Schreibt eine Funktion, die für eine Zahl n bestimmt, ob es sich um eine Primzahl handelt. Falls nicht, soll eine Zerlegung von n angegeben werden. • Lösung – Versuch 1 Falsch eingerückt Pascal Schmidt: Die Programmiersprache Python – Teil II
Getting started with Python Zum Ausprobieren: • Schreibt eine Funktion, die für eine Zahl n bestimmt, ob es sich um eine Primzahl handelt. Falls nicht, soll eine Zerlegung von n angegeben werden. • Lösung – Versuch 2 Pascal Schmidt: Die Programmiersprache Python – Teil II
Gliederung 1. Getting started with Python • Programmierbeispiel 2. Fehlerbehandlung • ..mithilfe von Exceptions • Arten von Ausnahmen • try-except-else 3. Objektorientierte Programmierung • Grundlegende Realisierung • OOP in practice: Klasse(n)! • Vererbung 4. GUI-Programmierung • Vom Editor zur grafischen Oberfläche Pascal Schmidt: Die Programmiersprache Python – Teil II
Fehlerbehandlung mit exceptions • Fehler während der Laufzeit löst Erzeugung eines Exception-Objekt aus, das Informationen über den Fehler enthält; anschließend Programmabbruch. • Laufzeitfehler = eigentlich alle, außer Syntaxfehler. Diese müssen durch Syntaxkorrektur behoben werden, bevor Programm startet. Pascal Schmidt: Die Programmiersprache Python – Teil II
Fehlerbehandlung mit exceptions • Beispiel für das Erzeugen einer Exception: Ungültige arithmetische Operation (Division durch Null) • Funktion wird ausgeführt und zur Laufzeit mit ZeroDivisionError abgebrochen. • Frage für Füchse: Warum ist das ein Laufzeitfehler? Pascal Schmidt: Die Programmiersprache Python – Teil II
Arten von Laufzeitfehlern • Jede Fehlermeldung gibt an, wo es zum Fehler kam sowie Name und Argument der Exception • Häufige Exceptions: Pascal Schmidt: Die Programmiersprache Python – Teil II
Arten von Laufzeitfehlern • Bereits gesehen: Python verwendet dynamische Typisierung. Einfach, aber deshalb auch fehleranfällig. • Beispiel: Pascal Schmidt: Die Programmiersprache Python – Teil II
try-except-else • Bisher: FehlerExceptionProgrammabbruch! • Mehr Flexibilität in der Fehlerbehandlung durch das try-except-Konstrukt. • Syntax und Semantik: • Was passiert, wenn im try-Block ein Fehler auftritt, der nicht explizit abgefangen wird? Falls exception geworfen wird, wird die entsprechende except-Anweisung ausgeführt. Kein Programmabbruch! try: Codeblock except Ausnahme: Code zur Fehlerbehandlung except Ausnahme: Code zur Fehlerbehandlung Mehrere except-Blöcke zum Abfangen verschiedener Fehler möglich. Pascal Schmidt: Die Programmiersprache Python – Teil II
try-except-else • Beispiel: Pascal Schmidt: Die Programmiersprache Python – Teil II
try-except-else • Beispiel – mit kritischen Anmerkungen: • Hier verlieren wir Informationen über den Fehler an sich: • Wurde für den Parameter zahl ein falscher Wert übergeben? • Wurde für den Parameter name ein falscher Wert übergeben? • Wurde in einer print-Methode das Umwandeln einer Zahl in einen String vergessen? Pascal Schmidt: Die Programmiersprache Python – Teil II
try-except-else • Zusätzliche Flexibilität durch else-Erweiterung. Wird ausgeführt, wenn keine der abgefangenen Ausnahmen aufgetreten ist. • Syntax: • Merke: Kein else ohne except. Beispiel try: a = 5 / 2 except: print(“something wrong“) else: print(“everything fine“) try: Codeblock except Ausnahme, Argument: Code zur Fehlerbehandlung else: Codeblock Pascal Schmidt: Die Programmiersprache Python – Teil II
try-except-else • Bisher: Code aus try-Block oder zur Fehlerbehandlung wird ausgeführt. • Mit finally geht beides! • Syntax: • Semantik: Der finally-Block wird auf jeden Fall ausgeführt, egal ob es im try-Block eine Exception gab oder nicht. • Achtung: finally nicht in Kombination mit except oder else möglich. try: Codeblock finally: Codeblock Pascal Schmidt: Die Programmiersprache Python – Teil II
Gliederung 1. Getting started with Python • Programmierbeispiel 2. Fehlerbehandlung • ..mithilfe von Exceptions • Arten von Ausnahmen • try-except-else 3. Objektorientierte Programmierung • Grundlegende Realisierung • OOP in practice: Klasse(n)! • Vererbung 4. GUI-Programmierung • Vom Editor zur grafischen Oberfläche Pascal Schmidt: Die Programmiersprache Python – Teil II
Grundlegende OOP-Realisierung • Elemente: Klassen (Schablonen) Instanzen (konkretes Objekt, von einer Klasse abgeleitet) Attribute (Variablen einer Instanz) Methoden (Funktionen, die in einer Klasse definiert sind) • Prinzip der Kapselung, Kommunikation zwischen verschiedenen Objekten erfolgt durch Methodenaufrufe. („Nachrichten“) • Python realisiert Prinzip der Mehrfachvererbung Kunde Konto Kunde_1.abheben() Klasse Instanz Methode Kunde_1 Konto_1 Konto_1.auszahlen() Pascal Schmidt: Die Programmiersprache Python – Teil II
Erzeugen von Klassen • Syntax zur Definition einer Klasse: • Klassen enthalten im Allgemeinen Funktionsdefinitionen, aber auch andere Anweisungen möglich • Klassen erlauben Instanziierung und Attributreferenzen Beispiel: Pascal Schmidt: Die Programmiersprache Python – Teil II
Struktur einer typischen Klasse • Typischerweise enthält eine Klasse einen Konstruktor, der automatisch bei der Instanziierung aufgerufen wird (und die initiale Belegung der Attribute erledigt), sowie Methoden, die die Funktionalität der Instanzen bereitstellen. • Beispiel: Pascal Schmidt: Die Programmiersprache Python – Teil II
Besonderheiten • Die Benennung ist beliebig – self ist jedoch • übliche Konvention. • Muss bei der Definition einer Funktion immer • als erstes Argument stehen. • Bezeichnet konkrete Instanz, mit der gerade • gearbeitet wird Guido van Rossum: Why explicit self hastostay, in: Neopythonic, 18.10.2008 Pascal Schmidt: Die Programmiersprache Python – Teil II
Besonderheiten Attribute der Klasse stehen im Konstruktor, nicht vorher aufgelistet! Ergänzen weiterer Attribute geht aber: Pascal Schmidt: Die Programmiersprache Python – Teil II
Das Kunden-Konto-Beispiel Kunde_1.abheben() Kunde_1 Konto_1 Konto_1.auszahlen() Pascal Schmidt: Die Programmiersprache Python – Teil II
Das Kunden-Konto-Beispiel Testlauf: Pascal Schmidt: Die Programmiersprache Python – Teil II
Einfache Vererbung • Die abgeleitete Klasse erbt alle Methoden und Attribute der ableitenden Klasse • Zusätzlich kann abgeleitete Klasse weitere Methoden und Attribute enthalten und/oder Methoden überschreiben • Syntax: • Beispiel: Class Name(Basisklasse): Code Testlauf: Pascal Schmidt: Die Programmiersprache Python – Teil II
Mehrfache Vererbung • Im Gegensatz zu JAVA unterstützt Python Mehrfachvererbung: Eine Klasse kann von mehreren Basisklassen erben. • Abgeleitete Klasse erbt alle Attribute und Methoden von allen Basisklassen, überschreibt ggf. Methoden. • Syntax: • Problem: Was passiert, wenn mehrere Basisklassen eine gleichlautende Methode implementieren? Welche wird dann vererbt? • Antwort: Die Auflistung der Basisklassen in der Klassendefinition erfolgt in aufsteigender Priorität: Es wird von der zuletzt aufgelisteten Klasse geerbt, die die Methode implementiert. … Class Name(Basisklasse1,…,BasisklasseN): Code Pascal Schmidt: Die Programmiersprache Python – Teil II
Gliederung 1. Getting started with Python • Programmierbeispiel 2. Fehlerbehandlung • ..mithilfe von Exceptions • Arten von Ausnahmen • try-except-else 3. Objektorientierte Programmierung • Grundlegende Realisierung • OOP in practice: Klasse(n)! • Vererbung 4. GUI-Programmierung • Vom Editor zur grafischen Oberfläche Pascal Schmidt: Die Programmiersprache Python – Teil II
GUI-Programmierung für die Schule? • Benutzen die GUI-Bibliothek Tkinter, die standardmäßig mit Python ausgeliefert wird: Simple and efficient! (http://docs.python.org/library/tkinter.html#) Zentrale Begriffe/Konzepte: • Ein Widget ist ein grafisches Element, mit dem man GUIs erstellen kann (z.B. Labels, Textboxen,…) , realisiert in Python als Klasse. • Der Layout-Manager wird in Tkinter als Methode des Widgets implementiert, und verwaltet dieses (Beispiel folgt). • Vorgehen: 1. Problem konventionell lösen (Editor) 2. Widgets erzeugen und anpassen 3. Funktionalität in Widgets einbauen 4. Endlosschleife, die Benutzeraktionen auswertet • Alles klar? Pascal Schmidt: Die Programmiersprache Python – Teil II
GUI-Programmierung am Beispiel • Aufgabe: Ausgabe „Hallo Pascal“ auf sys.stdout (GUI-Zusatz: Nach Betätigen eines entsprechenden Buttons) • step 1: konventionelle Lösung als Funktion • step 2: Widgets erzeugen und anpassen • step 3: Funktionalität übergeben • step 4: Endlosschleife starten Pascal Schmidt: Die Programmiersprache Python – Teil II
Einfache Widgets • Vielzahl an einfachen Widgets, einfache Syntax: • Beispiele: • Konfiguration der Widgets (Größe, Schriftart, Farbe,…) auch nachträglich noch möglich Syntax: • Label mit Beschriftung • Grafik • Buttons • Entries • Radiobutton, Checkbutton Widget (Oberfläche, Optionen …) Pascal Schmidt: Die Programmiersprache Python – Teil II
Layout • Layout-Manager kümmert sich um die Darstellung der Widgets auf dem Bildschirm. Bisher lediglich: pack-Layout-Manager ohne große Funktionalität (nur pack() ). • Allerdings: Selbst bei pack()-Funktion viele Optionen möglich: side: TOP, LEFT, BOTTOM , RIGHT fill: NONE, BOTH, X, Y expand: YES, NO • Fazit: Einfach zu bedienen, nette Features, aber: noch zu unflexibel. • Deutlich flexibler: grid-Layout-Manager. Verwaltet Widgets in einer 2D-Liste, die man als Tabelle vorstellen kann (Verschachtelung innerhalb einer Zeile ist möglich!) Pascal Schmidt: Die Programmiersprache Python – Teil II
Elaboriertes Beispiel mit grid-Layout Pascal Schmidt: Die Programmiersprache Python – Teil II
Ausblick – es gibt auch noch… • …Oberflächen: Widgets, die Oberflächen erzeugen, auf denen weitere Widgets platziert werden können, z.B. Frame, Dialogfeld,… • … Ereignisse: Reaktion auf Ereignisse (Benutzereingaben: Mausklick, Doppelklick, Eingabe eines Zeichens) wird durch die bind()-Methode der Widgets realisiert: Widget.bind(Ereignis, Funktion) • … komplexere Widgets: Listbox, Text, Canvas, Scrollbar, Menu • … • Mein Fazit: Schöne Spielereien, die sich mit vertretbarem Aufwand realisieren lassen! • Euer Fazit? Pascal Schmidt: Die Programmiersprache Python – Teil II
Literatur • Martin Uzak(2002): Python 2.x, Das Einsteigerseminar, 384 S. • Python Dokumentation (insbesondere auch für Änderungen bei neueren Python-Versionen): http://docs.python.org/ Pascal Schmidt: Die Programmiersprache Python – Teil II