UML-Entwurf der Klasse „Stack“ in Modelio:
Übertragen der UML-Datei in Pycharm:
Methodensignaturen ohne Rückgabewerte
class Stack: def __init__(self): pass def pop(self): pass def peek(self): pass def push(self, inhalt): pass def getStacklistenlaenge(self): pass def istLeer(self): pass
Vollständige Implementierung des Stacks:
class Stack: def __init__(self): self.stackliste = [] self.stacklistenlaenge = 0 def pop(self): if self.istLeer() == False: self.stacklistenlaenge = self.stacklistenlaenge -1 return self.stackliste.pop() def peek(self): if self.istLeer() == False: return self.stackliste[self.stacklistenlaenge-1] def push(self, inhalt): self.stackliste.append(inhalt) self.stacklistenlaenge = self.stacklistenlaenge + 1 def getStacklistenlaenge(self): return self.stacklistenlaenge def istLeer(self): if self.stacklistenlaenge <= 0: return True else: return False
UML-Entwurf Browser-Funktionalität „Vorwärts / Rückwärts“
Vollständige Implementierung der Funktionalität:
class Stack: def __init__(self): self.stackliste = [] self.stacklistenlaenge = 0 def pop(self): if self.istLeer() == False: self.stacklistenlaenge = self.stacklistenlaenge -1 return self.stackliste.pop() def peek(self): if self.istLeer() == False: return self.stackliste[self.stacklistenlaenge-1] def push(self, inhalt): self.stackliste.append(inhalt) self.stacklistenlaenge = self.stacklistenlaenge + 1 def getStacklistenlaenge(self): return self.stacklistenlaenge def istLeer(self): if self.stacklistenlaenge <= 0: return True else: return False class Browsersimulation: def __init__(self): self.vorwaertsStack = Stack() self.rueckwaertsStack = Stack() def vorwaertsKnopf(self): self.temp = self.vorwaertsStack.peek() self.rueckwaertsStack.push(self.temp) self.vorwaertsStack.pop() def rueckwaertsKnopf(self): self.temp = self.rueckwaertsStack.peek() self.vorwaertsStack.push(self.temp) self.rueckwaertsStack.pop() # self.vorwaertsStack.push(self.rueckwaertsStack.pop()) def nutzereingabe(self, userinput): self.rueckwaertsStack.push(userinput) # nach jeder Nutzereingabe muss der Vorwaertsstack gelöscht werden self.vorwaertsStack.stackliste = [] # Verletzung der OOP-Regeln!! def ausgabe(self): print("------------------") print("vorwaertsStack:", self.vorwaertsStack.stackliste) print("rückwärtsStack:", self.rueckwaertsStack.stackliste) test = Browsersimulation() test.nutzereingabe("http://www.spiegel.de/") test.nutzereingabe("http://www.zeit.de/") test.nutzereingabe("http://www.n-tv.de/") test.ausgabe() test.rueckwaertsKnopf() test.ausgabe() test.vorwaertsKnopf() test.ausgabe()
Die Instanz „test“ ist hier ein Testobjekt, um die Funktionalität zu überprüfen
UML-Entwurf der Klasse „Queue“ in Modelio:
Vollständige Implementierung der Queue:
class Queue: def __init__(self): self.queueListe = [] self.queueListeLaenge = 0 def enqueue(self, wert): self.queueListe.append(wert) self.queueListeLaenge+=1 def dequeue(self): if not self.istLeer(): self.queueListeLaenge-= 1 return self.queueListe.pop(0) else: print("Queue leer!") return None def peek(self): if not self.istLeer(): return self.queueListe[0] else: print("Queue leer!") return None def getQueueListenLaenge(self): return self.queueListeLaenge def istLeer(self): return self.queueListeLaenge == 0
Erweiterung der Queue auf eine Queue mit maximaler Länge:
Python-Code mit Vererbung:
class LaengeQueue(Queue): def __init__(self): super().__init__() self.maxQueueListenLaenge = 5 def enqueue(self, wert): if self.queueListeLaenge < self.maxQueueListenLaenge: self.queueListe.append(wert) self.queueListeLaenge+=1 else: print("maximale Laenge erreicht:", self.queueListe)
Übung zur Vererbung: UML von Minecraft-Charakteren
(beispielhafter Entwurf einiger Klassen; nach einer Einzelstunde noch unvollständig)
Binary-Tree Datentyp als Klasse
class BTNode: def __init__(self, wert): self.wert = wert self.Zeigerlinks = None self.Zeigerrechts = None def insert(self, wert): if wert<self.wert: if self.Zeigerlinks is None: self.Zeigerlinks = BTNode(wert) else: self.Zeigerlinks.insert(wert) if wert>self.wert: if self.Zeigerrechts is None: self.Zeigerrechts = BTNode(wert) else: self.Zeigerrechts.insert(wert) def delete(self, wert): pass def findeWert(self, wert): pass def printTree(self): print(self.wert) if self.Zeigerrechts != None: print("nach rechts:" ) self.Zeigerrechts.printTree() if self.Zeigerlinks != None: print("nach links:" ) self.Zeigerlinks.printTree() test = BTNode(13) test.printTree() test.insert(5) test.insert(20) test.insert(4) test.insert(7) test.insert(15) test.insert(24) print("-------------------------") test.printTree()