OBJECT-ORIENTED PROGRAMMING (OOP)
PEMROGRAMAN BERORIENTASI OBJEK
Pemrograman berorientasi objek
atau Object-Oriented Programming (OOP) merupakan suatu pendekatan pemrograman
yang menggunakan object dan class. Saat ini konsep OOP sudah semakin berkembang.
OOP bukanlah sekedar cara penulisan sintaks program yang berbeda, namun lebih
dari itu OOP merupakan cara pandang dalam menganalisa sistem dan permasalahan
pemrograman. Dalam konsep object oriented akan kita temukan kata object
dan class, class merupakan pola / template yang menggambarkan kumpulan object
yang mempunyai sifat yang sama, perilaku, atau disebut dengan himpunan object
sejenis. Sementara object adalah implementasi dari class.
Sebagai contoh dalam pembangunan suatu
gedung tentunya seorang arsitek akan menggunakan gambar desain gedung, dan
kemudian akan dibuat gedung nyatanya. Dalam contoh ini gambar desain gedung
dapat kita kategorikan sebagai class dan gedung nyatanya sebagai implementasi
dari gambar gedung yang dapat kita kategorikan sebagai object. Dari suatu class
dapat dibuat beberapa object yang sama.
1. 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). Enkapsulasi juga bisa diartikan
sebagai suatu mekanisme untuk menyembunyikan atau memproteksi suatu proses dari
kemungkinan interferensi atau penyalahgunaan dari luar sistem sekaligus menyederhanakan
penggunaan system itu sendiri. Akses ke internal sistem diatur sedemikian rupa
melalui seperangkat interface. 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.
Contoh kasus sepeda motor,
pada sistem pemindahan gigi transmisi, maka pengendara tidak perlu tahu detail
dari bagaimana proses pemindahan gigi itu dilakukan oleh mesin, cukup tahu
bagaimana menekan gigi transmisi itu. Pedal gigi transmisi yang diinjak pengendara
itu merupakan interface (antar muka) pengendara dengan sistem transmisi sepeda
motor. Jadi, bisa dikatakan enkapsulasi adalah sebuah prinsip yang digunakan
ketika membangun struktur program secara keseluruhan yang mana setiap komponen
dari program dibungkus, pembungkusan properti dan operasi dalam satu even.
Secara simple dapat kita katakan bahwa kita menyembunyikan keruwetan kode-kode
program dalam suatu object.J.
2. 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 manusia kita sebenarnya
terbiasa untuk melihat objek yang berada di sekitar kita tersusun secara
hierarki berdasarkan class-nya masing-masing. Dari sini kemudian timbul suatu
konsep tentang pewarisan yang merupakan suatu proses dimana suatu class
diturunkan dari class lainnya sehingga ia mendapatkkan ciri atau sifat dari
class tersebut. Perhatikan contoh hirarki berikut ini :
Class mamalia tidak perlu mendefinisikan
ulang apa yang telah dimiliki oleh class binatang, karena sebagai class
turunannya, ia akan mendapatkan karakteristik dari class binatang secara
otomatis. Demikian juga dengan class anjing, kucing dan monyet, hanya perlu
mendefinisikan karakteristik yang spesifik dimiliki oleh class-nya masing-masing.
Dengan memanfaatkan konsep pewarisan ini dalam pemrograman, maka hanya perlu mendefinisikan
karakteristik yang lebih umum akan didapatkan dari class darimana ia
diturunkan.
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. Polimorphism
merupakan suatu kondisi dimana dua object atau lebih mempunyai antarmuka yang
identik namun mempunyai perilaku berbeda. Polimorphisme 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.
Dalam PBO, konsep ini memungkinkan
digunakannya suatu interface yang sama untuk memerintah objek agar melakukan
aksi atau tindakan yang mungkin secara prinsip sama namun secara proses berbeda.
Dalam konsep yang lebih umum sering kali polymorphism disebut dalam istilah satu
interface banyak aksi.
Pada contoh diatas clas dasar adalah class bentuk yang memiliki atribut berupa Luas dan operasi hitung luas, class tersebut dapat diturunkan kedalam berbagai macam class bentuk seperti Segitiga, Lingkaran, Persegi panjang. Class Segitiga, Lingkaran, Persegi panjang memiliki atribut “Luas” dari hasil penurunan class bentuk, akan tetapi operasi hitung luas pada masing masing class akan berbeda-beda, inilah yang disebut sebagai polymorphism.
KENDALI AKSES
TERHADAP 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) :
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). Dengan kata lain, Atribut ini menunjukan bahwa fungsi atau method tidak dapat diakses oleh objek lain.
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. Dengan kata lain, atribut ini menunjukan bahwa fungsi/method dapat diakses oleh objek lain.
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. Dengan kata lain, Atribut ini menunjukan bahwa fungsi atau method hanya bisa diakses oleh objek itu sendiri atau objek lain yang merupakan subclassnya.
Dalam pemrograman berorientasi objek,
jika kita telah menentukan suatu objek tertentu, maka objek tersebut kita
definisikan dalam bentuk tipe baru yang namanya kelas. Tipe data kelas didefinisikan dengan
kata kunci (keyword) class, yang merupakan generalisasi dari pernyataan
struct. Pernyataan struct secara umum digantikan dengan pernyataan class. Jika
objek kotak dideklarasikan dalam bentuk kelas, maka deklarasinya mirip dengan
struktur.
class tkotak{
double panjang;
double lebar;
public:
void SetUkuran(double pj, double lb);
double Keliling();
double Luas();
};
tkotak kotak;
Dalam deklarasi kelas tersebut, muncul
kata public. Data atau fungsi yang dideklarasikan di bawah kata kunci
public mempunyai sifat dapat diakses dari luar kelas secara langsung. Dalam
deklarasi tersebut, variabel panjang dan lebar tidak bersifat public, sehingga tidak
dapat diakses secara langsung dari luar kelas. Dengan demikian
perintah-perintah di bawah ini tidak dapat dijalankan.
kotak.panjang = 10;kotak.lebar = 7;
cout<<”Panjang : ”<<kotak.panjang<<endl;
cout<<”Lebar : “<<kotak.lebar<<endl;
Dalam kelas, masing-masing data dan
fungsi anggota diberi sifat tertentu. Jika semua anggota kelas bersifat public,
maka kelas sama dengan struktur. Untuk dapat mengakses data panjang dan
lebar pada kelas tkotak harus dilakukan oleh fungsi yang menjadi anggota kelas
dan bersifat public.
Pada deklarasi kelas tkotak,
satu-satunya jalan untuk memberi nilai panjang dan lebar adalah dengan
menggunakan fungsi SetUkuran(). Untuk mengambil nilai panjang dan lebar juga
harus dilakukan oleh fungsi yang menjadi anggota kelas. Misalnya, kita
definisikan fungsi GetPanjang() dan GetLebar() untuk mengambil nilai panjang
dan lebar. Sebagai contoh :
#include<iostream.h>
#include<conio.h>
class tkotak
{
double panjang;
double lebar;
public:
void SetUkuran(double pj, double lb);
double Keliling();
double Luas();
double GetPanjang();
double GetLebar();
};
{
tkotak kotak;
kotak.SetUkuran(10,7);
cout<<"Panjang : "<<kotak.GetPanjang()<<endl;
cout<<"Lebar : "<<kotak.GetLebar()<<endl;
cout<<"Keliling : "<<kotak.Keliling()<<endl;
cout<<"Luas : "<<kotak.Luas()<<endl;
getch();
return 0;
}
{
panjang = pj;
lebar = lb;
}
{
return 2*(panjang+lebar);
}
{
return panjang*lebar;
}
{
return panjang;
}
{
return lebar;
}
Dapat dilihat dari contoh program, bentuk pendefinisian kelas adalah sebagai berikut :
Tipe Nama_Kelas::NamaFungsi()
{
IsiFungsi
}
Nama_Kelas Nama_Variabel;
Contoh :
Tkotak kotak;
Konstruktor adalah fungsi khusus anggota
kelas yang otomatis dijalankan pada saat penciptaan objek (mendeklarasikan
instance). Konstruktor ditandai dengan namanya, yaitu sama dengan nama kelas.
Konstruktor tidak mempunyai tipe hasil, bahkan juga bukan bertipe void.
Biasanya konstruktor dipakai untuk inisialisasi anggota data dan melakukan
operasi lain seperti membuka file dan melakukan alokasi memori secara dinamis.
Meskipun konstruktor tidak harus ada di dalam kelas, tetapi jika diperlukan
konstruktor dapat lebih dari satu.
1. Konstruktor default :
tidak dapat meneriman argumen, anggota data diberi nilai awal tertentu.
2. Konstruktor penyalinan dengan
parameter : anggota data diberi nilai awal berasal dari parameter.
3. Konstruktor penyalinan objek
lain : parameter berupa objek lain, anggota data diberi nilai awal dari
objek lain.
Destruktor adalah pasangan konstruktor.
Pada saat program menciptakan objek secara otomatis konstruktor akan
dijalankan, yang biasanya dimaksudkan untuk memberi nilai awal variabel
private. Sejalan dengan ini, C++ menyediakan fungsi destruktor (penghancur atau
pelenyap) yang secara otomatis akan dijalankan pada saat berakhirnya kehidupan
objek. Fungsi destruktor adalah untuk mendealokasikan memori dinamis yang
diciptakan konstruktor. Nama destructor sama dengan nama kelas ditambah awalan
karakter tilde (~).
Tidak ada komentar:
Posting Komentar