Araç Kiralama Hizmeti
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 110 / 110.
Görev
KolayOOP kursunun son meydan okumasına ulaştığın için tebrikler! Öğrendiğin her şeyi — soyut sınıflar, kalıtım, kapsülleme, State deseni, Factory deseni ve generic'ler — bir araya getiren kapsamlı bir Vehicle Rental Service oluşturalım.
Kiralama hizmetin farklı araç türlerini yönetecek, kullanılabilirlik durumlarını takip edecek, kiralamaları işleyecek ve müşteri kayıtlarını tutacak. Bunu yedi dosyaya ayıracaksın:
vehicle_state.dart: Araçların farklı durumlarda nasıl davranacağını tanımlayan soyut birVehicleStatesınıfı oluştur. Soyut birString getStatus()metodu vebool canRent()metodu ekle. Ardından üç somut durum oluştur:AvailableState—Availabledöndürür ve kiralamaya izin verirRentedState—Renteddöndürür ve kiralamaya izin vermezMaintenanceState—In Maintenancedöndürür ve kiralamaya izin vermez
vehicle.dart:Vehicleid (String),finalmodel (String), getter'a sahip privatefinal(double) ve_dailyRateolarak başlatılan private_state(VehicleState) alanlarına sahip soyut birAvailableStatesınıfı oluştur. Şunları ekle:- Durumun durum bilgisini 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
double calculateRentalCost(int days)metodu - Özel gereksinimleri döndüren soyut bir
String getRequirements()metodu
toString()metodunu, Type çalışma zamanı türü olacak şekilde[Type] model (id) - statusdöndürecek biçimde geçersiz kıl.- Durumun durum bilgisini döndüren bir
vehicles.dart:Vehiclesınıfını genişleten üç araç türü oluştur:Car— standart kiralama maliyeti günlük ücret çarpı gün sayısıdır. Gereksinimler:Valid driver's licenseMotorcycle— kiralama maliyeti, %10 indirim uygulanmış şekilde günlük ücret çarpı gün sayısıdır. Gereksinimler:Motorcycle license, Age 21+Truck— kiralama maliyeti günlük ücret çarpı gün sayısına sabit 50 $ ücret eklenerek hesaplanır. Gereksinimler:Commercial license, Deposit required
vehicle_factory.dart:VehicleFactory,Vehicle create(String type, String id, String model, double dailyRate)veyacartürüne göre uygun aracı döndüren statikmotorcyclemetoduna sahip birtrucksınıfı oluştur. Bilinmeyen türlerde varsayılan olarak bir Car oluştur.customer.dart: id (String), name (String) ve kiralama kayıtlarından oluşan private bir listeye (String listesi) sahip birCustomersınıfı oluştur. Şunları ekle: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 biçimde geçersiz kıl.rental_service.dart: Filo içinRentalServiceve müşteriler içinList<Vehicle>kullanan, generic'lerle birList<Customer>sınıfı oluştur. Şunları ekle:addVehicle(Vehicle vehicle)— filoya ekler,Added: vehicle.toString()yazdırırregisterCustomer(Customer customer)— müşteriyi eklerrentVehicle(String customerId, String vehicleId, int days)— müşteri mevcutsa, kiralamaya uygunsa ve araç kullanılabilirse aracın durumunu Rented olarak değiştirir, müşteriye kiralamayı ekler vecustomerId rented vehicleId for X days. Cost: $Yyazdırır (Y, 2 ondalık basamakla biçimlendirilir). Aksi takdirde uygun mesajı yazdırır:Customer not found,Customer not eligible,Vehicle not foundveyaVehicle not availablereturnVehicle(String vehicleId)— aracın durumunu Available olarak ayarlar vevehicleId returnedyazdırırsendToMaintenance(String vehicleId)— aracın durumunu Maintenance olarak ayarlar vevehicleId sent to maintenanceyazdırırgetAvailableVehicles()— kullanılabilir araçların bir listesini döndürür
main.dart: Kiralama hizmetini göster. BirRentalServiceoluştur ve fabrikayı kullanarak üç araç ekle:- 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) kaydet ve müşteriyi yazdır. Kamyonun gereksinimlerini yazdır. Arabayı Alice'e 3 günlüğüne kirala. Arabayı tekrar kiralamayı dene (başarısız olmalı). Motosikleti bakıma gönder. Kullanılabilir araç sayısınıAvailable vehicles: Xolarak yazdır. Arabayı iade et. Son kullanılabilir araç sayısını yazdır.- 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
1Nesne Tabanlı Programlamanın Temelleri
Harici DosyalarKütüphaneler ve İçe AktarmalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar SözcüğüMetotlarÖrnek DeğişkenleriYapıcıların TemelleriTekrar - Basit Hesap Makinesi4Null Güvenliği
Null Güvenliğine GirişNullable ve Non-Nullable? ve ! OperatörleriLate Anahtar Sözcüğü ve Null GüvenliğiNull-Aware OperatörlerSınıflarda Null GüvenliğiTekrar - Kullanıcı Profili Sistemi7Soyut Sınıflar ve Arayüzler
Soyut SınıflarSoyut MetotlarDart'ta ArayüzlerÖrtük ArayüzlerUygulamak ve GenişletmekBirden Çok ArayüzTekrar - Şekil Hesaplayıcı10Koleksiyonlar ve Generics
List, Set, Map Genel BakışTür Güvenli KoleksiyonlarGeneric SınıflarGeneric MetotlarGeneric KısıtlamalarIterable ve IteratorTekrar - Generic Depolama2Dart'ta Yapıcılar
Varsayılan YapıcıAdlandırılmış YapıcılarBaşlatıcı ListeleriSabit YapıcılarFabrika YapıcılarıYönlendiren YapıcılarÖzet - Şekil Oluşturucu5Kapsülleme
Public ve Private Üyeler_ Ön Ek KuralıKütüphane Düzeyinde GizlilikGetter ve Setter DerinliğiBilgi GizlemeTekrar - Öğrenci Kayıtları8Mixin'ler
Mixin'lere GirişMixin OluşturmaBirden Çok Mixin KullanımıMixin'lerde on Anahtar SözcüğüMixin ve Kalıtım KarşılaştırmasıMixin ve Arayüz KarşılaştırmasıÖzet - Hayvan Sistemi11Özel Metotlar
toString() Geçersiz KılmahashCode & == Geçersiz KılmaComparable Arayüzücall() MetodunoSuchMethod Geçersiz KılmaÖzet - Özel Koleksiyon14Tasarım Desenleri Bölüm 1
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy Deseni3Sınıf Özellikleri
Örnek ve Static ÜyelerFinal ve Const AlanlarLate DeğişkenlerStatic Metotlar ve AlanlarGetter ve Setter'larÖzet - Banka Hesabı Yöneticisi6Kalıtım
Temel Kalıtımsuper Anahtar SözcüğüMetot Geçersiz Kılma@override Açıklamasıfinal Sınıf Anahtar SözcüğüKurucular ve KalıtımÖzet - Çalışan Hiyerarşisi9Çok Biçimlilik
Çok Biçimlilik TemelleriArayüzler Yoluyla Çok BiçimlilikÇalışma Zamanı Tür Denetimiis ve as OperatörleriCovariant Anahtar KelimesiTekrar - Ödeme İşlemcisi12Asenkron OOP
Future'ler ve async/awaitStream TemelleriStream DenetleyicileriAsenkron YapıcılarSınıf Metotlarında AsenkronlukÖzet - Veri Getirici15Tasarım Desenleri Bölüm 2
Komut DeseniAdaptör DeseniDekoratör DeseniŞablon Metot DeseniDurum DeseniBileşik DesenDepo DeseniKendi başına pratik yap: Online Dart derleyicisi