Pertemuan 11: Implementasi Inheritance - Sistem Rental Kendaraan
Tugas Pertemuan 11
Nama: Farrel Aqilla Novianto
NRP: 5025241015
Kelas: Pemrograman Berorientasi Objek (A)
Inheritance
Inheritance (pewarisan) adalah mekanisme dalam pemrograman berorientasi objek (OOP) yang memungkinkan sebuah kelas (child class) untuk mewarisi atribut dan metode dari kelas lain (parent class). Tujuannya adalah untuk meningkatkan struktur program, menghindari pengulangan kode, dan meningkatkan keterbacaan serta pemeliharaan kode.
Manfaat Inheritance
Inheritance memberikan berbagai manfaat struktural pada kode:
- Reusabilitas Kode: Memungkinkan reuse kode yang sudah ada pada parent class di child class.
- Konsistensi dan Keterbacaan: Dengan inheritance, struktur aplikasi dapat diatur secara hierarkis sehingga alur logika dan struktur program menjadi lebih jelas.
- Pemeliharaan Kode Lebih Mudah: Jika perubahan diperlukan pada fitur umum, kita hanya perlu mengubahnya di parent class, dan semua child class otomatis mewarisi perubahan tersebut.
Latihan - Aplikasi Rental Kendaraan
Buatlah sebuah sistem manajemen rental untuk berbagai jenis kendaraan. Semua kendaraan memiliki merk, model, dan tahunProduksi. Khusus untuk Mobil dan Motor, tambahkan atribut jumlahRoda. Sementara untuk Sepeda, tambahkan atribut jenis Sepeda (misalnya BMX, balap).
- Buat rancangan class diagram dengan menggunakan inheritance
- Buat aplikasi yang bisa menampilkan list kendaraan yang tersedia, dan juga daftar nama penyewa beserta informasi detail kendaraan yang disewa
Kode Vehicle.java
/**
*
* @author Farrel Aqilla Novianto
*/
public class Vehicle{
protected String merk;
protected String model;
protected int tahunProduksi;
protected boolean tersedia;
public Vehicle(String merk, String model, int tahunProduksi){
this.merk = merk;
this.model = model;
this.tahunProduksi = tahunProduksi;
this.tersedia = true;
}
public String getMerk(){
return merk;
}
public String getModel(){
return model;
}
public int getTahunProduksi(){
return tahunProduksi;
}
public boolean isTersedia(){
return tersedia;
}
public void setTersedia(boolean tersedia){
this.tersedia = tersedia;
}
public String getInfoDetail(){
return "";
}
public String getJenisKendaraan(){
return "";
}
}Kode Renter.java
/**
*
* @author Farrel Aqilla Novianto
*/
public class Renter{
private String nama;
private String nomorKTP;
private String nomorTelepon;
private Vehicle kendaraanDisewa;
public Renter(String nama, String nomorKTP, String nomorTelepon){
this.nama = nama;
this.nomorKTP = nomorKTP;
this.nomorTelepon = nomorTelepon;
this.kendaraanDisewa = null;
}
public String getNama(){
return nama;
}
public String getNomorKTP(){
return nomorKTP;
}
public String getNomorTelepon(){
return nomorTelepon;
}
public Vehicle getKendaraanDisewa(){
return kendaraanDisewa;
}
public boolean sewaKendaraan(Vehicle kendaraan){
if(kendaraan.isTersedia() && this.kendaraanDisewa == null){
this.kendaraanDisewa = kendaraan;
kendaraan.setTersedia(false);
return true;
}
return false;
}
public boolean kembalikanKendaraan(){
if(this.kendaraanDisewa != null){
this.kendaraanDisewa.setTersedia(true);
this.kendaraanDisewa = null;
return true;
}
return false;
}
public String getInfoLengkap(){
String info = String.format("Nama: %s\nNo. KTP: %s\nTelepon: %s\n", nama, nomorKTP, nomorTelepon);
if(kendaraanDisewa != null){
info += "Kendaraan yang disewa:\n " + kendaraanDisewa.getInfoDetail();
}
else{
info += "Tidak ada kendaraan yang disewa";
}
return info;
}
}Kode Car.java
/**
*
* @author Farrel Aqilla Novianto
*/
public class Car extends Vehicle{
private int jumlahRoda;
public Car(String merk, String model, int tahunProduksi, int jumlahRoda){
super(merk, model, tahunProduksi);
this.jumlahRoda = jumlahRoda;
}
public int getJumlahRoda(){
return jumlahRoda;
}
public String getInfoDetail(){
return String.format("Mobil %s %s (%d) - Roda: %d - Status: %s", merk, model, tahunProduksi, jumlahRoda, tersedia ? "Tersedia" : "Disewa");
}
public String getJenisKendaraan(){
return "Mobil";
}
}Kode Motorcycle.java
/**
*
* @author Farrel Aqilla Novianto
*/
public class Motorcycle extends Vehicle{
private int jumlahRoda;
public Motorcycle(String merk, String model, int tahunProduksi, int jumlahRoda){
super(merk, model, tahunProduksi);
this.jumlahRoda = jumlahRoda;
}
public int getJumlahRoda(){
return jumlahRoda;
}
public String getInfoDetail(){
return String.format("Motor %s %s (%d) - Roda: %d - Status: %s", merk, model, tahunProduksi, jumlahRoda, tersedia ? "Tersedia" : "Disewa");
}
public String getJenisKendaraan(){
return "Motor";
}
}Kode Bicycle.java
/**
*
* @author Farrel Aqilla Novianto
*/
public class Bicycle extends Vehicle{
private String jenisSepeda;
public Bicycle(String merk, String model, int tahunProduksi, String jenisSepeda){
super(merk, model, tahunProduksi);
this.jenisSepeda = jenisSepeda;
}
public String getJenisSepeda(){
return jenisSepeda;
}
public String getInfoDetail(){
return String.format("Sepeda %s %s (%d) - Jenis: %s - Status: %s", merk, model, tahunProduksi, jenisSepeda, tersedia ? "Tersedia" : "Disewa");
}
public String getJenisKendaraan(){
return "Sepeda";
}
}Kode MyRental.java
/**
*
* @author Farrel Aqilla Novianto
*/
import java.util.ArrayList;
import java.util.Scanner;
public class MyRental{
private static ArrayList<Vehicle> daftarKendaraan = new ArrayList<>();
private static ArrayList<Renter> daftarPenyewa = new ArrayList<>();
private static Scanner scanner = new Scanner(System.in);
public static void main(String[] args){
inisialisasiData();
boolean running = true;
while(running){
tampilkanMenuUtama();
int pilihan = inputAngka("Pilih menu: ");
switch(pilihan){
case 1:
tampilkanDaftarKendaraan();
break;
case 2:
tampilkanDaftarPenyewa();
break;
case 0:
System.out.println("\nTerima kasih telah menggunakan myRental!");
running = false;
break;
default:
System.out.println("\nPilihan tidak valid!");
}
}
scanner.close();
}
private static void inisialisasiData(){
daftarKendaraan.add(new Car("Toyota", "Avanza", 2022, 4));
daftarKendaraan.add(new Car("Honda", "Civic", 2021, 4));
daftarKendaraan.add(new Car("Suzuki", "Ertiga", 2023, 4));
daftarKendaraan.add(new Motorcycle("Yamaha", "NMAX", 2023, 2));
daftarKendaraan.add(new Motorcycle("Honda", "Vario 160", 2022, 2));
daftarKendaraan.add(new Motorcycle("Suzuki", "GSX-R150", 2021, 2));
daftarKendaraan.add(new Bicycle("Polygon", "Xtrada", 2023, "Gunung"));
daftarKendaraan.add(new Bicycle("United", "Clovis", 2022, "BMX"));
daftarKendaraan.add(new Bicycle("Wimcycle", "Roadtech", 2023, "Balap"));
Renter penyewa1 = new Renter("Budi Santoso", "3201234567890123", "081234567890");
Renter penyewa2 = new Renter("Siti Nurhaliza", "3301234567890456", "082345678901");
Renter penyewa3 = new Renter("Ahmad Fadli", "3501234567890789", "083456789012");
penyewa1.sewaKendaraan(daftarKendaraan.get(1));
penyewa2.sewaKendaraan(daftarKendaraan.get(4));
penyewa3.sewaKendaraan(daftarKendaraan.get(7));
daftarPenyewa.add(penyewa1);
daftarPenyewa.add(penyewa2);
daftarPenyewa.add(penyewa3);
}
private static void tampilkanMenuUtama(){
System.out.println("\n=== myRental ===");
System.out.println("1. Tampilkan Daftar Kendaraan");
System.out.println("2. Tampilkan Daftar Penyewa");
System.out.println("0. Keluar");
}
private static void tampilkanDaftarKendaraan(){
System.out.println("\n=== Daftar Kendaraan ===");
if(daftarKendaraan.isEmpty()){
System.out.println("Tidak ada kendaraan dalam sistem.");
return;
}
int nomor = 1;
for(Vehicle kendaraan : daftarKendaraan){
System.out.printf("%d. %s\n", nomor++, kendaraan.getInfoDetail());
}
}
private static void tampilkanDaftarPenyewa(){
System.out.println("\n=== Daftar Penyewa ===");
if(daftarPenyewa.isEmpty()){
System.out.println("Belum ada penyewa terdaftar.");
return;
}
for(int i = 0; i < daftarPenyewa.size(); i++){
System.out.println("\n" + (i + 1) + ". " + daftarPenyewa.get(i).getInfoLengkap());
System.out.println("---");
}
}
private static int inputAngka(String prompt){
while(true){
try{
System.out.print(prompt);
int angka = Integer.parseInt(scanner.nextLine());
return angka;
}
catch(NumberFormatException e){
System.out.println("Input harus berupa angka!");
}
}
}
}
Dokumentasi
Saya sudah mendeklarasikan 9 data mobil dan 3 penyewa
Kesimpulan
Penggunaan inheritance (pewarisan) dalam OOP memungkinkan penggunaan ulang kode, karena kelas turunan dapat mewarisi properti dan metode dari kelas induknya, sehingga mengurangi duplikasi kode. Ini menghasilkan kode yang lebih terstruktur dan modular, memfasilitasi pemeliharaan dan pengembangan yang efisien.
Komentar
Posting Komentar