Araç Kiralama Servisi
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 110 / 110.
Görev
KolayOOP kursunun final görevine ulaştığınız için tebrikler! Öğrendiğiniz her şeyi — soyut sınıflar, kalıtım, kapsülleme, State deseni, Factory deseni ve generic yapıları — bir araya getiren kapsamlı bir Araç Kiralama Servisi inşa edelim.
Kiralama servisiniz farklı araç türlerini yönetecek, müsaitlik durumlarını takip edecek, kiralamaları gerçekleştirecek ve müşteri kayıtlarını tutacaktır. Bu yapıyı yedi dosya halinde organize edeceksiniz:
vehicle_state.dart: Araçların farklı durumlarda nasıl davranacağını tanımlayan birVehicleStatesoyut sınıfı oluşturun.String getStatus()vebool canRent()soyut metotlarını ekleyin. Ardından üç somut durum oluşturun:AvailableState-Availabledeğerini döndürür ve kiralamaya izin verirRentedState-Renteddeğerini döndürür ve kiralamaya izin vermezMaintenanceState-In Maintenancedeğerini döndürür ve kiralamaya izin vermez
vehicle.dart:finalid (String),finalmodel (String), getter'ı olan özel bir_dailyRate(double) ve başlangıç değeriAvailableStateolan özel bir_state(VehicleState) içeren soyut birVehiclesınıfı oluşturun. Şunları ekleyin:- Durumun statüsünü döndüren bir
statusgetter'ı bool isAvailable()- mevcut durumun kiralamaya izin verip vermediğini kontrol edervoid setState(VehicleState state)- aracın durumunu değiştirir- Soyut bir metot:
double calculateRentalCost(int days) - Soyut bir metot:
String getRequirements()- özel gereksinimleri döndürür
toString()metodunu,[Type] model (id) - status(burada Type, çalışma zamanı türüdür) döndürecek şekilde geçersiz kılın (override).- Durumun statüsünü döndüren bir
vehicles.dart:Vehiclesınıfını genişleten üç araç türü oluşturun:Car- standart kiralama maliyeti, günlük ücret çarpı gün sayısıdır. Gereksinimler:Valid driver's licenseMotorcycle- kiralama maliyeti, günlük ücret çarpı gün sayısı üzerinden %10 indirimli halidir. Gereksinimler:Motorcycle license, Age 21+Truck- kiralama maliyeti, günlük ücret çarpı gün sayısı artı 50$ sabit ücrettir. Gereksinimler:Commercial license, Deposit required
vehicle_factory.dart: Türüne (car,motorcycleveyatruck) göre uygun aracı döndüren statik birVehicle create(String type, String id, String model, double dailyRate)metoduna sahip birVehicleFactorysınıfı oluşturun. Bilinmeyen türler için varsayılan olarak bir Car oluşturun.customer.dart: Bir id (String), name (String) ve kiralama kayıtlarından oluşan özel bir listeye (String listesi) sahip birCustomersınıfı oluşturun. Şunları ekleyin:addRental(String vehicleInfo)- bir kiralama kaydı eklergetRentalCount()- kiralama sayısını döndürürbool isEligible()- müşterinin 3'ten az aktif kiralaması varsa true döndürür
toString()metodunuCustomer: name (id) - X rentalsdöndürecek şekilde geçersiz kılın.rental_service.dart: Filo içinList<Vehicle>ve müşteriler içinList<Customer>içeren, generic yapılar kullanan birRentalServicesınıfı oluşturun. Şunları ekleyin:addVehicle(Vehicle vehicle)- filoya ekler,Added: vehicle.toString()yazdırırregisterCustomer(Customer customer)- müşteriyi kaydederrentVehicle(String customerId, String vehicleId, int days)- müşteri mevcutsa, uygunsa ve araç müsaitse: araç durumunu Rented olarak değiştirir, müşteriye kiralamayı ekler,customerId rented vehicleId for X days. Cost: $Y(Y, 2 ondalık basamaklı) yazdırır. Aksi takdirde uygun mesajı yazdırır:Customer not found,Customer not eligible,Vehicle not foundveyaVehicle not availablereturnVehicle(String vehicleId)- araç durumunu Available yapar,vehicleId returnedyazdırırsendToMaintenance(String vehicleId)- araç durumunu Maintenance yapar,vehicleId sent to maintenanceyazdırırgetAvailableVehicles()- müsait araçların listesini döndürür
main.dart: Kiralama servisinizi gösterin. BirRentalServiceoluşturun ve factory kullanarak üç araç ekleyin:- Bir araba:
V001,Toyota Camry, günlük 45$ - Bir motosiklet:
V002,Honda CBR, günlük 35$ - Bir kamyon:
V003,Ford F-150, günlük 75$
C001,Alice Johnson) ve müşteriyi yazdırın. Kamyonun gereksinimlerini yazdırın. Arabayı Alice'e 3 günlüğüne kiralayın. Arabayı tekrar kiralamayı deneyin (başarısız olmalı). Motosikleti bakıma gönderin. Kaç aracın müsait olduğunuAvailable vehicles: Xşeklinde yazdırın. Arabayı iade edin. Son müsaitlik sayısını yazdırın.- Bir araba:
Beklenen çıktı:
Added: [Car] Toyota Camry (V001) - Available
Added: [Motorcycle] Honda CBR (V002) - Available
Added: [Truck] Ford F-150 (V003) - Available
Customer: Alice Johnson (C001) - 0 rentals
Commercial license, Deposit required
C001 rented V001 for 3 days. Cost: $135.00
Vehicle not available
V002 sent to maintenance
Available vehicles: 1
V001 returned
Available vehicles: 2Kendin dene
import 'rental_service.dart';
import 'vehicle_factory.dart';
import 'customer.dart';
void main() {
// TODO: Bir RentalService örneği oluşturun
// TODO: Üç araç oluşturmak ve eklemek için VehicleFactory kullanın:
// - Car: V001, Toyota Camry, $45/gün
// - Motorcycle: V002, Honda CBR, $35/gün
// - Truck: V003, Ford F-150, $75/gün
// TODO: Bir müşteri kaydedin (C001, Alice Johnson)
// TODO: Müşteriyi yazdırın
// TODO: Kamyonun gereksinimlerini yazdırın (kamyonu bulun ve getRequirements() metodunu çağırın)
// TODO: Arabayı (V001) Alice'e (C001) 3 günlüğüne kiralayın
// TODO: Arabayı tekrar kiralamayı deneyin (başarısız olmalı - müsait değil)
// TODO: Motosikleti (V002) bakıma gönderin
// TODO: Mevcut araç sayısını 'Available vehicles: X' olarak yazdırın
// TODO: Arabayı (V001) iade edin
// TODO: Nihai mevcut araç sayısını yazdırın
}
Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarKütüphaneler ve ImportlarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarÖrnek DeğişkenleriConstructor TemelleriÖzet - Basit Hesap Makinesi4Null Safety
Null Safety'ye GirişNullable ve Non-Nullable? ve ! OperatörleriLate Anahtar Kelimesi ve Null SafetyNull-Aware OperatörleriSınıflarda Null SafetyÖzet - Kullanıcı Profili Sistemi7Soyut Sınıflar ve Arayüzler
Soyut SınıflarSoyut MetotlarDart'ta ArayüzlerÖrtük ArayüzlerUygulama vs. GenişletmeÇoklu ArayüzlerÖzet - Şekil Hesaplayıcı10Koleksiyonlar ve Generic'ler
List, Set, Map Genel BakışTip Güvenli KoleksiyonlarGeneric SınıflarGeneric MetotlarGeneric KısıtlamalarIterable ve IteratorÖzet - Generic Depolama2Dart'ta Yapıcılar
Varsayılan Yapıcıİsimlendirilmiş Yapıcılarİlklendirme ListeleriSabit YapıcılarFabrika YapıcılarıYönlendiren YapıcılarÖzet - Şekil Oluşturucu5Kapsülleme
Public ve Private Üyeler_ Öneki KuralıKütüphane Düzeyinde GizlilikGetter ve Setter DetaylarıBilgi GizlemeÖzet - Öğrenci Kayıtları8Mixin'ler
Mixin'lere GirişMixin OluşturmaBirden Fazla Mixin KullanımıMixin'lerde on Anahtar KelimesiMixin vs KalıtımMixin vs ArayüzÖzet - Hayvan Sistemi11Özel Metotlar
toString() OverridehashCode ve == OverrideComparable Arayüzücall() MetodunoSuchMethod OverrideÖzet - Özel Koleksiyon14Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı17Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakter SistemiAraç Kiralama Servisi3Sınıf Özellikleri
Instance ve Statik ÜyelerFinal ve Const AlanlarLate DeğişkenlerStatik Metotlar ve AlanlarGetters ve SettersÖzet - Banka Hesabı Yöneticisi6Kalıtım
Temel Kalıtımsuper Anahtar KelimesiMetot Ezme@override Anotasyonufinal Sınıf Anahtar KelimesiYapıcı Metotlar ve KalıtımÖzet - Çalışan Hiyerarşisi9Çok Biçimlilik
Çok Biçimlilik TemelleriInterface'ler ile Çok BiçimlilikÇalışma Zamanı Tip Kontrolüis ve as OperatörleriCovariant Anahtar KelimesiÖzet - Ödeme İşlemcisi12Asenkron OOP
Futures ve async/awaitStream TemelleriStream Controller'larAsenkron KurucularSınıf Metotlarında Asenkron KullanımıÖzet - Data Fetcher15Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıRepository Kalıbı