PEMROGRAMAN BERORIENTASI OBJEK

PEMROGRAMAN BERORIENTASI OBJEK



Pengantar

     Pemrograman Berorientasi Objek sebenarnya bukanlah bahasa pemrograman baru, tetapi jalan baru untuk berpikir dan merancang aplikasi yang dapat membantu memecahkan persoalan mengenai pengembangan perangkat lunak. Pemrograman berorientasi objek disusun dan dipahami oleh ilmuwan yang memandang dunia sebagai populasi objek yang berinteraksi dengan yang lain.      Prosedur yang digunakan dalam objek dipandang sebagai kepentingan kedua karena tergantung pada objek itu sendiri.        Tentunya hal tersebut berbeda dengan pemrograman terstruktur. Pemrograman terstruktur mempunyai sifat pemisahan data dengan kode yang mengolahnya.

   Pemrograman Berorientasi Objek (PBO) adalah metode pemrograman yang meniru cara kita memperlakukan sesuatu (benda). Ada tiga karakteristik bahasa Pemrograman Berorientasi Objek, yaitu :

1. Pengkapsulan (Encapsulation) : mengkombinasikan suatu struktur dengan fungsi yang memanipulasinya untuk membentuk tipe data baru yaitu kelas (class).

2. Pewarisan (Inheritance) : mendefinisikan suatu kelas dan kemudian menggunakannya untuk membangun hirarki kelas turunan, yang mana masing-masing turunan mewarisi semua akses kode maupun data kelas dasarnya.

3. Polimorphisme (Polymorphism) : memberikan satu aksi untuk satu nama yang dipakai bersama pada satu hirarki kelas, yang mana masing-masing kelas hirarki menerapkan cara yang sesuai dengan dirinya.


Pengkapsulan (Encapsulation)

      Salah satu keistimewaan C++ adalah pengkapsulan. Pengkapsulan adalah mengkombinasikan suatu struktur dengan fungsi yang memanipulasinya untuk membentuk tipe data baru yaitu kelas (class).

     Kelas akan menutup rapat baik data maupun kode. Akses item di dalam kelas dikendalikan. Pengendalian ini tidak hanya berupa data tetapi juga kode. Saat kelas akan digunakan, kelas harus sudah dideklarasikan. Yang penting, pemakai kelas mengetahui deskripsi kelas, tetapi bukan implementasinya. Bagi pemakai, detail internal kelas tidak penting. Konsep ini disebut penyembunyian informasi (information hiding).

         Untuk menggunakan kelas, kita perlu mengetahui sesuatu tentangnya. Kita perlu mengetahui fungsi apa yang bisa digunakan dan data apa saja yang dapat diakses. Fungsi yang dapat digunakan dan data yang dapat diakses disebut antarmuka pemakai (user interface). Antarmuka pemakai menceritakan bagaimana kelas berperilaku, bukan bagaimana kelas dibuat. Kita tidak perlu mengetahui implementasi kelas. Sekali kelas dibuat, kita bisa memakainya berulang-ulang. Bagi pandangan pemakai, kelas adalah kotak hitam dengan perilaku tertentu.


Kendali Akses terhadap Kelas

    Tugas kelas adalah untuk menyembunyikan informasi yang tidak diperlukan oleh pemakai. Ada tiga macam pemakai kelas:

1. kelas itu sendiri
2. pemakai umum
3. kelas turunan

    Setiap macam pemakai mempunyai hak aksesnya masing-masing. Hak akses ini ditandai dengan kenampakan anggota kelas. Kelas pada C++ menawarkan tiga aras kenampakan anggota kelas (baik anggota data maupun fungsi anggota):

1. private
   Anggota kelas private mempunyai kendali akses yang paling ketat. Dalam bagian private, hanya fungsi anggota dari kelas itu yang dapat mengakses anggota private atau kelas yang dideklarasikan sebagai teman (friend).

2. public
    Dalam bagian public, anggotanya dapat diakses oleh fungsi anggota kelas itu sendiri, instance kelas, fungsi anggota kelas turunan. Suatu kelas agar bisa diakses dari luar kelas, misalnya dalam fungsi main(), perlu mempunyai hak akses publik. Hak akses ini yang biasanya digunakan sebagai perantara antara kelas dengan dunia luar.

3. protected
   Suatu kelas dapat dibuat berdasarkan kelas lain. Kelas baru ini mewarisi sifat-sifat dari kelas dasarnya. Dengan cara ini bisa dibentuk kelas turunan dari beberapa tingkat kelas dasar. Bila pada kelas dasar mempunyai anggota dengan hak akses terproteksi, maka anggota kelas ini akan dapat juga diakses oleh kelas turunannya. Anggota kelas terproteksi dibentuk dengan didahului kata kunci protected. Pada bagian protected, hanya fungsi anggota dari kelas dan kelas-kelas turunannya yang dapat mengakses anggota.


Pewarisan (Inheritance)

          Suatu kelas dapat diciptakan berdasarkan kelas lain. Kelas baru ini mempunyai sifat-sifat yang sama dengan kelas pembentuknya, ditambah sifat-sifat khusus lainnya. Dengan pewarisan kita dapat menciptakan kelas baru yang mempunyai sifat sama dengan kelas lain tanpa harus menulis ulang bagian-bagian yang sama. Pewarisan merupakan unsur penting dalam pemrograman berorientasi objek dan merupakan blok bangunan dasar pertama penggunaan kode ulang (code reuse). Jika tidak ada fasilitas pewarisan ini, maka pemrograman dalam C++ akan tidak banyak berbeda dengan pemrograman C, hanya perbedaan dalam pengkapsulan saja yang menggunakan kelas sebagai pengganti struktur. Yang perlu menjadi catatan di sini adalah bahwa data dan fungsi yang dapat diwariskan hanya yang bersifat public dan protected. Untuk data dan fungsi private tetap tidak dapat diwariskan. Hal ini disebabkan sifat protected yang hanya dapat diakses dari dalam kelas saja.

       Sifat pewarisan ini menyebabkan kelas-kelas dalam pemrograman berorientasi objek membentuk hirarki kelas mulai dari kelas dasar, kelas turunan pertama, kelas turunan kedua dan seterusnya. Sebagai gambaran misalnya ada hirarki kelas unggas.

       Sebagai kelas dasar adalah Unggas. Salah satu sifat Unggas adalah bertelur dan bersayap. Kelas turunan pertama adalah Ayam, Burung dan Bebek. Tiga kelas turunan ini mewarisi sifat kelas dasar Unggas yaitu bertelur dan bersayap. Selain mewarisi sifat kelas dasar, masing-masing kelas turunan mempunyai sifat khusus, Ayam berkokok, Burung terbang dan Bebek berenang. Kelas Ayam punya kelas turunan yaitu Ayam Kampung dan Ayam Hutan. Dua kelas ini mewarisi sifat kelas Ayam yang berkokok. Tetapi dua kelas ini juga punya sifat yang berbeda, yaitu: Ayam Kampung berkokok panjang halus sedangkan Ayam hutan berkokok pendek dan kasar. Jika hirarki kelas Unggas diimplementasikan dalam bentuk program, maka secara sederhana dapat ditulis sebagai berikut:

        Dapat dilihat, bahwa kelas Ayam dan kelas Bebek dapat menjalankan fungsi Bertelur() yang ada dalam kelas Unggas meskipun fungsi ini bukan merupakan anggota kelas Ayam dan kelas Bebek. Kelas AyamKampung dapat menjalankan fungsi Berkokok() yang ada dalam kelas Ayam walaupun dua fungsi tersebut bukan merupakan anggota kelas AyamKampung. Sifat-sifat di atas yang disebut dengan pewarisan (inheritance).


Polimorfisme

         Polimorfisme merupakan fitur pemrograman berorientasi objek yang penting setelah pengkapsulan dan pewarisan. Polimorfisme berasal dari bahasa Yunani, poly (banyak) dan morphos (bentuk). Polimorfisme menggambarkan kemampuan kode C++ berperilaku berbeda tergantung situasi pada waktu run (program berjalan).

       Konstruksi ini memungkinkan untuk mengadakan ikatan dinamis (juga disebut ikatan tunda, atau ikatan akhir). Kalau fungsi-fungsi dari suatu kelas dasar didefinisikan ulang atau ditindih pada kelas turunan, maka objek-objek yang dihasilkan hirarki kelas berupa objek polimorfik. Polimorfik artinya mempunyai banyak bentuk atau punya kemampuan untuk mendefinisi banyak bentuk. Perhatikan kelas sederhana berikut :

        Kelas TX berisi fungsi FA dan FB, dimana fungsi FB memanggil fungsi FA. Kelas TY, yang merupakan turunan dari kelas TX, mewarisi fungsi FB, tetapi mendefinisikan kembali fungsi FA. Yang perlu diperhatikan di sini adalah fungsi TX::FB yang memanggil fungsi TY::FA dalam konteks perilaku polimorfisme. Berapakah output dari program ini? Jawabnya adalah 4.5 dan bukan 13.5! Mengapa? Jawabannya adalah karena kompiler memecahkan ungkapan Y.FB(3) dengan menggunakan fungsi warisan TX::B, yang akan memanggil fungsi TX::FA. Oleh karena itu fungsi TY::FA ditinggalkan dan tidak terjadi perilaku polimorfisme. C++ menetapkan persoalan ini dan mendukung perilaku polimorfisme dengan menggunakan fungsi virtual. Fungsi virtual, yang mengikat kode pada saat runtime, dideklarasikan dengan menempatkan kata kunci virtual sebelum tipe hasil fungsi. Untuk program di atas, kode double FA(double p) tulis menjadi virtual double FA(double p) baik di kelas TX maupun yang ada di kelas TY. Dengan perubahan ini maka output dari program di atas menjadi 13.5.

         Fungsi dari adanya polymorpishm adalah untuk mendapatkan metode yang sama dengan perilaku yang berbeda-beda dari class. Hirarki dari class secara abstrak mendefinisikan data utama dan kemampuan tingkah laku dari sebuah keluarga class, sehingga setiap anggota dari keluarga class memiliki kemampuan utama dan semua object dalam keluarga class dapat merespon terhadap metode.

Mekanisme dari polymorpishm ialah :
1. Murni dengan bahasa OOP, smalltalk semua object merupakan bagian yang sama dari hirarki object.
2. C++ sebagai hybrid bahasa OOP, membutuhkan pointer ke supeclass object (sebuah pointer dari superclass dapat menunjuk langsung ke subclass tanpa seleksi).

Metode polymorpishm pada C++ :
1. Superclass mendefinisikan metode yang virtual (polymorpic).
2. Subclass dapat mendefinisikan sendiri versi mereka tentang virtual metodenya.
Virtual metode di deklarasikan superclass dan virtual keywordnya digunakan sebelum mendeklarasikan superclass metodenya.

Contoh :
       { virtual int draw (); // virtual keyword dibutuhkan ;
          Pada definisi yang terpisah virtual keyword tidak digunakan .
Contoh :
        { virtual int draw (); // virtual keyword tidak dibutuhkan ;
           Sekali superclass virtual maka semua subclass menjadi virtual.

       Untuk mendukung polymorpishm C++ menggunakan pointer. Pointer dari superclass dapat digunakan untuk menunjuk subclass tanpa seleksi, hal ini dikarenakan subclass merupakan bagian dari superclass. Sedangkan pointer dari subclass tidak dapat menunjuk langsung ke superclass karena  superclass merupakan supertype dari subtype.

Untuk virtual methode ini dalam C++ ada beberapa aturan antara lain :
1.    Virtual metode dapat dibuat static, karena virtual metode merupakan milik semua object dan tidak dapat menjadi bagian class secra keseluruhan.
2.   Menggunakan virtual keyword pada deklarasi virtual metode, pada superclass harus menggunakan virtual keyword dalam deklarasinya sedangkan subclass dapat menggunakan atau tidak dan virtual keyword tidak digunakan dalam definisi terpisah dari virtual metode.

Share this

Related Posts

Previous
Next Post »