Informatik
Fachdidaktik

- Objektorientiertes Modellieren mit Python im Informatikunterricht -

Referat

S. Spolwig
Hauptseminar
WS 2003/4

[Home | Aktuelles | Dokumente | Inhalt | Literatur | Organisation]
[Startseite]


Python als Werkzeug im Informatikunterricht

von
Jeanine Umlang und Clemens Wagner




Gliederung/Inhalt


1. Die Sprache

1.1 Geschichte, Sprachkonzept

1.2 Verfügbarkeit

2. Einführung in die Syntax

3. Vorstellen der verfügbaren Entwicklungsumgebungen und GUI-Builder

3.1 Python-Oberflächen

3.2 Entwicklungsumgebungen mit GUI-Builder

B. Abkürzungen

C. Lösung der Aufgabe 6 (loes6.py)






1. Die Sprache

1.1 Geschichte, Sprachkonzept

Python wurde Anfang der 90er Jahre von Guido van Rossum als Testumgebung für ein neues Betriebssystem entwickelt.

Entwicklung der Programmiersprachen

Python ist eine portable, objektorientierte Skriptsprache. Die Syntax ist kurz und ausdrucksstark. Durch die Einbindung von Modulen ist Python leicht erweiterbar.

1.2 Verfügbarkeit

Python wird zur Zeit von der nicht-kommerziellen Python Software Foundation entwickelt. Das Sprachpaket selbst und viele Erweiterungsmöglichkeiten, Entwicklungsumgebungen und GUI-Builder sind frei verfügbar. Siehe dazu die Linkliste.



2. Einführung in die Syntax

Datentypen

Der Typ einer Variablen wird durch Zuweisung festgelegt.

Skalare:
integer i = 1
long integer li = 9999999999L
float f = 3.14
complex c = 3+4j
string s = ' Hallo '
Sequenzen:
Listen L = [1, 3]
Tupel T = (1, 3)
Dictionarie: D = {'b': 'Python', 'a': 5}
Operatoren () [] {} `` [:] . + - ~ ** * / % << >> & ^ | is in < <= > >= == <> != not and lambda or
Anweisungsfolgen Anweisungen der selben logischen Gruppe stehen gleichmäßig eingerückt if a > 0:
b = 1
c = 2
Anweisungstrennung in einer Zeile mit ' ; ' if a > 0:
b = 1; c = 2
Fortsetzung einer Anweisung in die nächste Zeile mit ' \ ' oder wenn noch Klammern "offen sind".
Bedingte Anweisungen if, elif und else if a > b:
print 'a ist groesser als b.'

elif a < b:

print 'a ist kleiner als b.'

else:

print 'a ist gleich b.'
Schleifen

Vorzeitiges Verlassen der Schleife: break
Direkter Sprung zum Anfang der Schleife:
continue

while liste = []
i = 0
while i < 100:
liste.append(i)
i = i + 1
for liste = []
for i in range(100):
liste.append(i)
Funktionen

def

Es kann ein Rückgabewert in der return-Anweisung angegeben werden, wenn nicht, ist der Rückgabewert der besondere Wert None.

def fac(x):
if x==1:
return 1
return x*fac(x-1)

Module
  • Module sind Programmteile, die in eigene Dateien geschrieben werden, um sie in mehreren Programmen verwenden zu können.
  • Es gibt keine besondere Anweisung, um ein Modul als solches zu kennzeichnen. Ein Modul unterscheidet sich von einem Programm nur durch die Verwendung, nicht durch speziellen Code.
# EinModul.py
# Definiere das Modul EinModul

var1 = 1
var2 = [2, 3]

def quadrat(x):
return x * x
  • In andere Dateien wird das Modul durch eine import -Anweisung geladen.

import EinModul

test = EinModul.var1 # test = 1
test = EinModul.quadrat(7) # test = 49
  • Namen eines Moduls können importiert werden, indem import zusammen mit from benutzt wird. Sonst wird nur der Name des Moduls importiert.
from EinModul import var1
# importiere nur var1;
# test = var1 ist damit möglich

from EinModul import var1, var2
# importiere var1 und var2

from EinModul import *
# importiert alle Namen, die nicht mit
_ beginnen.

Objekte
  • Objekte bieten Variablen und Funktionen (Methoden), die auf diese Daten wirken.
  • Es kann mehrere Objekte der selben Art (Instanzen) geben (in unserem Beispiel mehrere öfen), die unabhängig voneinander sind.
# ofen.py

class Ofen:
def __init__( self ):
self.temperatur = 20 # Raumtemperatur
self.klappe_auf = 0 # Klappe zu
self.material = None # Ofen ist leer


def klappe_oeffnen( self ):
if self.temperatur > 20:
print "Bitte vor dem Oeffnen der Klappe den Ofen abkuehlen!"
return
self.klappe_auf = 1


def klappe_schliessen( self ):
self.klappe_auf = 0


def fuellen_mit( self, material ):

if not self.klappe_auf:
print "Bitte vor dem Fuellen die Klappe oeffnen!"
return

self.material = material


def aufheizen( self, temperatur ):

if self.klappe_auf:
print "Bitte vor dem Aufheizen die Klappe schliessen!"
return

self.temperatur = temperatur


def abkuehlen( self ):

self.temperatur = 20
Klassen
  • Eine Klasse wird mit der class-Anweisung erzeugt.
  • Der Konstruktor, __init__, erzeugt eine neue Instanz. Die Verbindung von Objektinstanz und Klasse geschieht implizit.
  • Der Konstruktor kann die neue Instanz mit Werten initialisieren.
  • Methoden einer Klasse erhalten die Objektreferenz als ersten Parameter.
  • Eine Klasse kann von einer (oder mehreren) anderen erben, indem der Name der "beerbten" Klasse als Argument der class-Anweisung eingesetzt wird.

Vererbung Die Ableitung neuer Klassen von bereits bestehenden nennt man Vererbung. Aus der bestehenden Klasse Ofen kann man eine neue Klasse Umluftherd erzeugen, bei der zusätzlich die Umluft ein- und ausgeschaltet werden kann.

#umluftherd.py

import ofen

class Umluftherd( ofen.Ofen ):

def __init__( self ):
ofen.Ofen.__init__( self )
self.umluft = 0


def umluft_an( self ):

self.umluft = 1


def umluft_aus( self ):

self.umluft = 0

3. Vorstellen der verfügbaren Entwicklungsumgebungen und GUI-Builder

3.1 Python-Oberflächen

IDLE

Pythonwin

3.2 Entwicklungsumgebungen mit GUI-Builder

Die Wahl der IDE hängt von der Wahl der GUI-Bibliothek ab. Zur Verfügung stehen zum Beispiel:

Tkinter
für Tk (das GUI Toolkit zur Scriptsprache Tcl, ist Teil des Python-Pakets)

Easygui
Quick and Dirty - GUI-Funktionen
Für den Schuleinsatz nicht geeignet, da die Objektorientierung verschleiert wird!

wxWindows/wxPython
Plattformübergreifendes GUI-Toolkit

Boa Constructor
++ sehr umfangreich (IDE integriert alle nötigen Funktionen)
+ übersichtliche Gliederung der Oberfläche
+ guter Objektinspektor
- Entwickeln von Programmen ohne GUI ist zu aufwendig, bzw. wird unnötiger Code generiert
Arbeit mit Templates wäre sinnvoll

VisualWx
+ umfangreich
+ übersichtlich gegliedert
+- etwas sperriger Objektinspektor
Vergleichbar mit dem "Boa Constructor", Arbeit mit Templates wäre sinnvoll

Python Card
- Das gestaltete GUI wird nicht in Python-Code, sondern in einer Resource-Datei gespeichert. Dadurch geht der Bezug zu GUI-Elementen als Objekten verloren.- Zwei verschiedene Oberflächen für Code-Erstellung ("Code Editor") und GUI-Erstellung ("Resource Editor")

SpecTix
- unübersichtlich
- stark eingeschränkter Funktionsumfang

Dazu jeweils:
wxWindows Reference (Help)
für Anfänger unerlässlich und gut handhabbar


4. Python im Informatikunterricht?!

4.1 Pro

-Die Syntax zwingt dazu, gut lesbare Programme zu schreiben und sie ist sehr einfach zu lernen
-Python ist wegen der Klarheit der Syntax und des konsequenten Sprachkonzepts gut geeignet um Programmierkonzepte zu lernen!
-"named parameter" ermöglichen die Verwendung von Klassen mit Default-Parametern
-Einfache grafische Oberflächen können dank der mitgelieferten Tk-Bibliothek auch "zu Fuß" programmiert werden
-Es gibt brauchbare Entwicklungsumgebungen mit GUI-Buildern

4.2 Contra   

-Zugriffskontrolle bei Klassenelementen ist nur als Hilfkonstrukt verfügbar (dafür: übersichtliche Syntax)
-Angabe von "self" bei der Methodendeklaration ist überflüssig (verdeutlicht aber die Programmstruktur!)
-Lokale und globale Variablen können leicht verwechselt werden
-Die Mischung von objektorientiertem und funktionalem Sprachkonzept erschwert das Verständnis der beiden aus ganz verschiedenen Richtungen kommenden Ansätze

4.3 Diskussionspunkte

Zugriffskontrolle (weniger Laufzeitfehler)          <----->       einfache Syntax (verantwortungsvolle Programmierung)




A. Literatur- und Linkliste

Arnhold, Werner: "Lieben Sie PYTHON?", in: LOG IN 21 (2001) Heft 2
http://log-in.fachdid.fu-berlin.de/Archiv/2001/2/Thema/

Problemlösen mit Python.
Vier Skripte zum Wahlfach Informatik, Themenbereich "Modellierung und Problemlösen"
http://www.th.schule.de/th/lfk-informatik/material/download/preprint.pdf

Eignet sich die Skriptsprache Python für schnelle Entwicklungen im Softwareentwicklungprozess?
(Diplomarbeit von Ingo Linkweiler)
http://www.icc-computer.de/ingo/diplom/

Stefan Schwarzer: "Die Programmiersprache Python - ein Überblick"
http://home.tu-clausthal.de/~svss/python_vortrag/

Martin von Löwis, Nils Fischbeck:
"Python 2. Einführung und Referenz der objektorientierten Skriptsprache", München, 2001 (Addison-Wesley)

Kokavecz, Dr. Bernd: "Objektorientierte Programmierung mit Python"
http://www.b.shuttle.de/b/humboldt-os/python/

Python-Wiki
http://www.pythonwiki.de/

---

Python-Home:
http://www.python.org

Pythonwin:
http://starship.python.net/crew/mhammond/win32/Downloads.html (Win32 Extensions)

PythonCard:
http://pythoncard.sourceforge.net/

Boa-Constructor:
http://boa-constructor.sourceforge.net/

VisualWx:
http://visualwx.altervista.org/

WxPython/WxWindows:
http://www.wxpython.org/
http://www.wxwindows.org/



B. Abkürzungen

API = Application Programming Interface
GUI =
Graphical User Interface
IDE = Integrated Development Environment
RAD =
Rapid Application Development


C. Lösung der Aufgabe 6 (loes6.htm)

 



27. Juli 20061. Dezember 2003 Jeanine Umlang, Clemens Wagner