Araç Kiralama Servisi
Coddy'nin Python Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 64 / 64.
Görev
OrtaBu meydan okumada, bir araç kiralama sistemi uygulayacaksınız. Sistem; araçları, kiralamaları ve bir kiralama acentesini uygun kalıtım ve kapsülleme ile modeller.
vehicle.py- Temel Vehicle sınıfını uygulayıncar.py- Car alt sınıfını uygulayınmotorcycle.py- Motorcycle alt sınıfını uygulayınrental.py- Rental sınıfını uygulayınrentalagency.py- RentalAgency sınıfını uygulayın
Her dosya, uygulamanıza rehberlik eden ayrıntılı TODO yorumları içerir. Kodunuzun tüm gereksinimleri karşıladığından emin olmak için bu yorumları takip edin.
Kopya kağıdı
Bu meydan okuma, kalıtım ve kapsülleme dahil olmak üzere nesne yönelimli programlama ilkelerini kullanarak bir araç kiralama sistemi uygulamaya odaklanmaktadır. Sistem, eksiksiz bir kiralama işletmesini modellemek için birlikte çalışan birden fazla sınıftan oluşur.
Uygulama şunların oluşturulmasını içerir:
- Ortak özelliklere ve metotlara sahip temel bir
Vehiclesınıfı - Vehicle sınıfından miras alan
CarveMotorcyclealt sınıfları - Bireysel kiralama işlemlerini yönetmek için bir
Rentalsınıfı - Tüm kiralama sistemini koordine etmek için bir
RentalAgencysınıfı
Kendin dene
from vehicle import Vehicle
from car import Car
from motorcycle import Motorcycle
from rental import Rental
from rentalagency import RentalAgency
# Kapsamlı test durumu işleyicisi
test_case = input()
if test_case == "create_vehicles":
# Araç oluşturmayı test et
car = Car("C123", "Toyota", "Camry", 50, 5)
bike = Motorcycle("M456", "Honda", "CBR", 35, 600)
print(car)
print(bike)
elif test_case == "rental_workflow":
# Kiralama iş akışını test et
agency = RentalAgency("Quick Rentals")
# Araçları ekle
car = Car("C123", "Toyota", "Camry", 50, 5)
bike = Motorcycle("M456", "Honda", "CBR", 35, 600)
agency.add_vehicle(car)
agency.add_vehicle(bike)
# Mevcut araçları kontrol et
print(f"Available before rental: {len(agency.available_vehicles())}")
# Bir araç kirala
rental_id = agency.rent_vehicle("C123", "John Doe", 3)
print(f"Rental created: {rental_id}")
# Kiralamadan sonra mevcut araçları kontrol et
print(f"Available after rental: {len(agency.available_vehicles())}")
# Aracı iade et
agency.return_vehicle(rental_id)
# İadeden sonra mevcut araçları kontrol et
print(f"Available after return: {len(agency.available_vehicles())}")
elif test_case == "rental_cost":
# Kiralama maliyeti hesaplamasını test et
car = Car("C123", "Toyota", "Camry", 50, 5)
rental = Rental("R1", car, "John Doe", 3)
print(f"Rental cost for 3 days: ${rental.calculate_cost()}")
elif test_case == "vehicle_methods":
# Araç metotlarını test et
vehicle = Vehicle("V789", "Generic", "Vehicle", 25)
print(vehicle)
print(f"Start rental: {vehicle.start_rental()}")
print(f"Start rental again: {vehicle.start_rental()}")
print(f"End rental: {vehicle.end_rental()}")
print(f"Start rental after end: {vehicle.start_rental()}")
elif test_case == "inheritance_check":
# Kalıtım ilişkilerini test et
car = Car("C123", "Toyota", "Camry", 50, 5)
bike = Motorcycle("M456", "Honda", "CBR", 35, 600)
print(f"Car is a Vehicle: {isinstance(car, Vehicle)}")
print(f"Motorcycle is a Vehicle: {isinstance(bike, Vehicle)}")
print(f"Car is a Motorcycle: {isinstance(car, Motorcycle)}")
elif test_case == "polymorphism":
# Polimorfik davranışı test et
vehicles = [
Vehicle("V789", "Generic", "Vehicle", 25),
Car("C123", "Toyota", "Camry", 50, 5),
Motorcycle("M456", "Honda", "CBR", 35, 600)
]
for i, v in enumerate(vehicles):
print(f"Vehicle {i+1}: {v}")
elif test_case == "rental_edge_cases":
# Kiralama uç durumlarını test et
agency = RentalAgency("Edge Rentals")
# Mevcut olmayan aracı kiralamayı dene
print(f"Rent non-existent: {agency.rent_vehicle('X999', 'John Doe', 3)}")
# Bir araba ekle ve onu kirala
car = Car("C123", "Toyota", "Camry", 50, 5)
agency.add_vehicle(car)
rental_id = agency.rent_vehicle("C123", "John Doe", 3)
print(f"Valid rental: {rental_id}")
# Aynı arabayı tekrar kiralamayı dene
print(f"Rent unavailable car: {agency.rent_vehicle('C123', 'Jane Smith', 2)}")
# Mevcut olmayan kiralamayı iade etmeyi dene
print(f"Return non-existent rental: {agency.return_vehicle('R999')}")
# Geçerli kiralamayı iade et
print(f"Return valid rental: {agency.return_vehicle(rental_id)}")
# Aynı kiralamayı tekrar iade etmeyi dene
print(f"Return completed rental: {agency.return_vehicle(rental_id)}")
elif test_case == "agency_operations":
# Kapsamlı acente operasyonlarını test et
agency = RentalAgency("Full Service Rentals")
# 5 araç ekle
vehicles = [
Car("C1", "Toyota", "Camry", 50, 5),
Car("C2", "Honda", "Accord", 55, 5),
Car("C3", "Ford", "Focus", 45, 5),
Motorcycle("M1", "Honda", "CBR", 35, 600),
Motorcycle("M2", "Yamaha", "R1", 40, 1000)
]
for v in vehicles:
agency.add_vehicle(v)
print(f"Available vehicles: {len(agency.available_vehicles())}")
# 3 araç kirala
rental_ids = [
agency.rent_vehicle("C1", "Customer 1", 3),
agency.rent_vehicle("C2", "Customer 2", 5),
agency.rent_vehicle("M1", "Customer 3", 2)
]
print(f"Available after rentals: {len(agency.available_vehicles())}")
# 2 aracı iade et
agency.return_vehicle(rental_ids[0])
agency.return_vehicle(rental_ids[1])
print(f"Available after returns: {len(agency.available_vehicles())}")
# Mevcut araçları yazdır
print("Available vehicles:")
for v in agency.available_vehicles():
print(f" {v}")
elif test_case == "stress_test":
# Birçok araçla stres testi
agency = RentalAgency("Stress Test Rentals")
# 100 araç ekle
for i in range(100):
if i % 2 == 0:
vehicle = Car(f"C{i}", "Make{i}", f"Model{i}", 50, 5)
else:
vehicle = Motorcycle(f"M{i}", "Make{i}", f"Model{i}", 35, 600)
agency.add_vehicle(vehicle)
# 50 araç kirala
rental_ids = []
for i in range(50):
vin = f"C{i*2}" if i % 2 == 0 else f"M{i*2-1}"
rental_id = agency.rent_vehicle(vin, f"Customer{i}", 3)
rental_ids.append(rental_id)
print(f"Available after 50 rentals: {len(agency.available_vehicles())}")
# Tüm kiralamaları iade et
for rental_id in rental_ids:
agency.return_vehicle(rental_id)
print(f"Available after all returns: {len(agency.available_vehicles())}")
elif test_case == "invalid_inputs":
# Geçersiz girdilerle test et
car = Car("C123", "Toyota", "Camry", -50, 5)
print(f"Car with negative rate: {car}")
bike = Motorcycle("M456", "Honda", "CBR", 35, 0)
print(f"Motorcycle with zero engine: {bike}")
rental_zero = Rental("R1", car, "John Doe", 0)
print(f"Rental with zero days cost: ${rental_zero.calculate_cost()}")
rental_neg = Rental("R2", car, "Jane Smith", -3)
print(f"Rental with negative days cost: ${rental_neg.calculate_cost()}")Object Oriented Programming bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerself ParametresiMetotlarÖzniteliklerYapıcı Metot (__init__)Özet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımsuper() FonksiyonuMetot Geçersiz KılmaÇoklu KalıtımMetot Çözümleme SırasıÖzet - Çalışan Hiyerarşisi7Özel Metotlar
Sihirli Metotlara GirişOperatör Aşırı YüklemeKapsayıcı Sihirli MetotlarıÖzet - Özel Liste10Tasarı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ı13Final Meydan Okumaları
E-öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi5Çok Biçimlilik (Polymorphism)
Metot Geçersiz Kılmaya Yeniden BakışDuck TypingSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon ve KalıtımMixinsStatik ve Sınıf MetotlarıSınıf DekoratörleriBağlam Yöneticileri11Tasarı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ı