Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses Ergebnisse der Untersuchung zur Eignung einer Programmiersprache für die schnelle Softwareentwicklung kann der Informatikunterricht davon profitieren? Zur Diplomarbeit: „Eignet sich die Skriptsprache Python für schnelle Entwicklungen im Softwareentwicklungsprozess?“ Ingo Linkweiler, 24. Sep. 2002 Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -1- Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses 1.1 Ansatz (Thema der Diplomarbeit): Untersuchung der Programmiersprache Python für die schnelle Softwareentwicklung: • Rapid Prototyping • Extreme Programming • Pair Programming Verfahren werden alltäglich eingesetzt. Praxisgenutzte Werkzeuge: Skriptsprachen wie Perl, Python und Tcl Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -2- Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses 1.2 Kann der Informatikunterricht davon profitieren? Parallelen bei den Anforderungen an die konkrete Programmiersprache? Hypothese: • Anforderungen an eine Programmiersprache zur schnellen Softwareentwicklung ~= informatischen Bildung: Es ist möglich, beiden Anforderungen gerecht zu werden. Eignung der Programmiersprache Python ? Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -3- Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses 2. Vorgehensweise Ziel: Beurteilung von Programmiersprachen. Anfragen / Diskussion zu Anforderungen an Programmiersprachen mit Informatikern Lehrern Kriterienkatalog(e) zur Beurteilung einer Programmiersprache Python: Auswertung, Sprachvergleiche, Fallstudien Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -4- Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses 2.1 Kriterien und Ergebnisse Schnelle Softwareentwicklung Interessen professioneller Entwickler GUI-Entwurf Rapid Prototyping Generatoren Bibliotheken Dokumentation Wiederverwendung … Portabilität Teamarbeit Lesbarkeit Fehlertoleranz … ? Schüler, Ausbilder Grundlagen Erlernbarkeit Algorithmen Leichte Syntax Orthogonalität … Gemeinsamkeiten? Konflikte? Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -5- Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses 2.2 Umfrage zur Lesbarkeit von Programmier-Sprachen Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -7- Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses 3.1 Python-Syntax: Kriterium integrierte Datentypen >>> >>> >>> >>> zahl = 3.141 tupel = (7, 42) text = 'Hallo.' print text*2 Dynamische Typisierung Hallo. Hallo. >>> komplex = complex(5,-2) >>> hash = {1: 'abc', 2: 'def' >>> liste = [0,1,2,3,4,5] >>> print liste[2:5] [2,3,4] } Notation für erweiterte Datentypen >>> print liste[:3] [0,1,2] for i in liste: tuwas(i) Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -8- Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses 3.2 Kriterium: Einfach zum Ziel - Java vs. Python Static? Public? Args? Void? Java class HelloWorld { public static void main(String[] args) { System.out.println("Hallo Welt."); } } Python print 'Hallo Welt.' Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -9- Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses 3.3 Pascal vs. Python Pascal Python program Test; var i: integer; i:=0; begin while i<10 do ; begin i:=i+1; writeln(i); end; writeln('fertig.'); ? Keine Deklaration u. Zeilentrenner, Blockbildung durch Einrücken i=0 while i<10: i=i+1 print i print 'Fertig.' end. Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -10- Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses 3.4 Paradigmen: Beispiel Wertetabelle # Imperativ / Prozedural von = -5 bis = 5 funktion = "x*x-10" for x in range(von,bis): print eval(funktion) # Objekt-Orientiert Ausführung von Funktionen / Quelltext zur Laufzeit class Funktion: def __init__(self, term): self.term=term def setze_Wertebereich(self,von,bis): self.von=von self.bis=bis def ausgeben(self,x): print eval(self.term) def tabelle(self): for i in range(self.von,self.bis-self.von): self.ausgeben(i) Keine Speicheranforderungen, keine Typdefinition f=Funktion("x*x-10") f.setze_Wertebereich(-5,5) f.tabelle() Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -11- Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses 3.4.1 Paradigmen # Funktional def auswerten(funktion,x): print eval(funktion) def tabelle(funktion,von,bis): map(auswerten, [funktion]*(bis-von), range(von,bis)) tabelle("x*x",-5,5) Prädikative Programmierung (vgl. Prolog): • möglich (Holmes, Pylog) • wenig dokumentiert • nicht in Syntax integriert Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -12- Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses 3.5 Kriterium: Schnelle Entwicklung = Baukastenprinzip aus der Prototypentwicklung & Spielwarenabteilung. Idee: Kombination fertiger Bausteine / Komponenten zu etwas Neuem. Beispiel: Lesen einer Webseite per HTTP: import urllib datei = urllib.urlopen("http://www.uni-dortmund.de") text = datei.read() datei.close() Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -13- Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses 3.6 Beispiel: E-Mail versenden. import smtplib def eingabe(prompt): return raw_input(prompt).strip() smtphost fromaddr toaddrs subject msgtext = = = = = eingabe("Adresse des Mailservers: ") eingabe("Von........: ") eingabe("An.........: ") eingabe("Betreff....: ") eingabe("Nachricht..: ") # Erzeuge den Mail-Header msg = ("From: %s\r\n To: %s\r\n Subject: %s\r\n\r\n" % (fromaddr, toaddrs, subject) ) # Nachricht anhängen msg = msg + msgtext server = smtplib.SMTP(smtphost) server.sendmail(fromaddr, toaddrs, msg) server.quit() Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -14- Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses 4.1 Kriterium Lernsoftware Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -15- Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses 4.2 Funktionsplotter mit „Von Stiften und Mäusen“ from sum import * # Funktion einlesen # Objekte erzeugen bild = Bildschirm() stift = Stift(bild) # Mit Stift ein Diagramm zeichnen stift.bewegeBis(10,10) stift.schreibe("Funktionsplotter") stift.zeichneLinie(0,200, 639,200) stift.zeichneLinie(320,0, 320,399) for x in range(-20,20): stift.zeichneLinie( x*10+320,198, x*10+320,202) print "Funktion eingeben:" funktion = raw_input("f(x)=") # Funktion zeichnen for x in range(-20, 20): y = eval(funktion) print "f(" , x, ")=" ,y stift.bewegeBis( x*10+320,200-y*10) stift.runter() bild.GibFrei() for y in range(-20,20): stift.zeichneLinie(318,y*10+200, 322,y*10+200) Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -16- Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses 4.3 Stifte & Mäuse: Java ....... vs. ....... Python public class RechteckProgramm4 { //Deklarationsteil private Bildschirm bildschirm; private Stift stift; private Maus maus; public void fuehreAus() { bildschirm=new Bildschirm(); stift = new Stift(); maus = new Maus(); stift.hoch(); stift.bewegeBis(20,20); stift.zeichneRechteck(100,100); while (!maus.istGedrueckt()){;} maus.gibFrei(); maus=null; stift.gibFrei(); stift=null; bildschirm.gibFrei(); bildschirm=null } } bildschirm = Bildschirm() stift = Stift(bildschirm) maus = Maus(bildschirm) stift.hoch(); stift.bewegeBis(20,20) stift.zeichneRechteck(100,100) while not maus.IstGedrueckt(): pass maus.GibFrei() stift.GibFrei() bildschirm.GibFrei() Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -17- Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses 5. Fazit Hypothesen durch Kriterien und an Beispielen überprüft. (heute nur sehr kleinen Teil gezeigt) • Anforderungen an eine Programmiersprache zur schnellen Softwareentwicklung ~= informatischen Bildung: Es ist möglich, beiden Anforderungen gerecht zu werden. • Python und verfügbare Werkzeuge eignen sich sowohl zur schnellen Softwareentwicklung als auch zum Einsatz in der informatischen Bildung. Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -18- Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses Ingo Linkweiler, [email protected] Software im Internet: www.ingo-linkweiler.de/diplom Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -19- Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses Beispiele...[PyNassi.py] u.a. Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -20- Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses Inhalt: 1. Einleitung, Hypothese 2. Kriterien und Ergebnisse 3. Python 4. Fallstudien 5. Fazit Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -21-