Polimorfisme vs. Warisan: Perbedaan Antara Polimorfisme & Warisan [2022]

Diterbitkan: 2021-01-05

Polimorfisme dan pewarisan keduanya merupakan konsep yang sangat mendasar dari pemrograman berorientasi objek. Penambahan objek dalam bahasa pemrograman modern telah membuat perbedaan besar dalam cara kita menggunakan bahasa dan hal-hal yang dapat kita lakukan dengan objek tersebut. Singkatnya, pemrograman berorientasi objek adalah seperangkat metode yang memungkinkan programmer untuk menggunakan kelas dan, karenanya, menurunkan objek berdasarkan kelas-kelas ini.

Ini bertujuan untuk menyerupai entitas dunia nyata dan memudahkan programmer untuk membuat kode mereka termasuk paradigma mereka menulis kode mereka. Pada dasarnya ada empat konsep pemrograman berorientasi objek, yaitu Warisan, Abstraksi, Polimorfisme, dan enkapsulasi. Sekarang, masing-masing ide, seperti yang disebutkan sebelumnya, dapat dianggap sebagai pilar di mana bahasa modern berdiri.

Kembali ke topik kita tentang polimorfisme vs. pewarisan dan hak kelelawar, kita melihat perbedaan mencolok antara kedua konsep tersebut. Warisan adalah konsep yang memungkinkan kode untuk digunakan kembali lagi dalam program yang sama atau berbeda. Kita bahkan dapat mengubah perilaku kode dengan menyimpan hal-hal yang kita sukai dan membuang yang tidak berguna untuk tugas yang ingin kita selesaikan. Warisan menghemat banyak waktu dalam mengembangkan hampir semua yang kita lihat di tampilan digital kita saat ini.

Di sisi lain, polimorfisme bertanggung jawab untuk mendikte kode yang sudah ditulis dan memutuskan jenis kode apa yang perlu dieksekusi berdasarkan parameter tertentu secara real-time. Akan bermanfaat bagi siapa saja untuk terlebih dahulu melalui masing-masing konsep ini secara mendetail terlebih dahulu, sebelum beralih ke diskusi tentang perbedaan antara polimorfisme dan pewarisan. Perbedaan tersebut akan semakin terasa setelah kita mengetahui apa sebenarnya yang dimaksud dengan Inheritance dan Polymorphism.

Dapatkan gelar Rekayasa Perangkat Lunak dari Universitas top dunia. Dapatkan Program PG Eksekutif, Program Sertifikat Tingkat Lanjut, atau Program Magister untuk mempercepat karier Anda.

Daftar isi

Warisan

Akan menjadi kejahatan dalam paradigma pemrograman untuk tidak menganggap Warisan sebagai konsep OOP yang sangat penting. Pentingnya warisan tidak boleh dianggap enteng karena tujuan warisan adalah “dapat digunakan kembali.” Apa yang dilakukan warisan, seperti namanya, adalah memungkinkan kode yang ditulis dalam kelas diperluas ke kelas lain. Jadi, dalam pewarisan, ada kelas dasar; kelas tempat kode ditulis akan digunakan kembali.

Kelas berikutnya yang akan kita buat harus diwarisi dari kelas dasar ini untuk menggunakan semua fungsi dan variabel yang terkait dengan kelas dasar. Setiap kali sebuah kelas mengambil properti dari kelas lain (atau mewarisi dari kelas yang berbeda), semua anggota yang ada di kelas dasar menjadi anggota dari kelas turunan baru ini.

Kode contoh yang diberikan di bawah ini akan menunjukkan kepada Anda seperti apa bentuk umum pewarisan. Satu hal penting yang perlu diperhatikan di sini adalah bahwa sintaks yang tepat yang harus Anda tulis untuk mengaktifkan pewarisan kode hanya akan bergantung pada bahasa pemrograman yang Anda pilih.

  1. class-class-class-name : access-specifier base-class-name{
  2. // badan dari kelas turunan
  3. }

Dalam contoh yang ditunjukkan di atas, hal-hal tertentu memerlukan sedikit penjelasan. Kata "akses specifier" berarti cara di mana kelas turunan akan mengakses properti dan metode kelas dasar. Ada tiga penentu akses secara umum, masing-masing memiliki arti sendiri (yaitu pribadi, publik, dan dilindungi) dan properti.

Sekali lagi, tergantung pada bahasa pilihan Anda, Anda mungkin atau mungkin tidak harus menggunakan penentu akses ini. Jadi, di dunia C++, jika Anda mewarisi tanpa menentukan apa pun secara default, itu akan menjadi pribadi. Namun, jika Anda mewarisi dari suatu struktur (diikuti dengan kata kunci struct), penentu akses default akan menjadi publik alih-alih pribadi.

Baca: Peluang Karir di Bahasa Pemrograman R

C++ juga memberi Anda banyak opsi untuk dipilih saat Anda melakukan pewarisan. Anda akan menemukan beberapa di antaranya tercantum di bawah ini:

Sebuah. Warisan Hirarki: Jenis pewarisan ini mengikuti aturan bahwa hanya boleh ada satu superclass, dan dari superclass itu, harus ada banyak subclass turunan. Anda akan menemukan contohnya di bawah ini:

  1. //Kelas Dasar
  2. kelas A
  3. {
  4. kesenangan kosong publikA()
  5. {
  6. //
  7. }
  8. }
  9. //Kelas Turunan
  10. kelas B: A
  11. {
  12. kesenangan kosong publikB()
  13. {
  14. //
  15. }
  16. }
  17. //Kelas Turunan
  18. kelas C: A
  19. {
  20. kesenangan publik kosongC()
  21. {
  22. //
  23. }
  24. }
  25. //Kelas Turunan
  26. kelas D: C
  27. {
  28. dana batal publikD()
  29. {
  30. //
  31. }
  32. }
  33. //Kelas Turunan
  34. kelas E: C
  35. {
  36. kesenangan publik kosongE()
  37. {
  38. //
  39. }
  40. }
  41. //Kelas Turunan
  42. kelas F: B
  43. {
  44. kesenangan kosong publikF()
  45. {
  46. //
  47. }
  48. }
  49. //Kelas Turunan
  50. kelas G: B
  51. {
  52. kesenangan publik kosongG()
  53. {
  54. //
  55. }
  56. }

B. Multiple Inheritance: Jika Anda melakukan multiple inheritance, itu berarti Anda hanya memiliki satu subclass turunan yang mewarisi dari beberapa superclass. Anda akan menemukan contoh sederhana dari multiple inheritance di bawah ini:

  1. //Kelas Dasar
  2. kelas A
  3. {
  4. kesenangan kosong publikA()
  5. {
  6. //
  7. }
  8. }
  9. //Kelas Dasar
  10. kelas B
  11. {
  12. kesenangan kosong publikB()
  13. {
  14. //
  15. }
  16. }
  17. //Kelas Turunan
  18. kelas C: A, B
  19. {
  20. kesenangan publik kosongC()
  21. {
  22. //
  23. }
  24. }

C. Warisan Tunggal: Ini mungkin bentuk warisan paling sederhana. Hanya ada satu kelas dasar dan satu kelas turunan. Anda akan menemukan contoh di bawah ini:

  1. //Kelas Dasar
  2. kelas A
  3. {
  4. kesenangan kosong publikA()
  5. {
  6. //MELAKUKAN:
  7. }
  8. }
  9. //Kelas Turunan
  10. kelas B: A
  11. {
  12. kesenangan kosong publikB()
  13. {
  14. //MELAKUKAN:
  15. }
  16. }

Polimorfisme

Definisi dasar dari kata polimorfisme berarti memiliki banyak bentuk. Definisi ini berlaku sangat akurat dalam menjelaskan polimorfisme dalam konteks pemrograman. Dalam paradigma ini, polimorfisme mengambil makna satu fungsi tetapi banyak bentuk. Polimorfisme sebenarnya terjadi pada waktu kompilasi. Polimorfisme pada waktu kompilasi hanya dimungkinkan karena konsep kelebihan beban, dan pada waktu berjalan, fitur penimpaan membuat polimorfisme menjadi kenyataan. Satu per satu, mari kita bahas definisi overloading dan overriding.

Overloading membutuhkan kode yang Anda tulis atau fungsi kelas untuk ditulis lebih dari sekali dengan parameter yang berbeda tetapi memiliki tipe pengembalian yang sama. Ini berarti bahwa argumen yang Anda berikan ke dalam fungsi dapat berbeda, dan hanya dengan melihat nilai akhir yang diteruskan ke dalam fungsi pada saat dijalankan, bentuk fungsi yang akan dipanggil diputuskan. Secara umum, kita melihat konstruktor kelas menjadi fungsi yang paling kelebihan beban. Semua teori ini akan menjadi lebih jelas, dan akan lebih mudah bagi Anda untuk menanamkannya dalam pikiran Anda dengan bantuan sebuah contoh.

  1. kelebihan kelas{
  2. dalam a, b;
  3. publik:
  4. int kelebihan beban (int x){ // kelebihan beban pertama() konstruktor
  5. a=x;
  6. kembalikan;
  7. }
  8. int kelebihan beban (int x, int y){ //kelebihan kedua() konstruktor
  9. a=x;
  10. b=y;
  11. kembali a*b;
  12. }
  13. };
  14. int utama (){
  15. kelebihan O1;
  16. O1. kelebihan beban (20); //pertama overload() panggilan konstruktor
  17. O1. kelebihan beban (20,40); // panggilan konstruktor overload () kedua

Di sini, dalam contoh ini, kita melihat aksi overloading. Lihatlah bagaimana konstruktor yang berbeda dipanggil tergantung pada apakah nilai akhir kurung objek adalah satu bilangan bulat atau dua.

Mari kita bahas definisi Overriding selanjutnya. Anda hanya dapat melakukan penggantian ke fungsi-fungsi khusus yang diwarisi. Ya, pewarisan adalah titik kunci dalam membuat penggantian fungsi menjadi mungkin. Jika Anda ingin menulis fungsi dan juga menimpanya, di C++ Anda harus menggunakan kata kunci virtual sebelum definisi fungsi, dan di kelas turunan menggunakan nama yang sama untuk fungsi Anda, hapus saja kata kunci virtual. Untuk memperkuat pemahaman Anda, berikut adalah contohnya:

  1. basis kelas{
  2. publik:
  3. fungsi void virtual (){ //fungsi virtual kelas dasar
  4. cout<<“Ini adalah fungsi kelas dasar()”;
  5. }
  6. };
  7. kelas turunan1 : basis publik{
  8. publik:
  9. void funct (){ //fungsi virtual kelas dasar didefinisikan ulang di kelas turunan1
  10. cout<<“Ini adalah fungsi kelas turunan1 ()”;
  11. }
  12. };
  13. int utama ()
  14. {
  15. dasar *p, b;
  16. turunan1 d1;
  17. *p=&b;
  18. p-> fungsi (); //panggil ke fungsi kelas dasar().
  19. *p=&d1;
  20. kembali 0;
  21. }

Lihatlah bagaimana kata kunci virtual digunakan di kelas dasar, dan di kelas turunan, definisi fungsi yang sama hanya ada kata kunci virtual yang tidak ada.

Beberapa perbedaan mencolok antara polimorfisme dan pewarisan:

  1. Warisan pada dasarnya membuat kelas, dan kemudian memiliki kelas lain dalam program Anda mendapatkan fitur mereka dari kelas dasar yang sudah ada. Namun, polimorfisme adalah antarmuka, dan karena menjadi antarmuka, polimorfisme dapat mengambil bentuk dan bentuk yang berbeda.
  2. Warisan adalah properti yang berkaitan dengan kelas saja, sedangkan polimorfisme meluas ke metode dan/atau fungsi apa pun.
  3. Warisan memungkinkan kelas turunan untuk menggunakan semua fungsi dan variabel yang dideklarasikan di kelas dasar tanpa mendefinisikannya lagi secara eksplisit. Itulah mengapa kami mengatakan bahwa warisan meningkatkan penggunaan kembali kode dan mengurangi panjang kode, yang harus kami tulis jika warisan tidak ada. Sedangkan, polimorfisme memungkinkan nama fungsi yang sama memiliki dua kode yang sangat berbeda. Jadi, dalam arti tertentu, alih-alih mengurangi panjang kode yang harus kita tulis, polimorfisme memperluasnya lebih jauh.
  4. Ada banyak bentuk yang dapat diambil dari warisan; Anda bisa benar-benar kreatif dengan warisan. Namun, polimorfisme hanya dapat dilakukan dengan dua cara, yaitu overloading dan overriding. Anda masih bisa menjadi sangat gila saat menggunakan polimorfisme, tetapi Anda dibatasi hanya pada dua cara untuk mengimplementasikannya ke dalam kode tulisan Anda.

Harus Dibaca: Harus Dibaca 47 Pertanyaan & Jawaban Wawancara OOPS Untuk Freshers & Berpengalaman

Polimorfisme vs. pewarisan: Diferensiasi tabular

Pada tabel di bawah, Anda akan menemukan perbedaan yang jelas antara polimorfisme dan pewarisan:

TINDAKAN PERBANDINGAN WARISAN POLIMORFISME
Perbedaan mendasar antara keduanya Arti dari pewarisan adalah untuk membuat kelas baru yang memiliki properti (fungsi dan variabel dari kelas yang ada) Ini pada dasarnya adalah platform yang memungkinkan kode ditulis dalam berbagai bentuk.
Perbedaan cara keduanya dapat diintegrasikan ke dalam kode Anda Hanya kelas yang dapat menikmati warisan nyata dalam kode. Itu dapat diimplementasikan dan digunakan oleh fungsi dan/atau metode apa pun di seluruh kode.
Perbedaan cara keduanya dapat digunakan. Ini memungkinkan kode yang ditulis untuk digunakan kembali dalam program yang sama atau berbeda. Tanpa itu, pemrograman berorientasi objek akan kehilangan fitur penting. Ini memungkinkan objek yang dideklarasikan untuk membuat keputusan bentuk fungsi mana yang akan dipanggil. Ada dua waktu ketika ini bisa diputuskan. Saat run-time, ini disebut overriding; pada waktu kompilasi, ini disebut overloading.
Bentuk berbeda yang bisa diambil keduanya Ada banyak sekali bentuk warisan yang bisa diambil. Hanya ada dua bentuk polimorfisme. Bergantung pada waktu dalam program, itu berubah dari overloading menjadi overriding.
Contoh dasar yang menunjukkan bagaimana masing-masing dari mereka diimplementasikan. Kelas sepeda dapat diturunkan dari kelas kendaraan roda dua, yang pada gilirannya dapat menjadi subkelas kendaraan. Sepeda kelas dapat memiliki metode bernama set_color(), yang mengubah warna sepeda berdasarkan nama warna yang Anda masukkan.

Lihat: Apa itu Jenis Casting di Java | Memahami Jenis Casting Sebagai Pemula

Kesimpulan

Aman untuk mengatakan bahwa polimorfisme dan pewarisan adalah konsep penting dalam membuat program apa pun menjadi kenyataan. Keduanya adalah fondasi di mana ide pemrograman berorientasi objek diletakkan. Ada banyak perbedaan antara polimorfisme dan pewarisan karena mereka melayani dua tujuan yang sangat berbeda.

Polimorfisme memungkinkan programmer untuk menulis beberapa definisi fungsi. Pada saat yang sama, pewarisan memungkinkan pengguna untuk menggunakan kembali kode yang sudah ditulis. Untuk sepenuhnya memahami dan menghargai kedua konsep tersebut, Anda disarankan untuk membaca lebih lanjut tentang kedua topik tersebut.

Satu hal yang harus selalu Anda ingat setiap kali Anda menulis kode adalah bahwa jika Anda ingin memperbaiki kode yang telah Anda tulis (pada dasarnya definisi satu kelas dan menggunakannya lagi dalam kode Anda untuk melayani yang serupa atau berbeda tujuan), Anda harus memanfaatkan warisan. Jika Anda ingin mengurangi kebingungan keseluruhan dalam kode Anda dan ingin menggunakan nama fungsi yang sama untuk melakukan tugas serupa, Anda harus menggunakan polimorfisme.

Jika Anda tertarik untuk mempelajari lebih lanjut tentang pengembangan perangkat lunak full-stack, lihat Diploma PG Tingkat & IIIT-B dalam Pengembangan Perangkat Lunak Full-stack yang dirancang untuk profesional yang bekerja dan menawarkan 500+ jam pelatihan yang ketat, 9+ proyek, dan tugas, status Alumni IIIT-B, proyek batu penjuru praktis & bantuan pekerjaan dengan perusahaan-perusahaan top.

Rencanakan Karir Pengembangan Perangkat Lunak Anda Sekarang.

Terapkan untuk Sertifikasi PG terkait Pekerjaan upGrad dalam Rekayasa Perangkat Lunak