Konsep OOP untuk Pemula: Penjelasan Polimorfisme

Diterbitkan: 2021-12-10

Dalam bahasa tingkat tinggi seperti Python dan Java, OOP atau pemrograman berorientasi objek mengacu pada organisasi desain perangkat lunak di sekitar data dan objek daripada logika dan fungsi. Objek didefinisikan sebagai bidang data dengan atribut dan perilaku unik. Dengan kata lain, OOP berfokus pada objek daripada logika. Model pemrograman seperti itu sangat ideal untuk program besar dan kompleks yang membutuhkan pembaruan dan pemeliharaan aktif. Plus, ini menghadirkan manfaat tambahan dari skalabilitas, efisiensi, dan penggunaan kembali kode.

OOP memiliki empat blok bangunan mendasar – polimorfisme, enkapsulasi, abstraksi, dan pewarisan. Karena ruang lingkup artikel kami terbatas pada polimorfisme di OOP, kami akan membahas polimorfisme secara rinci, termasuk contoh polimorfisme di Java dan polimorfisme di Python.

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

Daftar isi

Definisi Polimorfisme

Definisi polimorfisme yang paling sederhana adalah bahwa polimorfisme berarti ada dalam berbagai bentuk. Ini berakar pada dua istilah Yunani - 'poli', yang berarti 'banyak' dan 'morph', yang diterjemahkan menjadi 'bentuk'.

Untuk memahami konsep dengan lebih baik, mari kita ambil contoh sederhana terlebih dahulu. Ambil contoh perilaku kursor, kursor yang sama yang Anda lihat bergerak di layar setiap kali Anda menggunakan mouse atau trackpad. Tergantung pada tindakan pengguna atau mode program, kursor dapat mengambil bentuk yang berbeda, seperti panah, salib, garis, atau jari telunjuk.

Polimorfisme adalah salah satu fitur paling signifikan dari OOP. Di Java dan Python, variabel, objek, dan fungsi bisa ada dalam berbagai bentuk. Dalam polimorfisme, subkelas atau metode mendefinisikan atribut dan perilakunya sambil mempertahankan beberapa fungsi kelas induknya. Itu membawa kita ke warisan, yang memungkinkan Anda membuat hierarki kelas di mana kelas dasar memberikan atribut dan perilakunya ke kelas turunan. Selanjutnya, fungsionalitas kelas turunan dapat dimodifikasi atau diperluas secara bebas sesuai kebutuhan. Untuk tujuan ini, polimorfisme memastikan bahwa metode yang benar dijalankan berdasarkan jenis objek pemanggil.

Untuk meletakkannya dalam perspektif, misalkan Anda memiliki kelas yang menampilkan tanggal dan waktu. Sekarang, Anda membuat metode yang mewarisi kelas dan menampilkan pesan "Halo!" beserta tanggal dan waktunya.

Contoh Polimorfisme di Java

Pertimbangkan "Bentuk" superclass yang memiliki metode "area()". Subkelas di bawah "Bentuk" dapat berupa "Persegi Panjang," "Lingkaran," "Segitiga," dll., dan setiap subkelas memiliki metodenya sendiri untuk menghitung luas. Menerapkan konsep pewarisan dan polimorfisme, subkelas menggunakan metode "area()" untuk menemukan rumus untuk menghitung luas masing-masing bentuk.

bentuk kelas {

area kosong publik() {

System.out.println(“Rumus luas daerah “);

}

}

kelas Segitiga meluas Bentuk {

area kosong publik() {

System.out.println(“Segitiga adalah 1/2 * alas * tinggi “);

}

}

kelas Lingkaran meluas Bentuk {

area kosong publik() {

System.out.println(“Lingkaran adalah 3,14 * radius * radius “);

}

}

kelas Utama {

public static void main(String[] args) {

Bentuk myShape = Bentuk baru(); // Buat objek Bentuk

Bentuk myTriangle = Segitiga baru(); // Buat objek Segitiga

Bentuk myCircle = Lingkaran baru(); // Buat objek Lingkaran

bentuksaya.area();

myTriangle.area();

bentuksaya.area();

lingkaranku.area();

}

}

Output dari kode program di atas adalah sebagai berikut:

Rumus luas segitiga adalah 1/2 * alas * tinggi

Rumus luas lingkaran adalah 3,14 * jari-jari * jari-jari

Jenis Polimorfisme dalam OOP

Polimorfisme dalam OOP terdiri dari dua jenis – statis (polimorfisme waktu kompilasi) dan dinamis (polimorfisme runtime).

1. Polimorfisme statis

Di Jawa, kelebihan metode adalah jenis polimorfisme statis yang paling umum. Itu dapat membuat beberapa metode dengan nama yang sama dalam kelas yang sama tetapi dengan parameter yang berbeda. Kumpulan parameter harus berbeda dalam setidaknya satu dari tiga kriteria berikut:

  • Metode harus memiliki jumlah parameter yang berbeda.
  • Jenis parameter harus berbeda. Misalnya, jika satu metode menerima Long, yang lain menerima String.
  • Metode harus menerima parameter dalam urutan yang berbeda. Misalnya, jika metode 1 menerima Long dan String, metode dua harus menerima String dan kemudian Long.

Dalam metode overloading, saat memanggil metode, kompiler memilih metode mana yang akan dipanggil berdasarkan parameter yang diteruskan saat memanggil. Ini terjadi pada waktu kompilasi, dan karenanya, jenis polimorfisme ini juga disebut sebagai polimorfisme waktu kompilasi.

Berikut ini adalah contoh kode Java untuk menunjukkan polimorfisme waktu kompilasi. Dalam contoh ini, metode menambahkan () kelebihan beban dengan dua jenis parameter yang berbeda.

paket staticPolymorphism;

Penambahan kelas publik

{

jumlah batal(int x, int y)

{

int c = x+y;

System.out.println(“Penjumlahan dua bilangan :” +c); }

jumlah batal(int x, int y, int z)

{

int c = x+y+z;

System.out.println(“Penjumlahan tiga bilangan :” +c); }

public static void main(String[] args)

{

Penambahan obj = Penambahan baru();

obj.sum ( 45,34);

obj.sum(60, 32, 11);

}

}

Output dari program di atas akan menjadi:

Penambahan dua angka: 79

Penambahan tiga angka: 103

2. Polimorfisme dinamis

Polimorfisme dinamis atau runtime dicapai melalui metode overriding. Di sini, metode berada dalam bentuk yang berbeda di kelas yang berbeda (penggantian metode), dan alih-alih waktu kompilasi, panggilan ke metode yang diganti diselesaikan saat runtime. Sekarang, setelah menetapkan objek ke referensi kelas dan memanggil metode, metode di kelas objek akan dieksekusi. Karena objek dibuat saat runtime, bentuk metode (dalam objek) yang harus dieksekusi hanya diputuskan saat runtime.

Berikut ini adalah contoh kode Java untuk menunjukkan polimorfisme runtime . Dalam contoh, ada superclass "Hewan" dan tiga subclass, "kanguru," "harimau," dan "ikan." Subclass memperluas superclass dan mengganti metode "move()" -nya. Metode "move()" dipanggil oleh variabel referensi dari kelas induk "Animal."

kelas Hewan{

batal pindah(){

System.out.println("Hewan Bergerak");

}

}

kelas kanguru memanjangkan Hewan{

batal pindah(){

System.out.println(“Kanguru melompat”);

}

}

kelas harimau meluas Hewan{

batal pindah(){

System.out.println(“Harimau berjalan”);

}

}

kelas ikan meluas Hewan{

batal pindah(){

System.out.println(“Ikan berenang”);

}

}

kelas utama{

public static void main(String args[]){

Hewan A = Hewan baru();

Hewan k = kanguru baru(); //meningkatkan

Hewan t = harimau baru(); //meningkatkan

Hewan f = ikan baru(); //meningkatkan

Suatu gerakan();

k.pindah();

t.pindah();

f.pindah();

}

}

Output dari program di atas akan menjadi:

Hewan bergerak

kanguru melompat

Harimau berjalan

Ikan berenang

Polimorfisme dalam Python

Polimorfisme dalam Python terdiri dari tiga jenis – polimorfisme operator, polimorfisme fungsi, dan polimorfisme kelas. Python juga memungkinkan metode overriding tetapi tidak metode overloading.

1. Polimorfisme operator

Dalam Python, operator '+' memiliki penggunaan ganda. Ini digunakan untuk operasi penjumlahan aritmatika dalam kasus tipe data integer, dan untuk string, operator '+' melakukan penggabungan.

Berikut adalah contoh kode Python di mana operator '+' melakukan penambahan pada tipe data integer:

nomor1 = 4

angka2 = 5

cetak(angka1+angka2)

Output dari kode program di atas adalah '9.'

Berikut adalah contoh kode Python di mana operator '+' melakukan penggabungan pada tipe data string:

str1 = “Bagus”

str2 = “Malam”

cetak(str1+” “+str2)

Output dari program di atas adalah 'Selamat Malam.'

2. Fungsi polimorfisme

Fungsi 'len()' dalam Python kompatibel dengan tipe data yang berbeda seperti daftar, string, tuple, kamus, dan set tetapi mengembalikan informasi spesifik untuk setiap tipe data. Berikut ini contohnya:

print(len("Programer"))

print(len(["Python", "Java", "C"]))

print(len({"Nama": "Kathy", "Alamat": "Texas"}))

Program di atas akan memiliki output sebagai berikut:

9

3

2

3. Kelas Polimorfisme

Memperluas konsep polimorfisme, Python memungkinkan beberapa kelas memiliki metode dengan nama yang sama. Diberikan di bawah ini adalah contoh untuk menunjukkan polimorfisme dalam metode kelas dengan Python. Dalam contoh, ada dua kelas, 'Kucing,' dan 'Anjing.' Mereka memiliki struktur yang mirip dan memiliki nama metode yang sama' make_sound(),' dan 'info().'

kucing kelas:

def __init__(diri, nama, umur):

diri.nama = nama

diri.usia = usia

def info (diri):

print(f”Saya kucing. Nama saya {self.name}. Umur saya {self.age} tahun.”)

def make_sound(sendiri):

print("Meong")

anjing kelas:

def __init__(diri, nama, umur):

diri.nama = nama

diri.usia = usia

def info (diri):

print(f”Saya seekor anjing. Nama saya {self.name}. Umur saya {self.age} tahun.”)

def make_sound(sendiri):

print("Kulit")

cat1 = Kucing(“Minnie”, 3)

anjing1 = Anjing(“Tom”, 6)

untuk hewan di (kucing1, anjing1):

suara hewan.make_()

hewan.info()

suara hewan.make_()

Outputnya akan seperti berikut:

meong

saya adalah seekor kucing. Nama saya Minnie. Saya berumur 3 tahun.

meong

Kulit pohon

saya adalah seekor anjing. Nama saya adalah Tom. Saya berumur 6 tahun.

Kulit pohon

4. Metode Override

Python juga memungkinkan kelas anak untuk mewarisi atribut dan metode dari kelas induk. Metode dan atribut tertentu dapat didefinisikan ulang agar sesuai dengan kelas anak (penggantian metode). Polimorfisme kemudian memungkinkan akses ke metode dan atribut yang diganti dengan nama yang sama dengan kelas induk.

Berikut ini adalah contoh kode Python untuk mengilustrasikan metode overriding:

dari matematika impor pi

bentuk kelas:

def __init__(diri sendiri, nama):

diri.nama = nama

daerah def (sendiri):

lulus

fakta (diri sendiri):

kembali "Saya adalah sosok yang tertutup."

def __str__(sendiri):

kembali self.name

kelas Persegi (Bentuk):

def __init__(sendiri, panjang):

super().__init__("Persegi")

diri.panjang = panjang

daerah def (sendiri):

kembalikan diri.panjang**2

fakta (diri sendiri):

return "Setiap sudut dalam bujur sangkar sama dengan 90 derajat."

kelas Lingkaran (Bentuk):

def __init__(sendiri, radius):

super().__init__("Lingkaran")

self.radius = radius

daerah def (sendiri):

kembalikan pi*self.radius**2

a = Persegi(4)

b = Lingkaran(7)

cetak (b)

cetak(b.fakta())

cetak(fakta())

cetak(b.area())

Program di atas akan memiliki output sebagai berikut:

Lingkaran

Saya adalah sosok yang tertutup.

Setiap sudut dalam persegi sama dengan 90 derajat.

153.93804002589985

Pelajari lebih lanjut tentang penggantian metode.

Keuntungan Polimorfisme dalam OOP

Polimorfisme dalam OOP memiliki tiga keunggulan signifikan. Mereka adalah sebagai berikut:

  • Polimorfisme memungkinkan penggunaan kembali kode. Oleh karena itu, setelah kelas ditulis, diuji, dan diimplementasikan, Anda dapat menggunakannya kembali lagi dan lagi. Plus, kode dapat diubah tanpa mempengaruhi kode asli. Semua itu menghemat waktu yang signifikan untuk pembuat kode.
  • Dalam polimorfisme, beberapa nilai data dapat disimpan dalam satu variabel. Selain itu, nilai variabel yang diwarisi dari superclass ke subclass dapat dimodifikasi tanpa mengubah nilai variabel di superclass atau subclass apa pun.
  • Akhirnya, polimorfisme bekerja dengan lebih sedikit baris kode, yang, pada gilirannya, membuat debugging lebih mudah bagi programmer.

Jalan ke depan

upGrad, dalam kemitraan dengan Universitas John Moores Liverpool yang bergengsi, menawarkan program Master of Science online yang ketat dalam Ilmu Data untuk para profesional yang bekerja yang bercita-cita untuk berkarir di bidang ilmu data. Kursus berakhir dengan gelar Master dari LJMU dan sertifikasi Program PG Eksekutif dari IIIT Bangalore.

Sorotan Program:

  • 500+ jam konten, 60+ studi kasus dan proyek, 20+ sesi langsung
  • Cakupan komprehensif dari 14+ alat dan perangkat lunak seperti Python, AWS, MySQL, dan banyak lagi
  • Sesi pelatihan dengan pakar industri
  • Pembelajaran sejawat dan jaringan industri
  • Bantuan karir 360 derajat

Salah satu platform EdTech terbaik yang lebih tinggi saat ini, upGrad terus menginspirasi dan mempersiapkan pelajar melalui kombinasi teknologi mutakhir, pedagogi terbaru, kemitraan industri, dan fakultas kelas dunia.

Pelajari kursus ilmu data online dari Universitas top dunia. Dapatkan Program PG Eksekutif, Program Sertifikat Tingkat Lanjut, atau Program Magister untuk mempercepat karier Anda.

Mengapa polimorfisme digunakan dalam OOP?

Dalam OOP, polimorfisme adalah metode yang melakukan tugas berbeda berdasarkan kelas objek yang memanggilnya. Dengan demikian, sebuah pesan dikirim ke objek dari beberapa kelas, dan setiap objek merespons sesuai dengan properti kelas tersebut.

Apa metode overloading di Jawa?

Di Java, dua atau lebih metode yang memiliki nama yang sama mungkin berbeda dalam parameternya (jenis parameter yang berbeda, jumlah parameter yang berbeda, atau keduanya). Metode tersebut disebut metode kelebihan beban, dan fitur ini disebut metode kelebihan beban.

Apa perbedaan antara overloading dan overriding?

Ketika dua atau lebih metode di kelas yang sama memiliki parameter yang berbeda tetapi nama yang sama, itu disebut overloading. Di sisi lain, overriding adalah ketika superclass dan kelas anak memiliki tanda tangan metode yang sama (nama dan parameter).