artikel

Tunggu sesaat

Minggu, 07 April 2013

OOP dalam C++

Pemrograman berorientasi objek (Inggrisobject-oriented programmingdisingkat OOP) merupakan paradigma pemrograman yang berorientasikan kepada objek. Semua data dan fungsi di dalam paradigma ini dibungkus dalam kelas-kelasatau objek-objek. Bandingkan dengan logika pemrograman terstruktur. Setiap objek dapat menerima pesan, memproses data, dan mengirim pesan ke objek lainnya,
Model data berorientasi objek dikatakan dapat memberi fleksibilitas yang lebih, kemudahan mengubah program, dan digunakan luas dalam teknik piranti lunak skala besar. Lebih jauh lagi, pendukung OOP mengklaim bahwa OOP lebih mudah dipelajari bagi pemula dibanding dengan pendekatan sebelumnya, dan pendekatan OOP lebih mudah dikembangkan dan dirawat.

Inherited dan Inheritance C++ 
Inheritance (pewarisan) adalah hal-hal yang berhubungan dengan kemampuan membuat object baru dengan tetap mempertahankan property dan lingkungan object asalnya. Atau dengan kata lain object baru tersebut selalu mewarisi sifat-sifat terdahulunya. Misalnya T2 mewarisi sifat-sifat T1 maka T2 adalah keturunan T1 atau T1 adalah asal-usul T2. Pewarisan ini bersifat transitif. Jika kemudian T3 mewarisi sifat-sifat T2, maka T3 juga mewarisi sifat-sifat T1. Keuntungan dari sifat pewarisan ini adalah penggunaan bersama data dan kode-kode umum yang dimiliki objek (polimorpishm).
Jika sebuah clas A inherit dari class B maka B disebut superclass dan A disebut subclass. Object dari subclass dapat dipergunakan untuk mendapatkan korespondensi dari object superclass yang diharapkan. Hal ini dimungkinkan karena object dari sublass dan superclass memiliki perilaku yang sama. Selain itu subclass juga dapat di inherit lagi sehingga menjadi superclass dan mebuat subclass lainnya.
Inheritance dapat dibagi ke dalam dua tipe :
1. Single inheritance, satu subclass hanya memiliki satu suiperclass, hirarki class sederhana (tree), hubungan antar anggota satu lawan satu, lebih khusus pada superclass saja
2. Multiple inheritance, sebuah subclass dapat memiliki banyak superclass, hirarki class lebih rumit (graph), antara anggota class memungkinkan untuk inheritance secara multiple, kombinasi antara superclass dan subclass ( class D : public A : public b ();, aturan inheritance dan akses yang sama.
Pada inheritance juga tidak lepas dari permasalahan, masalah-masalah yang dapat terjadi antara lain :
1. Konflik antar anggota, Konflik nama dapat terjadi dimana ada nama dari anggota yang sama, subclaas yang dapat menggangu nama dari anggota superclass yang lainnya.
2. Konflik multiple inheritance, subclass dapat mengkombionasi lebih dari satu copy dari anggota begitu juga dengan superclassnya.
Untuk menghindari konflik yang terjadi ini ada dua cara untuk menghindarinya :
1. Dengan memesan bahwa superclass menyediakan property mana yang dapat di akses oleh class yang bermaslah dan untuk yang lainnya di hide.
2. Sublass menyediakan nama untuk propertynya dan bagaimana cara menggunakan.
Atau kita juga dapat membuat virtual superclass untuk menghindari permasalahan yang ada pada multiple inheritance.

B.2. Polymorpishm C++
Kalau diterjemahkan secara bahasa polymorpishm berarti banyak form, sedangkan polymorpishm yang dimaksud pada object oriented programming ialah metode yang sama dengan tingkah yang berbeda dan object menentukan metode mana yang akan di eksekusi.
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.

B.3. Enkapsulasi C++
Setelah secara penuh kita mengenkapsulasi kode-kode maka kita telah membangun sebuah dinding perlindungan untuk kode-kode kita sehingga jika suatu saat tejadi kode corrupt atau kerusakan lainnya yang disebabkan karena kesalahan kecil dapat dengan mudah untuk ditemukan dan di perbaiki. Dengan enkapsulasi ini dapat juga untuk mengisolasi permasalahan menjadi bagian bagian yang lebih kecil.
Jika diinginkan bahwa object (property, method, dll) tersebut hanya nampak dalam lingkup kelasnya sendiri maka harus dideklarasikan menjadi bersifat private. Sebaliknya objek harus dideklarasikan sebagai protected jika diinginkan hanya nampak dalam lingkup kelasnya sendiri beserta kelas-kelas keturunannya. Perlu diingat bahwa jika object itu tersedia dalan suatu unit, maka object itu juga tersedia dalam sebuah berkas. Misalnya mendefinisikan dua buah class dalam unit yang sama maka masing-masing class itu akan bisa saling mengakses object-object yang bersifat private di kedua class.
Pada perancangan komponen harus ditentukan dari awal parameter (object) apa saja yang bersifat private, protected, public atau published. Berikut ini keterangan singkat tentang masing-masing sifat dan penggunaannya.

B.3.1. Private
Variabel dan metode yang sengaja disembunyikan agar komponen keturunannya tidak bisa mengakses atau memodifikasinya, harus dideklarasikan sebagai private. Biasanya beberapa parameter bisa diakses melalui property yang mempunyai direktif Read dan Write yang juga digunakan untuk mencegah agar pengguna tidak mengakses langsung ke dalam prosedur internalnya.
Mendeklarasikan bagian-bagian suatu komponen menjadi bersifat private akan membuatnya tidak terlihat oleh unit lain selain dirinya sendiri. Bagian-bagian yang dideklarasikan ini hanya bisa diakses dari unit itu sendiri.

B.3.2. Protected
Variabel, metode dan property yang bisa diakses dan dimodifikasi oleh komponen keturunannya, tetapi tidak oleh pengguna. Mendeklarasikan bagian-bagian suatu komponen menjadi bersifat protected akan membuat bagian-bagian itu hanya terlihat dalam komponen itu sendiri dan keturunannya.
Gunakan deklarasi protected ini untuk mendefinisikan antarmuka penulis komponen. Unit-unit yang ada pada aplikasi tidak mempunyai akses ke bagian-bagian yang protected ini, tetapi komponen keturunannya bisa. Ini berarti bahwa penulis komponen dapat mengubah cara kerja komponen tanpa memperlihatkan rinciannya kepada pengembang aplikasi.

B.3.3. Public
Metode dan property yang boleh diakses oleh semua pengguna. Metod edan property ini hanya bisa diakses pada saat aplikasinya dijalankan, tidak pada tahap perancangannya.
Mendeklarasikan bagian-bagian suatu komponen menjadi bersifat public akan membuat bagian-bagian itu terlihat oleh semua bagian yang mempunyai akses ke komponen itu secara keseluruhan.
Bagian-bagian yang bersifat public dapat diakses oleh semua bagian pada runtime, maka bagian-bagian ini digunakan untuk mendefinisikan antarmuka runtime. Antarmuka ini sangat berguna untuk item-item yang kurang cocok untuk tahap design-time, seperti property yang tergantung dari nilai masukan yang diberikan saat runtime atau yang bersifat read-only. Method yang memang direncanakan agar dapat dipanggil oleh pengembang aplikasi harus bersifat public.

B.3.4. Published
Deklarasi published akan meletakkan property pada Object Inspector agar bisa dimanipulasi pada tahap perancangannya. Mendeklarasikan bagian-bagian suatu komponen menjadi bersifat published akan membuat bagian-bagian itu menjadi public dan akan membangkitkan informasi untuk runtime. Di antara informasi yang lain, informasi untuk runtime menjadikan Object Inspector dapat mengakses dan menampilkan property dan event.
Karena terlihat pada Object Inspector maka bagian-bagian yang bersifat published dapat digunakan untuk membentuk antarmuka design-time. Perancangan antarmuka ini hendaknya mempertimbangkan semua aspek yang memungkinkan pengembang aplikasi melakukan modifikasi pada design-time, tetapi menghindari property yang tergantung pada informasi tertentu untuk runtimenya.
Property yang read-only tidak dapat ditampilkan pada Object Inspector karena pengguna tidak dapat memberikan nilai langsung kepadanya. Property jenis ini harus public, bukan published.

Tidak ada komentar:

Posting Komentar