Parkhaus
Teil des Abschnitts Objektorientierte Programmierung der Swift-Journey von Coddy. Lektion 55 von 57.
Aufgabe
SchwerErstelle ein Parkhaus. Das Protokoll Vehicle besitzt plate, size (eine Aufzählung Size: Int, Comparable mit small = 1, medium = 2, large = 3) und hourlyRate. Implementiere Motorbike (klein, 1 pro Stunde), Car (mittel, 3) und Van (groß, 5). Die Klasse Garage wird mit einer Anzahl von Stellplätzen pro Größe erstellt. park(_:) stellt ein Fahrzeug auf einen freien Stellplatz seiner eigenen Größe oder, falls keiner frei ist, auf einen der nächstgrößeren Größe und antwortet mit parked AB12 in medium oder full for AB12. leave(plate:hours:) gibt den Stellplatz frei und antwortet mit AB12 paid 9 (Tarif mal Stunden, mindestens 1 Stunde) oder no vehicle AB12. status() antwortet mit free: small 1, medium 0, large 2.
Der bereitgestellte Code liest die Stellplätze als small,medium,large ein, anschließend die Befehle park car AB12, leave AB12 3 oder status, und gibt jede Antwort aus.
Dein Code gehört in Size.swift, Vehicle.swift, Motorbike.swift, Car.swift, Van.swift und Garage.swift. main.swift enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.
Probier es selbst
// Bereitgestellter Ein-/Ausgabecode: belasse ihn wie er ist
var input: [String] = []
while let line = readLine() { input.append(line) }
let s = input[0].split(separator: ",").map { Int($0)! }
let garage = Garage(small: s[0], medium: s[1], large: s[2])
for cmd in input.dropFirst() {
let p = cmd.split(separator: " ").map(String.init)
switch p[0] {
case "park":
let v: any Vehicle
switch p[1] {
case "bike": v = Motorbike(plate: p[2])
case "van": v = Van(plate: p[2])
default: v = Car(plate: p[2])
}
print(garage.park(v))
case "leave": print(garage.leave(plate: p[1], hours: Int(p[2])!))
default: print(garage.status())
}
}
Alle Lektionen in Objektorientierte Programmierung
1Klassen und Objekte
Arbeiten mit DateienKlassen definierenMethoden und selfInitialisiererKlassen sind ReferenzenRückblick – Bibliotheksausweis4Kapselung
ZugriffskontrolleVon außen schreibgeschütztZustand schützenFehlschlagende InitialisiererRückblick – Bankkonto7Polymorphismus und Generika
PolymorphismusTypumwandlungGenerische FunktionenGenerische TypenZusammenfassung – Shape-Rechner2Strukturen und Werttypen
StrukturenWertsemantikVerändernde MethodenStruktur oder KlasseZusammenfassung – Inventarelement5Vererbung
UnterklassenMethoden überschreibenInitialisierer und superfinal und HierarchienRückblick – Mitarbeiterhierarchie8Standardprotokolle
CustomStringConvertibleEquatableComparableHashableRückblick – Benutzerdefiniertes Sortieren11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihenÜbe selbstständig: Swift-Playground