presentation

advertisement
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,
i.linkweiler@gmx.de
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-
Herunterladen