Einstieg

[Back]     [MVC Konzept]

EVA - Eingabe - Verarbeitung - Ausgabe - Programme in Python

Um ein Programm zu entwickeln, ist die Vorgehensweise anfangs rein sequentiell , man arbeitet nacheinander die Befehle ab und erreicht entsprechende Ergebnisse. Dabei ist es für EVA - Programme notwendig, der Eingabe die Verarbeitung folgen zu lassen und nicht umgekehrt. Ein einfaches Volumenberechnungsprogramm würde sich wie folgt darstellen.

01   a = input ()
02   b = input ()
03   c = input ()
04 
05   V = a * b * c
06 
07   print V

Dieses sehr einfache und selbsterklärende Programm hat gravierende Mängel. Der offensichtlichste ist die fehlende Benutzerführung. Der Benutzer hat keine Ahnung was passiert. Jedoch das kann man ändern .

01   a = input ("Geben Sie einen Wert für a ein : ")
02   b = input ("Geben Sie einen Wert für b ein : ")
03   c = input ("Geben Sie einen Wert für c ein : ")
04 
05   V = a * b * c
06 
07   print V

Auch dieser sequentielle Code ist unzureichend. Hier sticht die Redundanz hervor. Es macht aus Effizienz und Speichergründen keinen Sinn, gleichen Code mehrfach aufzurufen. Einen Ausweg bietet die Verwaltung der einzelnen Schritte über einzelne Methoden. Die Methoden werden in einer separaten Testumgebung aufgerufen. Der Gesamttext wird hier zwar länger, aber es wurden universell einsetzbare Methoden geschaffen, die auch in einem anderen Kontext Verwendung finden können.

01   def eingabe ():
02              return input ("Geben Sie einen Wert für a ein : ")
03 
04   def verarbeitung (a,b,c):
05              return a * b *c
06 
07   def ausgabe (wert):
08              return print ("\n\tDas Volumen beträgt %d" %(wert))
09 
10 # Testumgebung
11 
12   a = eingabe ()
13   b = eingabe ()
14   c = eingabe ()
15 
16   V = verabeitung (a, b, c)
17 
18   ausgabe (V)
19 

Hierbei werden Variablen übergeben, deren Typ eine entscheidende Rolle bei der Verarbeitung spielen. Scheinbar komplizierter, aber die hier vage angedeutete Vorgehensweise ist ein Schritt in Richtung Arbeitsteilung. Dadurch werden wichtige Softwarequalitäten erreicht, die vor allem in größeren Systemen eine entscheidende Rolle spielen.

In Anwendungen werden oft grafische Interfaces geschaffen, die dem Benutzer die Arbeit mit der Software erleichtern sollen (?). Trotzdem dies nicht der Kern der Programmierung ist, sondern eher zeitraubend und weit an den Konzepten vorbei, unser Beispiel nun etwas bunter.

01 import Tkinter
02 from Tkconstants import *
03 
04 def verarbeitung () :
05             a = float (eingabe1.get ())
06             b = float (eingabe2.get ())
07             c = float (eingabe3.get ())
08 
09             V = a * b * c
10 
11             ergebnis ["text"] = V
12 
13 # GUI Testumgebung
14 
15 win         = Tkinter.Tk ()
16 win ["bg"]  = "green"
17 win.title ("Voluminator")
18 
19 fenster     = Tkinter.Frame (win)
20 fenster.pack ()
21 
22 eingabe1    = Tkinter.Entry (fenster)
23 eingabe2    = Tkinter.Entry (fenster)
24 eingabe3    = Tkinter.Entry (fenster)
25 
26 eingabe1.pack (side="left")
27 eingabe2.pack (side="left")
28 eingabe3.pack (side="left")
29 
30 Rechenknopf = Tkinter.Button (fenster, text="V", command = verarbeitung)
31 Rechenknopf.pack ()
32 
33 ergebnis   = Tkinter.Label ()
34 ergebnis.pack ()
35 
36 Tkinter.mainloop ()

Ausgehend von diesem Einstieg ist es nun möglich, sich genauer mit Problemen der Programmierung zu befassen und sich später komlexeren Datenstrukturen (objektorientiert) zu nähern.i


Modell - View Konzept


Um Programme mit einer grafischen Oberfläche zu versehen, ist es notwendig, sogenannte Geometriemanager zu verwenden. Ein etwas komplexeres Beispiel gegenüber dem oberen nun im folgenden.

Dabei wurde die Oberflächenklasse bewußt schmal gehalten, um das Konzept zu verdeutlichen. Die Fachklasse oder das Modell, auf welches sich die GUI abstützt, ist dabei noch einfacher. Dies demonstriert recht klar die Gefahr, die mit der Schaffung einer GUI verbunden ist ... das eigentliche Konzept des Programms verschwindet zugunsten von zugegeben schönen bunten Bildern.




Modell

01  def summe (zahl, zahl1)     :  return zahl + zahl1  
02  def differenz (zahl, zahl1) :  return zahl - zahl1  
03  def produkt (zahl, zahl1)   :  return zahl * zahl1  
04  def quotient (zahl, zahl1)  :  return zahl / zahl1  

[TOP]

View


Und nun die erheblich kompliziertere GUI

01 import Tkinter
02 from Tkconstants import *
03 
04 class eingabe :
05             
06   def __init__(self):
07 
08       win         = Tkinter.Tk ()
09       win ["bg"]  = "blue"
10       win.title ("Rechner")
11 
12       frame1     = Tkinter.Frame (win, bg ="blue")
13       frame1.pack (padx=5, pady=5, side="left", fill=BOTH, expand=1)
14 
15       frame2     = Tkinter.Frame (win, bg ="blue")
16       frame2.pack (padx=5, pady=5, side="left", fill=BOTH, expand=1)
17 
18       # Eingabefenster
19       self.zahl    = Tkinter.Entry (fenster)  
20       self.zahl.pack ()
21       self.zahl1    = Tkinter.Entry (fenster)
22       self.zahl1.pack ()
23 
24       # Button
25       self.Knopf  = Tkinter.Button (frame2, text="+", command = self.add)
26       self.Knopf1 = Tkinter.Button (frame2, text="-", command = self.min)
27       self.Knopf2 = Tkinter.Button (frame2, text="*", command = self.mal)
28       self.Knopf3 = Tkinter.Button (frame2, text=":", command = self.durch)
29       self.Knopf.pack (padx=5, pady=5)
30       self.Knopf1.pack (padx=5, pady=5)
31       self.Knopf2.pack (padx=5, pady=5)
32       self.Knopf3.pack (padx=5, pady=5)
33 
34   def get_eingabe1 (self) : return float (self.zahl.get ())
35   def get_eingabe2 (self) : return float (self.zahl1.get ())
36        
37   def add (self) : 
38       self.fenster ["text"]= summe (self.get_eingabe1(), self.get_eingabe2()))   
39 
40   def min (self) : 
41       self.fenster ["text"]= differenz (self.get_eingabe1(), self.get_eingabe2()))   
42 
43   def mal (self) : 
44       self.fenster ["text"]= produkt (self.get_eingabe1(), self.get_eingabe2()))   
45 
46   def durch (self) : 
47       self.fenster ["text"]= quotient (self.get_eingabe1(), self.get_eingabe2()))   
48 
49 if __name__=="__main__":
50 
51    test = eingabe1()
52    Tkinter.mainloop ()



[Fachmodul]     [GUI Klasse]    [TOP]