Files
2026-04-27 04:57:05 +00:00

146 lines
5.6 KiB
Markdown

# Workshop - Vehicle Management System
A simple hierarchy to learn OOP concepts like Interfaces, Inheritance, Polymorphism, and Abstraction.
## Overview
This project simulates a vehicle management system using Object-Oriented Programming (OOP) principles. It demonstrates how real-world entities (like different types of cars) can be represented as classes, with shared characteristics and behaviors defined through interfaces, abstract classes, and inheritance.
## Class Hierarchy
The project consists of the following classes and interfaces:
1. **`Vehicle` (Abstract Class)**: The base abstract class representing the core properties of any vehicle.
2. **`Serviceable` (Interface)**: An interface defining the contract for vehicles that require maintenance and servicing.
3. **`Car` (Abstract Class)**: A subclass of `Vehicle` that implements the `Serviceable` interface, representing common behaviors of cars.
4. **`GasCar` (Class)**: A concrete subclass of `Car` representing gasoline-powered vehicles.
5. **`ElectricCar` (Class)**: A concrete subclass of `Car` representing battery-powered electric vehicles.
6. **`SportsCar` (Class)**: A subclass of `GasCar` representing high-performance sports cars.
7. **`VehicleInspector` (Class)**: A utility class designed to inspect vehicles and demonstrate polymorphism and type-checking.
### Class Diagram
```plaintext
+-------------------+ +-------------------+
| Vehicle | | Serviceable |
| (Abstract Class) | | (Interface) |
+-------------------+ +-------------------+
^ ^
| extends | implements
| |
+-----------------------------------+
|
+-------------------+
| Car |
| (Abstract Class) |
+-------------------+
^
| extends
+-----------------+-----------------+
| |
+-------------------+ +-------------------+
| GasCar | | ElectricCar |
| (Class) | | (Class) |
+-------------------+ +-------------------+
^ | |
| extends | implements | implements
| ⌄ ⌄
+-------------------+ +-------------------+ +-------------------+
| SportsCar | | Refuelable | | Chargeable |
| (Class) | | (Interface) | | (Interface) |
+-------------------+ +-------------------+ +-------------------+
```
## What should you do?
---
Your task is to complete the implementation of the classes by finding the `TODO` comments in the codebase and fixing them:
### 1. Vehicle Class
- Generate getters for all fields
- Implement the `addMileage(double km)` method with negative value validation
- Define abstract method `getEnergyType()`
### 2. Car Class
- Complete the constructor using `super`
- Override the `getEnergyType()`
- Override the `showDetails()`
- Implement `needsService(Vehicle v)` and `performService()` from the Serviceable interface
### 3. GasCar Class
- Override `getEnergyType()`
- Implement `refuel(double amount)` with validation
- Override `showDetails()`
- Override `Serviceable.java` methods
### 4. ElectricCar Class
- Override `getEnergyType()`
- Implement `charge(double amount)` with validation
- Override `showDetails()`
- Override `Serviceable.java` methods
### 5. SportsCar Class
- Override `showDetails` to include specific Sports Car feature alongside the base class details
- Override `Serviceable.java` methods
### 6. VehicleInspector Class
- Complete the `inspect(Vehicle v)` method using `instanceof`
### Main Class
- Create at least 3 Vehicles
#### Example :
```java
ElectricCar tesla = new ElectricCar(
"Tesla", "Model S", 2022, 1000,
100, 550, 50 // batteryCapacity, range
);
GasCar toyota = new GasCar(
"Toyota", "Corolla", 2018, 85000,
5, 50, "Petrol" // seats, fuelCapacity, fuelType
);
SportsCar ferrari = new SportsCar(
"Ferrari", "F8 Tributo", 2021, 12000,
2, 3.9, "oil", 710 // seats, engineSize, horsepower
);
```
- Create an array of all vehicles
- Show basic info of each vehicle
- Inspect each vehicle with instanceof logic
- Create an array of Serviceable
- Perform service for each Serviceable
## Bonus
Add a `HybridCar` class
#### What to do?
- Create a `HybridCar` class that extends `Car`.
- It will need variables for both battery level and fuel level
- Implement `Refuelable` and `Chargeable` together
- Service logic for HybridCar:
```
needsService(): return true if mileage > 10000
performService():
Print "Engine oil changed and battery system checked"
Reset fuelLevel to 100
Reset chargeLevel to 100
```
## Workflow
1. Fork the repository to your own Git account
2. Clone your forked repository
3. Create a new branch named `develop`
```
git checkout -b develop
```
4. Complete all TODO sections in the project
5. Commit your changes with meaningful commit messages
6. Push your branch to your repository
```
git push origin develop
```
7. Create a Pull Request from `develop` to `main` or `master`
# GOOD LUCK! :)