C# - Polimorfisme: Panduan untuk Pemula

Halo, para pemrogram yang sedang belajar! Hari ini, kita akan mendalami salah satu konsep yang paling menarik dalam pemrograman berorientasi objek: Polimorfisme. Jangan biarkan kata yang besar ini menakutkan Anda – pada akhir tutorial ini, Anda akan bisa menggunaikan polimorfisme seperti seorang ahli!

C# - Polymorphism

Apa Itu Polimorfisme?

Sebelum kita masuk ke dalam, mari kitauraikan kata istilah ini. "Poly" berarti banyak, dan "morph" berarti bentuk. Jadi, polimorfisme adalah tentang memiliki banyak bentuk. Dalam pemrograman, itu adalah kemampuan objek untuk mengambil bentuk yang berbeda dan berperilaku berbeda berdasarkan konteks.

Imaginasi Anda adalah seorang perubahan bentuk (berapa menariknya itukan?). Anda bisa menjadi manusia, kucing, atau bahkan naga! Itu sebenarnya apa yang dimungkinkan oleh polimorfisme dalam kode kita – mengambil bentuk yang berbeda sesuai kebutuhan.

Dalam C#, kita memiliki dua jenis utama polimorfisme:

  1. Polimorfisme Statis (juga dikenal sebagai Polimorfisme Compile-time)
  2. Polimorfisme Dinamik (juga dikenal sebagai Polimorfisme Runtime)

Mari kita jelajahi masing-masing ini secara rinci.

Polimorfisme Statis

Polimorfisme statis terjadi saat kompiler tahu metode mana yang harus dipanggil pada saat kompilasi. Itu seperti memutuskan pakaian apa yang akan dipakai sebelum meninggalkan rumah – Anda tahu sebelumnya!

Overloading Fungsi

Bentuk polimorfisme statis yang paling umum adalah overloading fungsi. Ini adalah saat Anda memiliki beberapa metode dengan nama yang sama tetapi parameter yang berbeda.

Mari kita lihat contoh:

public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}

public double Add(double a, double b)
{
return a + b;
}

public string Add(string a, string b)
{
return a + b;
}
}

Dalam contoh ini, kita memiliki tiga metode Add:

  1. Satu yang menambahkan dua integer
  2. Satu yang menambahkan dua double
  3. Satu yang menggabungkan dua string

Sekarang, mari kita gunakan Calculator kita:

Calculator calc = new Calculator();

int sum1 = calc.Add(5, 3);            // Menggunakan versi integer
double sum2 = calc.Add(3.14, 2.86);   // Menggunakan versi double
string sum3 = calc.Add("Hello, ", "World!"); // Menggunakan versi string

Console.WriteLine(sum1);  // Output: 8
Console.WriteLine(sum2);  // Output: 6
Console.WriteLine(sum3);  // Output: Hello, World!

Kompiler tahu metode Add mana yang harus dipanggil berdasarkan jenis argumen yang kita kirim. Itu seperti memiliki pisau Swiss Army – satu alat, banyak penggunaan!

Polimorfisme Dinamik

Polimorfisme dinamik adalah saat keputusan tentang metode mana yang harus dipanggil dibuat pada saat runtime. Itu seperti improvisasi di panggung – Anda memutuskan apa yang harus dilakukan saat itu!

Kunci untuk polimorfisme dinamik adalah penggunaan kata kunci virtual dan override. Mari kita lihat contoh:

public class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("The animal makes a sound");
}
}

public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("The dog barks: Woof! Woof!");
}
}

public class Cat : Animal
{
public override void MakeSound()
{
Console.WriteLine("The cat meows: Meow! Meow!");
}
}

Dalam contoh ini, kita memiliki kelas dasar Animal dengan metode virtual MakeSound. Kelas Dog dan Cat mewarisi dari Animal dan menimpa metode MakeSound.

Sekarang, mari kita lihat polimorfisme dinamik dalam aksi:

Animal myAnimal = new Animal();
Animal myDog = new Dog();
Animal myCat = new Cat();

myAnimal.MakeSound();  // Output: The animal makes a sound
myDog.MakeSound();     // Output: The dog barks: Woof! Woof!
myCat.MakeSound();     // Output: The cat meows: Meow! Meow!

Meskipun myDog dan myCat dideklarasikan sebagai jenis Animal, mereka tetap menggunakan metode MakeSound mereka sendiri. Ini adalah keajaiban polimorfisme dinamik!

Kuasa Polimorfisme

Polimorfisme memungkinkan kita menulis kode yang lebih fleksibel dan dapat digunakan berkali-kali. Imagine Anda membuat sebuah game dengan jenis karakter yang berbeda. Setiap karakter mungkin bergerak secara berbeda:

public class Character
{
public virtual void Move()
{
Console.WriteLine("The character moves.");
}
}

public class Warrior : Character
{
public override void Move()
{
Console.WriteLine("The warrior charges forward!");
}
}

public class Mage : Character
{
public override void Move()
{
Console.WriteLine("The mage teleports.");
}
}

public class Rogue : Character
{
public override void Move()
{
Console.WriteLine("The rogue sneaks silently.");
}
}

Sekarang, kita bisa memiliki daftar karakter dan membuat mereka semua bergerak:

List<Character> characters = new List<Character>
{
new Warrior(),
new Mage(),
new Rogue()
};

foreach (var character in characters)
{
character.Move();
}

// Output:
// The warrior charges forward!
// The mage teleports.
// The rogue sneaks silently.

Ini adalah keindahan polimorfisme – kita bisa menganggap semua karakter ini sebagai objek Character, tapi mereka masing-masing berperilaku secara unik.

Ringkasan Metode Polimorfisme

Berikut adalah tabel referensi singkat dari metode polimorfisme yang kita bahas:

Metode Tipe Deskripsi
Function Overloading Statis Banyak metode dengan nama yang sama tetapi parameter yang berbeda
Virtual/Override Dinamik Kelas dasar mendefinisikan metode virtual, kelas turunan menimpa mereka

Kesimpulan

Selamat! Anda baru saja mengambil langkah pertama ke dunia polimorfisme. Ingat, seperti belajar keterampilan baru, memahami polimorfisme memerlukan latihan. Jangan frustasi jika itu belum jelas segera – terus coding, terus mencoba, dan segera Anda akan menjadi seorang master pemrograman shape-shifter!

Saat kita selesai, ini adalah sedikit permainan lelucon untuk Anda: Mengapa para pemrogram preferensi mode gelap? Karena cahaya menarik nyamuk!

Selamat coding, para master polimorfisme masa depan!

Credits: Image by storyset