Bahasa C merupakan bahasa yang sangat mendukung OOP (Object Oriented Programming). Setiap software developer bahasa C, baik C++,C# harus mengerti dan memahami ini.Berikut sedikit penjelasan tentang OOP..OOP merupakan terobosan baru dalam pemrograman setelah pemrograman prosedural, pemrograman modular dan pemrograman abstraksi data. Ada tiga konsep utama dalam OOP, yaitu :
- Encapsulation (penyembunyian informasi melalui private dan protected).
- Inheritance (suatu class berasal dari turunan pertama atau lebih dari class lainnya).
- Polymorphism (kemampuan object berubah menjadi object yang lain).
Object dan Class
Untuk memahami ketiga konsep diatas, kita harus paham terlebih dahulu perbedaan antara object dan class. Mungkin kita telah banyak membaca buku ataupun artikel tentang kedua hal tersebut. Pada dasarnya semuanya sama tergantung bagaimana kita memahaminya. Kalau saya memahami hubungan antara object dan class adalah seperti hubungan antara pembuat dan hasil buatannya atau cetakan dengan hasil cetakannya. Kalau di bidang Arsitek hubungan keduanya mirip dengan gambar rumah (blue print) dengan rumah yang dihasilkan dari gambar tersebut.
Untuk memahami ketiga konsep diatas, kita harus paham terlebih dahulu perbedaan antara object dan class. Mungkin kita telah banyak membaca buku ataupun artikel tentang kedua hal tersebut. Pada dasarnya semuanya sama tergantung bagaimana kita memahaminya. Kalau saya memahami hubungan antara object dan class adalah seperti hubungan antara pembuat dan hasil buatannya atau cetakan dengan hasil cetakannya. Kalau di bidang Arsitek hubungan keduanya mirip dengan gambar rumah (blue print) dengan rumah yang dihasilkan dari gambar tersebut.
Class bertindak sebagai cetakan atau blue print, sedangkan object adalah sesuatu yang dihasilkan dari cetakan atau blue print. Object akan dibuat ketika kita melakukan perintah new pada suatu class, maka pada saat itu lah suatu object muncul. Dengan kata lain saat kita meng instantiate sesuatu. contoh dibawah melihatkan bagaimana kita memdefinisikan sebuah class dan membuat object dari class tersebut.
Definisi suatu class Pegawai.
public class Pegawai
{
private string _name;
public Pegawai(string name)
{
_name = name;
}
public string Name { get { return _name; } }
}
Object akan muncul ketika menjalankan perintah berikut :
Pegawai pegawai = new Pegawai("Irfan Syahputra");
Inheritance
Konsep ini merupakan konsep yang paling mudah untuk dipahami, karena konsep inheritance ini sangat dekat dengan keseharian kita. Setiap dari kita pasti mempunyai Orang Tua, hubungan antara Orang Tua dan Anak merupakan hubungan pewarisan atau turunan. Apa yang ada pada anak umumnya ada pada orang tuanya, warna kulit, suara, rambut, gigi dan sebagainya kadang hampir sama seperti orang tuanya.
Konsep ini merupakan konsep yang paling mudah untuk dipahami, karena konsep inheritance ini sangat dekat dengan keseharian kita. Setiap dari kita pasti mempunyai Orang Tua, hubungan antara Orang Tua dan Anak merupakan hubungan pewarisan atau turunan. Apa yang ada pada anak umumnya ada pada orang tuanya, warna kulit, suara, rambut, gigi dan sebagainya kadang hampir sama seperti orang tuanya.
Dalam OOP pola turunan ini dicoba untuk ditiru. Hubungan turunan antara orang tua dan anak disebut hubungan “Is a” atau yang dalam bahasa indonesianya “Ia Adalah”. Jika Irfan adalah ayah Azka, maka dalam bahasa OOP boleh disebut sebagai “Azka adalah Irfan” sebab sebagian sifat dari Azka diambil atau diturunkan dari Irfan.
“Azka adalah Irfan”, bagi seorang pemula tentu agak membingungkan, sebab kalimat itu bisa dilawan dengan kenyataan bahwa “Azka bukanlah Irfan”. Ini karena Azka dan Irfan adalah Kongkrit (ada).
Akan lebih jelas jika kita ambil contoh hubungan abstrak dan kongkrit. “Pingky adalah seekor babi”, disini hubungan antara babi dan pingky menjadi jelas, sebab secara implisit tergambarkan dalam otak kita bahwa pingky mewarisi sifat-sifat babi. Demikian juga dengan kalimat “Babi adalah binatang”, sangat jelas kalau babi mewarisi sifat-sifat binatang, bukan manusia. Maka, kalimat “Pingky adalah seekor babi” dan “Babi adalah binatang” adalah kalimat waris mewarisi yang pada akhirnya juga menyatakan bahwa “Pingky adalah binatang”.
Dalam C# hubungan-hubungan diatas ditulis dalam bentuk class sebagai :
public class Irfan
{
public string BentukRambut
{
get { return "Lurus"; }
}
}
public class Azka : Irfan
{
}
Dalam class Azka kita tidak lagi perlu mendefinisikan BentukRambut, sebab secara otomatis BentukRambut Azka mengikuti BentukRambut Irfan : Lurus. Bagaimana jika Azka melakukan perubahan pada BentukRambut ? dalam C# perubahan BentukRambut Azka dapat dilakukan dengan cara meng-override BentukRambut. Agar bisa di override, BentukRambut di class Irfan harus dinyatakan sebagai virtual, jika tidak bentuk rambut tidak bisa di override. Ini penting untuk menjaga agar tidak sembarangan melakukan override, sebab bisa jadi salah satu sifat Irfan memang tidak boleh di override, sifat pemarah misalnya.
public class Irfan
{
public virtual string BentukRambut {
get { return "Lurus"; }
}
}
public class Azka : Irfan
{
public override BentukRambut {
get { return "Keriting"; }
}
}
Ingat Irfan dan Azka diatas merupakan class bukan object. Ini perlu ditekankan agar tidak mengacaukan bentuk Irfan dan Azka sebagai class vs sebagai object. Dalam bentuk konteks object kita bisa menginstantiate Azka sebagai Irfan.
Azka azkaGhaissan = new Azka();
Azka azkaSyahputra = new Azka();
Disini azkaGhaissan dan azkaSyahputra merupakan object yang sama yang dibuat dari class Azka yang merupakan turunan Irfan.
Karena turunan Irfan maka azkaGhaissan dan azkaSyahputra bisa dinyatakan sebagai :
Irfan azkaGhaissan = new Azka();
Irfan azkaSyahputra = new Azka();
Apakah ini mengakibatkan rambut azkaGhaissan dan azkaSyahputra menjadi lurus kembali ? Tidak. Walaupun di casting ke Irfan, object aslinya tetaplah dari class Azka yang tentunya rambutnya sudah Keriting.
Encapsulation
Pada intinya konsep encapsulation adalah kita tidak perlu tau apa yang ada dalam object tersebut, yang kita perlu tau adalah apa kegunaannya, bagaimana cara memakainya dan hasilnya apa. Dengan kata lain konsep ini merupakan sebuah black box (kotak hitam) dimana kita tidak perlu mengetahui bagaimana proses bekerjanya sebuat object. Object dapat berinteraksi satu sama lain dengan interface berupa members (kumpulan property dan method) yang dapat diakses. Members dapat dideklarasikan sebagai public, protected dan private.
Pada intinya konsep encapsulation adalah kita tidak perlu tau apa yang ada dalam object tersebut, yang kita perlu tau adalah apa kegunaannya, bagaimana cara memakainya dan hasilnya apa. Dengan kata lain konsep ini merupakan sebuah black box (kotak hitam) dimana kita tidak perlu mengetahui bagaimana proses bekerjanya sebuat object. Object dapat berinteraksi satu sama lain dengan interface berupa members (kumpulan property dan method) yang dapat diakses. Members dapat dideklarasikan sebagai public, protected dan private.
Polymorphism
Konsep Polymorphism digunakan untuk menerangkan dua atau lebih class yang memiliki reaksi berbeda pada pesan yang sama.
Konsep Polymorphism digunakan untuk menerangkan dua atau lebih class yang memiliki reaksi berbeda pada pesan yang sama.
(*)
Tidak ada komentar:
Posting Komentar