Sunday, November 18, 2018

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 





64 comments:

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

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

    ReplyDelete
  3. Nama : Samuel Marcellinus
    NRP : 05111740000134
    Kelas : PBO A
    Link : Link

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

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

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

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

    ReplyDelete
  8. Nama: Reza Adipatria Maranatha
    NRP: 05111740000186
    Kelas: PBO A
    Link: Link

    ReplyDelete
  9. Nama: Donny Fitrado
    NRP: 05111740000171
    Kelas: PBO A
    Link: Link Tugas

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

    ReplyDelete
  11. This comment has been removed by the author.

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

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

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

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

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

    ReplyDelete
  17. 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    ReplyDelete
  34. Nama: Zico Ritonda Bahen
    NRP: 05111740000064
    Kelas: PBO A
    Link: Link

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

    ReplyDelete
  36. Nama : Yasinta Yusniawati
    NRP : 05111740000054
    Kelas : PBO B
    Link : Link tugas

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

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

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

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

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

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

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

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

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

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

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

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

    ReplyDelete

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

    ReplyDelete
  50. This comment has been removed by the author.

    ReplyDelete
  51. Nama :Ahmad Syauqi
    NRP : 05111740000093
    Kelas: PBO B
    Link : Link

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

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

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

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

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

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

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

    ReplyDelete
  59. 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)

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

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

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

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

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

    ReplyDelete