Modul: Programmierung B-PRG Grundlagen der Programmierung 1 – Teil 1 – V11 Zusammenfassung und Ergänzungen - Teil 1 Prof. Dr. Detlef Krömker Professur für Graphische Datenverarbeitung Institut für Informatik Fachbereich Informatik und Mathematik (12) Hier wird Wissen Wirklichkeit Wo sind wir in Teil1? V 0 ---V 1 V 2 V 3 ---V 4 V 5 ---V 6 V 7 ---V 8 V 9 V10 V11 2 Begrüßung und Einführung Daten – Information – Wissen Computer – Algorithmus – Programm Variablen – Datentypen – Objekte Elementare numerische Datentypen Zeichenketten Verzweigungen und Schleifen Prozeduren Wir haben tatsächlich schon viel geschafft ... Sie haben viel geleistet! Was bleibt? Kleine Ergänzungen zu verschiedenen Themengebieten! Aggregierte Datentypen Klassen Graphen und Bäume Bibliotheken, ... B-CG – V11 – Ergänzungen und Zusammenfassung Prof. Dr. Detlef Krömker Institut für Informatik Hier wird Wissen Wirklichkeit 1 Übersicht 1. Die Datentypen None, Bool und Enumeration in Python 2. Module und Bibliotheken 3. Eingebaute Bibliotheken in Python 4. Anmerkungen zum Programmierstil 5. Ein- und Ausgabe in Python 6. Zusammenfassung und Ausblick 3 B-CG – V11 – Ergänzungen und Zusammenfassung Prof. Dr. Detlef Krömker Institut für Informatik Hier wird Wissen Wirklichkeit unmutable None elementare Wahrheitswerte Ganzzahlen Zahlen Gleitkommazahl. Zeichen Komplexe Zahlen Aufzählungstypen div.Kodierungen Kodierungen div. Mengen Kollektionen Sequenzen Abbildungen Prozeduren aufrufbar Klassen 4 B-CG – V11 – Ergänzungen und Zusammenfassung Python Objekte mutable Rückblick Prof. Dr. Detlef Krömker Institut für Informatik frozenset ( ) set ( ) integer long float decimal complex string ustring tupel ( ) list [ ] dictionary { } def class Hier wird Wissen Wirklichkeit 2 Der Datentyp None ‣ Der Typ None bezeichnet ein Null-Objekt. ‣ Python stellt genau ein Null-Objekt zur Verfügung, das in einem Programm als None geschrieben wird. ‣ Dieses Objekt wird von Funktionen zurückgegeben, die keinen Wert explizit zurückgeben (man kann es auch an Funktionen und Methoden übergeben, um eine leere Argumentliste anzuzeigen). ‣ None hat keinerlei Attribute und ‣ None wird in allen Ausdrücken immer zu logisch falsch ausgewertet. 5 B-CG – V11 – Ergänzungen und Zusammenfassung Prof. Dr. Detlef Krömker Institut für Informatik Hier wird Wissen Wirklichkeit Der Datentyp Bool ‣ Der Datentyp Bool verfügt über zwei vordefinierte Konstanten: True und False ‣ Der Typ Bool ist eine Unterklasse der Klasse int und gibt Instanzen davon anders aus, 0 als False und alle anderen Werte als True Kommentar: nicht sehr schön! ‣ In den meisten Fällen können die Konstanten False als 0 und True als 1 angesehen werden >>> False + 1 1 >>> True + True + 2 4 >>> 6 B-CG – V11 – Ergänzungen und Zusammenfassung Prof. Dr. Detlef Krömker Institut für Informatik Hier wird Wissen Wirklichkeit 3 Boolesche Ausdrücke ‣ Mit den Schlüsselwörtern and, or und not können boolesche Ausdrücke gebildet werden. ‣ Operator Beschreibung x or y Ergibt x, falls x True ist, sonst y x and y Ergibt x, falls x False ist, sonst y not x Ergibt True, falls x False ist, sonst True Bei Verwendung eines Ausdrucks zur Bestimmung eines Wahrheitswertes werden alle von Null verschiedenen Zahlen und alle nicht-leeren Strings, Listen, Tupel oder Dictionaries als logisch wahr betrachtet. Die Zahl Null, None sowie leere Listen, Tupel und Dictionaries werden logisch falsch ausgewertet. Die Auswertung eines booleschen Ausdrucks erfolgt von links nach rechts und verwendet den rechten ‣ ‣ 7 B-CG – V11 – Ergänzungen und Zusammenfassung Prof. Dr. Detlef Krömker Institut für Informatik Hier wird Wissen Wirklichkeit Der Datentyp Enumeration (Aufzählungstyp) ‣ ist ein Datentyp mit einem endlichen Wertebereich. ‣ Alle Werte des Aufzählungstyps werden bei der Deklaration des Typs mit Namen definiert. Dabei wird auch eine Reihenfolge festgelegt, die eine Ordnung der einzelnen Werte bestimmt, die Werte können also sortiert werden. ‣ Aufzählungstypen sind z.B. in den Programmiersprachen Pascal, C++ ein übliches Mittel. (In Java werden Aufzählungen erst seit der Version 5 unterstützt, dafür sind sie hier als echte Objekte mit objektorientierten Mitteln flexibel erweiterbar). ‣ Beispiel aus Java enum Farbe {BLAU, GRUEN, ROT, GELB} 8 B-CG – V11 – Ergänzungen und Zusammenfassung Prof. Dr. Detlef Krömker Institut für Informatik Hier wird Wissen Wirklichkeit 4 Der Datentyp Enumeration in Python ‣ auch in Python 2.5 kein builtin aber „Work in Progress“, siehe PEP 354 (Python Enhancement Proposal) ‣ Vorschlag: Implementierung als unveränderliche Sequenz von Werten anderer Basisdatentypen, wie str oder int ‣ Es wäre möglich, einfach ein tupel oder ein frozenset zu benutzen, aber vs. tupel: enum würde sicherstellen, dass jeder Wert nur einmal vorkommt vs. frozenset: Es ist eine Ordnung definiert ‣ Im Web dindet man gute Implementierungen einer solchen Klasse: z.B. http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/413486 9 B-CG – V11 – Ergänzungen und Zusammenfassung Prof. Dr. Detlef Krömker Institut für Informatik Hier wird Wissen Wirklichkeit Module Größere Python-Programme werden oft als Paket von Modulen organisiert. Der Typ des Moduls ist ein Behälter, der Objekte enthält, die mit der Anweisung import geladen werden. ‣ Wenn in einem Programm z.B. die Anweisung import foo erscheint, wird der Name foo dem entsprechenden Modulobjekt zugeordnet. ‣ Module definieren einen Namensraum, der (mit einem Dictionary implementiert wird und) über die Variable __dict__ zugänglich ist. ‣ Immer wenn ein Attribut des Moduls referenziert wird (mit dem Punktoperator), wird dies in einen Dictionary-Zugriff umgewandelt. ‣ So ist z.B. m.x äquivalent zu m.__dict__["x"]. Genauso ist die Zuweisung an ein Attribut, wie etwa m.x = y, äquivalent zu m.__dict__["x"] = y. 10 B-CG – V11 – Ergänzungen und Zusammenfassung Prof. Dr. Detlef Krömker Institut für Informatik Hier wird Wissen Wirklichkeit 5 Attribute eines Moduls Attribute Beschreibung m.__dict__ Das Dictionary, das zum Modul gehört m.__doc__ Dokumentations-String des Moduls m.__name__ Name des Moduls m.__file__ Datei, aus der das Modul geladen wurde m.__path__ Vollständig qualifizierter Paketname; definiert, wenn das Modulobjekt sich auf ein Paket bezieht 11 B-CG – V11 – Ergänzungen und Zusammenfassung Prof. Dr. Detlef Krömker Institut für Informatik Hier wird Wissen Wirklichkeit Zugriff auf einen Modul Nach import module Zugriff auf Funktionen des Moduls durch module.Funktionsname from module import name Zugriff auf die Funktion name des Moduls einfach durch name from module import * Alle benutzten Namen werden importiert und können unqualifiziert benutzt werden Achtung: Namenskonflikte! 12 B-CG – V11 – Ergänzungen und Zusammenfassung Prof. Dr. Detlef Krömker Institut für Informatik Hier wird Wissen Wirklichkeit 6 Arten von Modulen ‣ In Python geschriebene Programme (.py-Dateien) – ein Modul „entsteht“ durch abspeichern eines Python Programms mit der Endung .py ‣ Erweiterungen in C oder C++, die als dynamische Bibliotheken oder DLLs übersetzt wurden. ‣ Pakete, die eine Anzahl von Modulen enthalten. ‣ Eingebaute (builtin) Module in der Regel in C implementiert, die in den Interpreter gebunden sind, davon gibt es hunderte! 13 B-CG – V11 – Ergänzungen und Zusammenfassung Prof. Dr. Detlef Krömker Institut für Informatik Hier wird Wissen Wirklichkeit Anmerkungen ‣ Bei .py-Dateien gilt, dass sie beim ersten import in Byte-Code übersetzt und in eine neue Datei mit Erweiterung .pyc geschrieben werden. ‣ Bei einem späteren import, lädt der Interpreter diese vorübersetzte Datei, es sei denn, der Zeitstempel der letzten Änderung der .py-Datei ist jünger (dann wird die .pyc-Datei neu erstellt). ‣ Dateien mit Erweiterung .pyo werden zusammen mit der Interpreter-Option -O verwendet und enthalten Byte-Code ohne Zeilennummern, Zusicherungen und andere Debugging-Information. Daher sind sie etwas kleiner und werden vom Interpreter etwas schneller ausgeführt. ‣ Die Übersetzung von Dateien in solche mit Erweiterung .pyc oder .pyo erfolgt nur in Zusammenhang mit der import-Anweisung. ‣ Programme, die auf der Kommandozeile oder in der Standardeingabe definiert werden, erzeugen solche Dateien nicht. 14 B-CG – V11 – Ergänzungen und Zusammenfassung Prof. Dr. Detlef Krömker Institut für Informatik Hier wird Wissen Wirklichkeit 7 Pakete ‣ Pakete erlauben es, eine Anzahl von Modulen unter einem gemeinsamen Paketnamen zu gruppieren. ‣ Diese Technik hilft, Namensraumkonflikte zwischen Modulnamen in verschiedenen Anwendungen aufzulösen. ‣ Ein Paket wird definiert, indem ein Ordner gleichen Namens mit einer Datei __init__.py darin angelegt wird. ‣ Anschließend kann man je nach Bedarf weitere Quelldateien, übersetzte Erweiterungen und Unterpakete in diesen Ordner platzieren. 15 B-CG – V11 – Ergänzungen und Zusammenfassung Prof. Dr. Detlef Krömker Institut für Informatik Hier wird Wissen Wirklichkeit Wichtige Python Module (builtins) Modul sys Zugriff auf einige Umgebungskomponenten, wie Kommandozeile, Standardströme, etc Modul string Konstante und Variable zur Bearbeitung von StringObjekten Modul os Werkzeuge der betriebssystemumgebung: Prozesse Dateien, Shell-Kommandos, etc. Modul re Mustererkennung und Reguläre Ausdrücke Module anydbm, pickle, shelve 16 B-CG – V11 – Ergänzungen und Zusammenfassung Module zur Objekt-Persistenz Prof. Dr. Detlef Krömker Institut für Informatik Hier wird Wissen Wirklichkeit 8 Wichtige weitere Python Module (builtins) ‣ GUI-Modul Tkinter ‣ Internet Module ‣ Modul math ‣ Modul time ‣ Modul datetime ‣ Module zum Threading ‣ ... 17 B-CG – V11 – Ergänzungen und Zusammenfassung Prof. Dr. Detlef Krömker Institut für Informatik Hier wird Wissen Wirklichkeit Eingebaute Funktionen in Python ‣ befinden sich im Modul __builtin__ ‣ sind ohne import verfügbar ‣ Beispiele: hunderte ... abs(N), cmp (X,Y), dir ([Objekt]) ‣ ... siehe Python Docs 18 B-CG – V11 – Ergänzungen und Zusammenfassung Prof. Dr. Detlef Krömker Institut für Informatik Hier wird Wissen Wirklichkeit 9 Anmerkungen zum Programmierstil Worum geht es: Konventionen, also ein Satz von Regeln, nach welchen der Quelltext eines Programms erstellt wird. Es ist üblich, für alle größeren Softwareprojekte solche Regeln in „Programmierhandbüchern“ festzulegen. Einige Qualitätsnormen im Softwareumfeld fordern explizit die Anwendung bestimmter Regelwerke. Die bekanntesten Regelwerke dürften die GNU coding standards für C-Programme im Umfeld der Free Software Foundation und z.B. für Java die Code Conventions von SUN sein. 19 B-CG – V11 – Ergänzungen und Zusammenfassung Prof. Dr. Detlef Krömker Institut für Informatik Hier wird Wissen Wirklichkeit Anmerkungen zum Programmierstil (2) Der Zweck eines definierten Programmierstils ist die Erleichterung der Arbeit aller an einem Programmierprojekt beteiligten Teammitglieder. Das bezieht sich insbesondere auf: ‣ Lesbarkeit ‣ Verständlichkeit ‣ Wartbarkeit Elemente sind ‣ ‣ ‣ ‣ ‣ ‣ ‣ 20 Einrückung von untergeordneten Programmelementen (Einrückungsstil), Positionierung Blockbildener Syntaxelemente wie {}, [], (), BEGIN, END, Einsatz von Leerzeichen und Leerzeilen, Einsatz von Kommentaren: Namenskonventionen Reihenfolge der Deklaration von Namen, Länge von Namen und Verschachtelungstiefe untergeordneter Programmelemente. B-CG – V11 – Ergänzungen und Zusammenfassung Prof. Dr. Detlef Krömker Institut für Informatik Hier wird Wissen Wirklichkeit 10 Anmerkungen zum Programmierstil (3) ‣ Diese Elemente beziehen insbesondere auf die optische Lesbarkeit eines Programms. ‣ Style Checker können die meisten der oben genannten Kriterien überprüfen. Beautifier sind in der Lage, durch Umformatierung des Quelltextes die Einhaltung eines guten Stils bezüglich dieser Kriterien zu gewährleisten. Aber Vorsicht, ein Beautifier verbessert den „optischen“ Stil – die wirklich wichtigen Aspekte guter Programmierung können kaum überprüft werden ‣ ... gewöhnen Sie sich einfach einen guten Programmierstil an, dann brauchen Sie diese Programme in der Regel nicht! 21 B-CG – V11 – Ergänzungen und Zusammenfassung Prof. Dr. Detlef Krömker Institut für Informatik Hier wird Wissen Wirklichkeit Anmerkungen zum Programmierstil (4) Wichtiger sind jedoch folgende, automatisch nur schwer zu überprüfende Kriterien: ‣ Umsetzung des gewählten Programmierparadigmas, wie zum Beispiel der Objektorientierten Programmierung; (Früher hieß es mal: Ein guter FortranProgrammierer kann in jeder Sprache Fortran programmieren!) ‣ Anwendung von Entwurfsmustern ‣ Vermeidung von Redundanz ‣ Löschung überflüssiger Programmteile ‣ Unabhängigkeit verschiedener Programmteile voneinander ‣ Abstraktionsgrad und Verallgemeinerung ‣ Wiederverwendbarkeit ‣ Robustheit ‣ Fehler- und Ausnahmebehandlung ‣ u.a. für Python finden Sie eine Empfehlung im Skript 22 B-CG – V11 – Ergänzungen und Zusammenfassung Prof. Dr. Detlef Krömker Institut für Informatik Hier wird Wissen Wirklichkeit 11 Zusammenfassung PRG 1 – Teil 1 V 0 ---V 1 V 2 V 3 ---V 4 V 5 ---V 6 V 7 ---V 8 V 9 V10 V11 23 Begrüßung und Einführung Daten – Information – Wissen Computer – Algorithmus – Programm Variablen – Datentypen – Objekte Elementare numerische Datentypen Zeichenketten Verzweigungen und Schleifen Prozeduren Aggregierte Datentypen Klassen Graphen und Bäume Bibliotheken, ... B-CG – V11 – Ergänzungen und Zusammenfassung Grundlegende Elemente der informatischen Bildung: Zentrale Begriffe Wichtige Datentypen Strukturierte Programmierung Objektorientierte Programmierung Prof. Dr. Detlef Krömker Institut für Informatik Hier wird Wissen Wirklichkeit Was haben wir (noch) nicht gemacht? Exeptions und Event-based Programming in Python diverse Details, zum Beispiel Stringmanipulation, usw.. Nachlesen, in der Python-Dokumentation ein kleiner Teil des Skripts fehlt noch V10-11 fehlt noch ... wird sehr bald nachgeliefert Möglichkeiten zum Selbsttest (Multiple-Choice Fragen, demnächst!), als Fragen sicher noch vor Weihnachten Evaluation und Studienbedingungen ... wir brauchen Feedback! 24 B-CG – V11 – Ergänzungen und Zusammenfassung Prof. Dr. Detlef Krömker Institut für Informatik Hier wird Wissen Wirklichkeit 12 Fragen und (hoffentlich) Antworten 25 B-CG – V11 – Ergänzungen und Zusammenfassung Prof. Dr. Detlef Krömker Institut für Informatik Hier wird Wissen Wirklichkeit Ausblick [Teil 2 - Drobnik] Elemente des Softwareengineerings ‣ Testen ‣ Entwicklungszyklen, Anforderungen, Spezifikation, Korrektheit, Dokumentation. ‣ Algorithmenkonstruktion [Teil 3 - Brause] Betriebssysteme [Teil 4 - Drobnik] Elemente von Computernetzwerken Danke für Ihre Aufmerksamkeit! Es hat Spaß gemacht! 26 B-CG – V11 – Ergänzungen und Zusammenfassung Prof. Dr. Detlef Krömker Institut für Informatik Hier wird Wissen Wirklichkeit 13