PBO-Polymorphism - 9

Polimorfisme dalam inheritance memungkinkan objek dari subclass digunakan di mana pun objek superclass diharapkan, dan memungkinkan metode yang sama untuk berperilaku berbeda tergantung pada kelas objek yang memanggilnya. Polimorfisme memberikan fleksibilitas pada kode sehingga metode yang sama bisa diimplementasikan secara berbeda di kelas yang berbeda, namun tetap bisa dipanggil melalui referensi superclass.

Penjelasan Polimorfisme

Dalam inheritance, polimorfisme memungkinkan satu metode yang sama di superclass di-override (ditimpa) di subclass untuk memberikan perilaku yang sesuai dengan subclass tersebut. Ini memungkinkan kode yang memanggil metode di superclass tetap bisa menggunakan metode dengan nama yang sama di subclass. Ini mengurangi kebutuhan untuk menulis kode tambahan untuk memeriksa tipe objek atau memanggil metode spesifik berdasarkan tipe.


Dengan polimorfisme:

  1. Kita dapat menambah jenis display baru dengan mudah tanpa harus mengubah kode yang memanggil display().
  2. Kode menjadi lebih modular dan mudah dibaca karena menggunakan metode yang sama (display()) namun sesuai konteks.
  3. Menghindari kondisi if-else untuk memeriksa tipe Post, sehingga kode lebih bersih dan ringkas.

Polimorfisme memudahkan penulisan kode yang fleksibel dan mudah di-maintain dalam sistem yang mengandung hierarki kelas yang beragam.

Overriding

Overriding adalah fitur dalam pemrograman berorientasi objek yang memungkinkan subclass untuk menyediakan implementasi spesifik dari suatu metode yang sudah didefinisikan di superclass.

Ciri-ciri utama Overriding:

  1. Nama, Parameter, dan Tipe Pengembalian yang Sama: Metode di subclass harus memiliki nama, parameter, dan tipe pengembalian yang sama dengan metode di superclass.
  2. Dukungan Polimorfisme: Overriding memungkinkan penggunaan polimorfisme, di mana objek dari subclass dapat diperlakukan sebagai objek dari superclass, tetapi tetap menjalankan versi metode yang di-override di subclass.
  3. Annotations: Dalam Java, keyword @Override biasanya ditambahkan sebelum metode yang di-override untuk memastikan bahwa metode tersebut memang merupakan overriding dari superclass. Ini membantu menghindari kesalahan penulisan atau penamaan yang mungkin tidak cocok dengan metode di superclass.

Manfaat Overriding:

  • Spesialisasi Metode untuk Subclass: Subclass dapat memiliki metode dengan perilaku khusus, yang mungkin tidak relevan bagi superclass.
  • Pemanfaatan Polimorfisme: Memungkinkan satu metode yang sama untuk berperilaku berbeda sesuai tipe objek yang memanggilnya.
  • Modular dan Extensible: Dengan overriding, kode menjadi modular karena kita tidak perlu memodifikasi kode superclass untuk mengubah perilaku dalam subclass.

Contoh Studi Kasus Overriding: Sistem Pengelolaan Kendaraan di Rental Mobil

Misalkan kita mengelola sistem rental mobil yang mendukung beberapa jenis kendaraan seperti mobil biasa, truk, dan kendaraan mewah. Setiap kendaraan memiliki cara yang berbeda dalam menghitung tarif sewa berdasarkan jenisnya. Kita bisa menggunakan overriding untuk menyediakan metode calculateRentalCost() yang spesifik untuk setiap jenis kendaraan.

1. Membuat Superclass Vehicle

java

class Vehicle {

    protected double baseRate;

     public Vehicle(double baseRate) {

        this.baseRate = baseRate;

    }

 

    public double calculateRentalCost(int days) {

        return baseRate * days;

    }

}

  • Vehicle memiliki metode calculateRentalCost() yang menghitung tarif berdasarkan tarif dasar (baseRate) dikalikan dengan jumlah hari (days).
  • Subclass nanti akan meng-override metode ini untuk menyesuaikan tarif sesuai jenis kendaraannya.

2. Menggunakan Overriding dalam Subclass Car, Truck, dan LuxuryCar

java

class Car extends Vehicle {

    public Car(double baseRate) {

        super(baseRate);

    }

     @Override

    public double calculateRentalCost(int days) {

        // Mobil biasa tanpa biaya tambahan

        return baseRate * days;

    }

}

 

class Truck extends Vehicle {

    public Truck(double baseRate) {

        super(baseRate);

    }

     @Override

    public double calculateRentalCost(int days) {

        // Truk memiliki biaya tambahan untuk penggunaan berat

        double heavyDutyFee = 50.0;

        return (baseRate * days) + heavyDutyFee;

    }

}

 

class LuxuryCar extends Vehicle {

    public LuxuryCar(double baseRate) {

        super(baseRate);

    }

     @Override

    public double calculateRentalCost(int days) {

        // Kendaraan mewah memiliki tarif tambahan untuk layanan premium

        double luxuryFee = 100.0;

        return (baseRate * days) + luxuryFee;

    }

}

  • Car: calculateRentalCost() menggunakan tarif dasar saja tanpa tambahan.
  • Truck: calculateRentalCost() menambahkan biaya heavyDutyFee karena truk memerlukan biaya tambahan untuk penggunaan berat.
  • LuxuryCar: calculateRentalCost() menambahkan luxuryFee untuk layanan premium.

3. Menggunakan Polimorfisme dengan Overriding

Karena Car, Truck, dan LuxuryCar adalah subclass dari Vehicle, kita bisa menggunakan polimorfisme untuk memanggil calculateRentalCost() pada objek dari tipe Vehicle namun hasilnya sesuai dengan tipe objek aslinya.

java

public class Main {

    public static void main(String[] args) {

        Vehicle myCar = new Car(200);

        Vehicle myTruck = new Truck(300);

        Vehicle myLuxuryCar = new LuxuryCar(500);

         int rentalDays = 3;

         System.out.println("Car rental cost for " + rentalDays + " days: " + myCar.calculateRentalCost(rentalDays));

        // Output: Car rental cost for 3 days: 600.0

         System.out.println("Truck rental cost for " + rentalDays + " days: " + myTruck.calculateRentalCost(rentalDays));

        // Output: Truck rental cost for 3 days: 950.0

         System.out.println("Luxury Car rental cost for " + rentalDays + " days: " + myLuxuryCar.calculateRentalCost(rentalDays));

        // Output: Luxury Car rental cost for 3 days: 1600.0

    }

}

Penjelasan:

Pada contoh ini:

  • myCar.calculateRentalCost(rentalDays) memanggil versi metode calculateRentalCost() di kelas Car, yang hanya mengalikan tarif dasar dengan jumlah hari.
  • myTruck.calculateRentalCost(rentalDays) memanggil versi calculateRentalCost() di Truck, yang menambahkan heavyDutyFee.
  • myLuxuryCar.calculateRentalCost(rentalDays) memanggil versi calculateRentalCost() di LuxuryCar, yang menambahkan luxuryFee.
Meskipun semua objek bertipe Vehicle, metode calculateRentalCost() yang dipanggil sesuai dengan tipe objek yang sebenarnya (Car, Truck, atau LuxuryCar). Ini adalah hasil dari overriding yang didukung oleh polimorfisme.

Materi







Sourcecode




Pengumpulan Tugas


Latihan :

Buatlah sistem reservasi tiket pesawat yang mendukung tiga jenis kelas penerbangan:

  1. Ekonomi
  2. Bisnis
  3. First Class

Setiap kelas penerbangan memiliki perhitungan tarif yang berbeda-beda. Selain itu, setiap kelas juga memiliki kebijakan khusus, seperti fasilitas tambahan, batas bagasi, atau layanan yang disediakan.

Struktur Kelas:

  1. Kelas Ticket adalah kelas dasar atau superclass yang berfungsi sebagai kelas umum untuk semua jenis reservasi tiket pesawat.
  2. Kelas EconomyTicket, BusinessTicket, dan FirstClassTicket adalah subclass yang mewarisi dari Ticket. Setiap subclass mengoverride metode calculateFare() untuk menentukan tarif sesuai kelas penerbangan.
  3. Ketentuan Diskon ticket

·  EconomyTicket memberikan diskon 10%.

·  BusinessTicket menambahkan biaya 25%.

·  FirstClassTicket menambahkan biaya 50%.


Referensi : Buku Object First Java

DOME source code

Absensi Kelas 





Share this

Related Posts

Previous
Next Post »

64 komentar

komentar
November 18, 2018 at 6:33 PM delete

Nama : Bastian Farandy
NRP : 05111740000190
Kelas : PBO A
Link : Fox and Rabbits project

Reply
avatar
November 18, 2018 at 6:33 PM delete

Nama : Bobbi Aditya
NRP : 05111740000099
Kelas : PBO A
Link :ini linknya

Reply
avatar
November 18, 2018 at 6:37 PM delete

Nama : Samuel Marcellinus
NRP : 05111740000134
Kelas : PBO A
Link : Link

Reply
avatar
November 18, 2018 at 6:44 PM delete

Nama : Ifta Jihan N
NRP : 05111740000034
Kelas : PBO A
Link : Tugas

Reply
avatar
November 18, 2018 at 6:44 PM delete

Nama : Sherly Rosa Anggraeni
NRP : 05111740000018
Kelas : PBO A
Link : Tugas

Reply
avatar
November 18, 2018 at 6:47 PM delete

Nama: Indira Nursyamsina Hazimi
NRP: 05111740000082
Kelas: PBO A
Link: Tugass

Reply
avatar
November 18, 2018 at 6:50 PM delete

Nama: Bima S. Ramadhan
NRP: 05111740000081
Kelas: PBO A
Link: click me

Reply
avatar
November 18, 2018 at 6:54 PM delete

Nama: Reza Adipatria Maranatha
NRP: 05111740000186
Kelas: PBO A
Link: Link

Reply
avatar
November 18, 2018 at 6:54 PM delete

Nama: Donny Fitrado
NRP: 05111740000171
Kelas: PBO A
Link: Link Tugas

Reply
avatar
November 18, 2018 at 6:58 PM delete

Nama : Yuki Yanuar Ratna
NRP : 05111740000023
Kelas : PBO A
Link : Rabbit And Fox

Reply
avatar
November 18, 2018 at 7:02 PM delete This comment has been removed by the author.
avatar
November 18, 2018 at 7:02 PM delete

Nama: Ayu Mutiara Sari
NRP: 05111740000149
Kelas: PBO A
Link: Rabbit Fox

Reply
avatar
November 18, 2018 at 7:03 PM delete

Nama : Yudhistiro Adi Nugroho
NRP : 05111740000165
Kelas : PBO A
Link : Rabbit And Fox

Reply
avatar
November 18, 2018 at 7:10 PM delete

Nama : Nitama Nurlingga Yotifa
NRP : 05111740000059
Kelas : PBO A
Link : The Foxes and Rabbits Simulator

Reply
avatar
November 18, 2018 at 8:00 PM delete

Nama : Karina Soraya P
NRP : 05111740000003
Kelas : PBO - B
Link : Foxes and Rabbits

Reply
avatar
November 18, 2018 at 8:26 PM delete

Nama: Paramastri Ardiningrum
NRP: 05111740000019
Kelas: PBO-B
Link: Membuat Foxes and Rabbits Simulator

Reply
avatar
November 18, 2018 at 8:29 PM delete

Nama: Carlo Win Marshal
NRP: 05111740000098
Kelas: PBO-B
Link: Simulasi fox and rabbit https://enlightechtc.blogspot.com/2018/11/tugas-pbo-b-fox-and-rabbit.html

Reply
avatar
November 18, 2018 at 8:34 PM delete

Nama: Satria Ade Veda Karuniawan
NRP: 05111740000130
Kelas: PBO - A
Link: Fox and Rabbit

Reply
avatar
November 18, 2018 at 8:53 PM delete

Nama: Muhammad Fadhlan Min Robby
NRP : 05111740000123
Kelas : PBO - B
Link : RUbah dan SErigala

Reply
avatar
November 18, 2018 at 9:04 PM delete

Nama : Isnaini Nurul KurniaSari
NRP : 05111740000010
Kelas: PBO-B
Link : Foxes and Rabbits Simulator

Reply
avatar
November 18, 2018 at 9:07 PM delete

Nama : Zahrul Zizki Dinanto
NRP : 05111740000168
Kelas : PBO-B
Link : fox and rabbit

Reply
avatar
November 18, 2018 at 9:10 PM delete

Nama : Mohammad Rizaldi Huzein Prastomo
NRP : 05111740000024
Kelas : PBO-B
Link : Link tugas

Reply
avatar
November 18, 2018 at 9:21 PM delete

Nama : Hendra Ramadani
NRP : 05111740000055
Kelas : PBO-B
Link : Fox And Rabbit

Reply
avatar
November 18, 2018 at 9:40 PM delete

Nama : Chaniyah Zulfa Mukhlishah
NRP : 05111740000115
Kelas: PBO-B
Link : Simulasi_Fox_And_Rabbit

Reply
avatar
November 18, 2018 at 9:49 PM delete

Nama : Putri Endah Puspitasari
NRP : 05111740000039
KElas: PBO - B
Link : Foxes and Rabbits

Reply
avatar
November 18, 2018 at 9:51 PM delete

Nama: Arino Jenynof
NRP: 05111740000096
Kelas: PBO B
Link: Fox and Rabbit

Reply
avatar
November 18, 2018 at 9:55 PM delete

Nama: Vinsensius Yuda Pratama
NRP: 05111740000156
Kelas: PBO B
Link: Foxes and Rabbits Simulator

Reply
avatar
Anonymous
November 18, 2018 at 10:03 PM delete

Nama : Wasilatul Dewi Ningrum
NRP : 05111740000004
Kelas : PBO B
Link : Foxes and Rabbits

Reply
avatar
November 18, 2018 at 10:15 PM delete

Nama; Muhammad Naufal Refadi
NRP: 05111740000097
Kelas: PBO-A
Link: Fox and Rabbit

Reply
avatar
November 19, 2018 at 1:43 AM delete

Nama: Muhammad Aufa Wibowo
NRP: 05111640000184
Kelas: PBO-A
Link: Fox and Rabbit

Reply
avatar
November 19, 2018 at 2:31 AM delete

Nama: Annas Nuril Iman
NRP: 05111740000042
Kelas: PBO-B
Link: Fox and Rabbit

Reply
avatar
November 19, 2018 at 4:06 AM delete

Nama: Ismail Arifin
NRP: 05111740007007
Kelas: PBO B
Link: fox and rabbit

Reply
avatar
November 19, 2018 at 6:26 AM delete

Nama : M Thalut Nadhil Q
NRP : 05111740000143
Kelas : PBO-B
Link : Fox and Rabbit

Reply
avatar
November 19, 2018 at 6:32 AM delete

Nama: Zico Ritonda Bahen
NRP: 05111740000064
Kelas: PBO A
Link: Link

Reply
avatar
November 19, 2018 at 7:09 AM delete

Nama: Ghannie Wijaya
NRP: 05111640000048
Kelas: PBO-B
Link: Foxes and Rabbits Simulator

Reply
avatar
November 19, 2018 at 7:45 AM delete

Nama : Yasinta Yusniawati
NRP : 05111740000054
Kelas : PBO B
Link : Link tugas

Reply
avatar
November 19, 2018 at 8:33 AM delete

Nama: Mohammad Nafis Naufally
NRP: 05111640000038
Kelas: PBO B
Link: Di sini

Reply
avatar
November 19, 2018 at 10:18 AM delete

Nama : Krisna Badru Wijaya
NRP : 05111740000048
Kelas : PBO B
Link : foxes and rabbits

Reply
avatar
November 20, 2018 at 6:28 AM delete

Nama : Haikal Almaz Said
NRP : 05111740000068
Kelas : PBO A
Link : Fox and Rabbits Simulator

Reply
avatar
November 20, 2018 at 9:04 AM delete

Nama :Puguh Santosa D
NRP :5116100049
Kelas :PBO-A
Link : Polymorphism
Fox and Rabbit

Reply
avatar
November 20, 2018 at 1:20 PM delete

Nama :Lutfiyanti
NRP :05111740000036
Kelas :PBO-B
Link : Foxes And Rabbits

Reply
avatar
November 20, 2018 at 6:30 PM delete

Nama : Atika Rizki Nurakhmah
NRP : 05111740000015
Kelas : PBO - A
Link : Foxes and rabbits

Reply
avatar
November 21, 2018 at 3:37 AM delete

Nama : Timothyus Tanner
NRP : 05111740000103
Kelas : PBO-A
Link Tugas

Reply
avatar
November 21, 2018 at 9:08 PM delete

Nama : Nandha Himawan
NRP : 05111740000180
Kelas : PBO A
Link : Foxes and rabbit

Reply
avatar
November 22, 2018 at 4:19 AM delete

Nama: I Gede Agung Krisna Pamungkas
NRP: 05111740000135
Kelas: PBO A
Link: Simulator Fox dan Rabbit

Reply
avatar
November 22, 2018 at 8:12 AM delete

Nama: Yemima Sutanto
NRP: 05111740000049
Kelas: PBO A
LINK: Fox and Rabbit Simulator

Reply
avatar
November 23, 2018 at 9:32 PM delete

Nama : Arini Puspitasari
NRP : 05111740000040
Kelas: PBO-B
Link : Fox and Rabbit

Reply
avatar
November 24, 2018 at 7:27 PM delete

Nama : Edgar Andrew hutauruk
NRP : 05111740000166
Kelas : PBO B
Link : Fox and Rabbit

Reply
avatar
November 25, 2018 at 2:08 AM delete


Nama :Hafidz Firman Asqalany
NRP : 05111740000195
Kelas: PBO A
Link :ini linknya

Reply
avatar
November 25, 2018 at 7:02 PM delete This comment has been removed by the author.
avatar
November 25, 2018 at 7:03 PM delete

Nama :Ahmad Syauqi
NRP : 05111740000093
Kelas: PBO B
Link : Link

Reply
avatar
November 25, 2018 at 8:07 PM delete

Nama : Fadhlan Aulia
NRP: 05111640000125
Kelas : PBO B
Link : Fox dan Rabbit

Reply
avatar
ch
November 25, 2018 at 8:46 PM delete

Nama : Chrisnady Anggaiswara
NRP: 05111640000153
Kelas : PBO B
Link : Fox n Rabbit

Reply
avatar
November 26, 2018 at 1:04 AM delete

Nama : Budiman Akbar Radhiansyah
NRP : 05111740000179
Kelas : PBO A
Link : Link Tugas Fox and Rabbit

Reply
avatar
November 26, 2018 at 5:35 AM delete

Nama: Elkana Hans Widersen
NRP: 05111740000127
Kelas: PBO A
Link: Fox and Rabbit

Reply
avatar
November 26, 2018 at 7:51 AM delete

Nama: Moh. Iman Afandy
NRP: 05111740000129
Kelas: PBO B
Link: Tugas Fox and Rabbit

Reply
avatar
November 26, 2018 at 12:33 PM delete

Nama: Nadia Hasna
NRP : 05111740000077
Kelas: PBO A
Link : Fox and Rabbit

Reply
avatar
November 27, 2018 at 3:29 PM delete

Nama: Shawn Timothy Mulya Putra
NRP : 05111740000095
Kelas: PBO A
Link : jawaban

Reply
avatar
December 2, 2018 at 6:59 AM delete

Nama: Akmal Darari Rafif B
NRP: 05111640000148
Kelas: PBO A
Link: https://darariakmal.blogspot.com/2018/11/tugas-7-pbo-fox-rabbit-simulator.html

Mohon maaf, seharusnya saya posting disini (Saya salah posting di kolom komentar PBO-Memperbaiki Struktur dengan Inheritance)

Reply
avatar
December 2, 2018 at 1:06 PM delete

Nama : Fachry Amir
NRP : 05111740000084
Kelas : PBO B
Link : Tugas Foxes and Rabbits

Reply
avatar
December 5, 2018 at 9:08 PM delete

Nama : Ahmad Yahya Abdul Aziz
NRP : 05111740000128
Kelas : PBO - A
Link : Fox and Rabbit

Reply
avatar
December 9, 2018 at 1:39 AM delete

Nama : Muhammad Husni Ridhart Azzikry
NRP : 05111740000122
Kelas: PBO - B
Link : Fox and Rabbit

Reply
avatar
December 9, 2018 at 6:26 AM delete

Nama : Muh. Shafwatallah Wahid
NRP : 05111740007002
Kelas: PBO - B
Link : Fox and Rabbit

Reply
avatar
December 9, 2018 at 10:30 AM delete

Nama : Christine Amelia
NRP : 05111740000174
Kelas : PBO B
Link : https://chrstnamelia.blogspot.com/2018/12/tugas-pbo-b.html

Reply
avatar