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, 10.+11. Okt. 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
3. 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
3.2 Umfrage zur Lesbarkeit von Programmier-Sprachen
Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -7-
Die Skriptsprache Python im Kontext
des Softwareentwicklungsprozesses
4.1 Python-Syntax: Kriterium integrierte Datentypen
>>>
>>>
>>>
>>>
zahl = 3.141
tupel = (7, 42)
text = 'Hallo.'
print text*2
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]
>>> 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
4.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
4.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
4.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)
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
4.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
4.4.2 Prädikative Entwicklung
Prolog
Python+Holmes
weg(rein,28).
weg(28,37).
....
weg(43,61).
weg(41,raus).
rule
rule
....
rule
rule
weg(A,B):-weg(B,A),!.
rule r1 if weg ?a nach ?b, weg ?b nach ?c
then
tour ?a nach ?c.
gehe(Raus,Raus,Weg).
gehe(Woher,Raus,AlterWeg):-weg(Woher,A),
nicht_drin(AlterWeg,A),
gehe(A,Raus,[A|AlterWeg]).
nicht_drin(Liste,A):-enthaelt(Liste,A),
write(['gehe zurueck nach',A]),nl,
!,fail.
nicht_drin(Liste,A):-write(['gehe nach',A]),nl.
f01 if true then weg rein nach 28.
f02 if true then weg 28 nach 37.
f19 if true then weg 43 nach 61.
f20 if true then weg 41 nach raus.
rule r2 if weg ?a nach ?b, tour ?b nach
?c then
tour ?a nach ?c.
?- tour rein nach raus
.
enthaelt([Element|_],Element).
enthaelt([_|Tail],Element):-enthaelt(Tail,Element).
Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -13-
Die Skriptsprache Python im Kontext
des Softwareentwicklungsprozesses
4.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, -14-
Die Skriptsprache Python im Kontext
des Softwareentwicklungsprozesses
4.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, -15-
Die Skriptsprache Python im Kontext
des Softwareentwicklungsprozesses
4.7 Kriterium Lernsoftware
Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -16-
Die Skriptsprache Python im Kontext
des Softwareentwicklungsprozesses
4.7.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, -17-
Die Skriptsprache Python im Kontext
des Softwareentwicklungsprozesses
4.7.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, -18-
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, -19-
Die Skriptsprache Python im Kontext
des Softwareentwicklungsprozesses
5.1 Diskussion: Kritik & offene Fragen
• Integration aller Paradigmen fachdidaktisch vorteilhaft?
• Lernziele? (Modellierung, Algorithmik, Anwendung)
• Praxisrelevanz (C++/Java) vs. Verständnis (Python)
• Wenig schulische Python-Erfahrungen in Deutschland (gute in NL)
• Bedeutung integrierter grafischer Entwicklungsumgebungen?
Ingo Linkweiler, [email protected]
Software im Internet:
www.ingo-linkweiler.de/diplom
Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -20-
Die Skriptsprache Python im Kontext
des Softwareentwicklungsprozesses
Beispiele...[PyNassi.py] u.a.
Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -21-
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, -22-