Garasi Parkir
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Swift di Coddy. Pelajaran 55 dari 57.
Tantangan
SulitBuatlah garasi parkir. Protokol Vehicle memiliki plate, size (enum Size: Int, Comparable dengan small = 1, medium = 2, large = 3) dan hourlyRate. Implementasikan Motorbike (small, 1 per jam), Car (medium, 3) dan Van (large, 5). Class Garage dibuat dengan jumlah tempat parkir untuk setiap ukuran. park(_:) menempatkan kendaraan di tempat kosong dengan ukuran yang sesuai atau, jika tidak ada yang kosong, di tempat kosong dengan ukuran berikutnya yang lebih besar, lalu memberikan respons parked AB12 in medium atau full for AB12. leave(plate:hours:) mengosongkan tempat parkir dan memberikan respons AB12 paid 9 (tarif dikali jumlah jam, minimal 1 jam), atau no vehicle AB12. status() memberikan respons free: small 1, medium 0, large 2.
Kode yang disediakan membaca jumlah tempat parkir dalam urutan small,medium,large, lalu perintah park car AB12, leave AB12 3 atau status, dan mencetak setiap respons.
Tuliskan kodemu di Size.swift, Vehicle.swift, Motorbike.swift, Car.swift, Van.swift dan Garage.swift. main.swift berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
// Kode input/output yang disediakan: biarkan apa adanya
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())
}
}
Semua pelajaran di Pemrograman Berorientasi Objek
1Class dan Object
Bekerja dengan FileMendefinisikan ClassMethod dan selfInitializerClass adalah ReferensiUlasan: Kartu Perpustakaan4Enkapsulasi
Kontrol AksesHanya Bisa Dibaca dari LuarMelindungi StateInitializer yang Bisa GagalRangkuman: Rekening Bank7Polimorfisme dan Generik
PolimorfismeKonversi TipeFungsi GenerikTipe GenerikRangkuman: Kalkulator Bentuk2Struct dan Tipe Nilai
StructSemantik NilaiMethod yang Mengubah NilaiStruct atau classRangkuman, Item Inventaris11Proyek: Manajemen Perpustakaan
Buku dan AnggotaPeminjaman BukuLatihan sendiri: Playground Swift