Aufgabe 1

Erstelle zu dem UML-Diagramm einen funktional passenden Pythoncode. Methoden der Klassen bekommen hier keine Funktionalität, sondern geben stattdessen ihre Klasse sowie den Funktionsnamen mit Hilfe der print-Methode aus.
Hinweis: Setzte geeignete Standardwerte für die Attribute der jeweiligen Klassen, indem Sie die __init__ Methode verwenden und Strings zum Beispiel als leeren String udn Zahlen mit 0 initialisieren. In UML wird die __init__ Methode durch die Schreibweise des Klassennamens als Methode angegebenen (z.b. Flugzeug(firma : String, breite : double)). Für den Datentyp double verwenden Sie bitte einfach float im Code.
- Erstelle eine Klasse Fluggesellschaft. Diese hat einen Namen, ein Rufzeichen und eine sich ändernde Anzahl von Flugzeugen verschiedenen Typs.
- Zum Testen des Programms soll die Klasse Fluggesellschaft eine Methode
teste
enthalten, die eine zufällige Anzahl (zwischen 10 und 30) an spezifischen Flugzeugtypen zu den Flugzeugen der Fluggesellschaft hinzufügt. - Zur Kalkulation der Wartung aller Flugzeuge sollen verschiedene anfällige Teile der Flugzeuge erfasst werden. Implementieren Sie eine Methode
wartung
, die alle Flugzeuge der Fluggesellschaft durchgeht und dabei die insgesamte Anzahl der Sitze aller Passagierjets, die Anzahl der Rakete aller Kampfjets sowie die Anzahl der Rotoren aller Propellerflugzeuge ermittelt und anschließend ausgibt. - Erzeuge zwei Objekte der Klasse Fluggesellschaft. Rufe jeweils die
teste-Methode
und anschließend diewartung-Methode
auf.
Aufgabe 2
Ausgehend von der Modellierung der Aufgabe 3 auf dem Übungsblatt zur Objektorientierten Modellierung Teil 2 (Link) sollen jetzt einzelen Teillösungen implementiert werden. Die Schritte ergeben also keine vollständig funktionierende Lösung.
Implementiere folgende Aufgaben:
- Implementiere für die Klasse Fahrzeug einen geeignete
__init__
Methode. - Implementiere eine Methode
berechneFahrpreis(...)
, die in Abhängigkeit von der gefahrenen Strecke den Fahrpreis zurückgibt und zusätzlich den Kilometerstand, die Tagesfahrstrecke und die Tageseinnahmen aktualisiert. - Implementiere je eine
__init__
Methode für die Klassen Rikscha und Auto. - Für die Autos muss die Methode
berechneFahrpreis(...)
aus der Klasse Fahrzeug überschrieben werden. Bei Eingabe der zurückgelegten Wegstrecke soll anhand des Durchschnittsverbrauchs der Tankinhalt aktualisiert werden. Implementieren Sie eine neue MethodeberechneFahrpreis(...)
für die Klasse Auto. - Implementiere für die Klasse Auto die Methode
volltanken()
, die in Abhängigkeit vom aktuellen Tankinhalt und vom Tankvolumen die getankte Benzinmenge in Litern zurückgibt.
Bei Betriebsende werden per Software die Tagesdaten der Fahrzeuge ausgelesen, ausgewertet und auf Tages-Startwerte zurückgesetzt.
- Gebe eine geeignete Datenstruktur für die Fahrzeuge in der Klasse FuhrparkVerwaltung an.
- Implementiere eine Methode, die es erlaubt, die gesamte gefahrene Strecke aller Fahrzeuge des Fuhrparks zu ermitteln.
- Beschreibe, welche Programmerweiterungen man vornehmen muss, damit das Programm die Gesamteinnahmen sowie die gesamte getankte Benzinmenge am Betriebsende ermitteln kann.
- Die Liste der Fahrzeuge sei vorsortiert. Implementiere eine Methode, die es ermöglicht, ein neues Fahrzeug anhand seines Kennzeichens an der alphabetisch korrekten Stelle einzufügen.
Aufgabe 3
Nach dem Geheimnisprinzip sind nur diejenigen Attribute einer Klasse öffentlich sichtbar, bei denen es absolut notwendig ist. Die anderen Attribute sind geheim (unbekannt) und werden nur über Zugriffsmethoden angesprochen. Je mehr Attribute geheim sind, desto einfacher wird es, die Software an weitere Anforderungen anzupassen (da nur die unbekannten = geheimen Bereiche geändert werden, die öffentliche API bleibt jedoch konstant).
Eine Eigenschaft oder Methode einer Klasse gilt als gekapselt, wenn diese nur über Zugriffsmethoden abgefragt oder geändert werden kann. Die eigentliche Eigenschaft oder Methode bleibt verborgen.
In OOP wird dies durch geeignete Schlüsselwörter oder Notationen realisiert. In Java heißen dies private, protected und public. In Python wurden nicht alle Spezifikationen von UML umgesetzt.
Implementiere die UML-Lösung aus dem Aufgabenblatt Objektorientierte Modellierung Teil 2 Aufgabe 1 (Gym auch Aufgabe 2) (Link) in Python.
Implementiere eine Klasse Banktest, die durch eine einzige public-Methode start ausgeführt wird. Alle anderen Methoden und Attribute sollen private sein. Die Funktionalität der Klasse soll die folgende sein:
- Anlegen einer Bank mit 3 Kunden und jeweils zufällig 1-2 Konten für jeden Kunden
- Konten werden mit zufälligen Kontoständen initialisiert
- Zufällige mehrmalige Einzahlungen und Abhebungen auf allen vorhandenen Konten
- Durchführung eines Monatsübergangs inklusive Verzinsung
- Umbuchen von einer zufälligen Anzahl von Buchungen zwischen Konten eines Kunden sowie von Kunden untereinander
- Integritätsfunktionen, die überprüfen, ob alle Buchungen korrekt durchgeführt wurden