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()