Irvan Faturrahman
1112091000035 /
TI 1A
IPLEMENTASI
OOP DENGAN MENGGUNAKAN BAHASA C++
Struktur dan kelas
Dalam C++, tipe data
struktur yang dideklarasikan dengan kata kunci struct, dapat mempunyai komponen
dengan sembarang tipe data, baik tipe data dasar maupun tipe data turunan,
termasuk fungsi. Dengan kemampuan ini, tipe data struktur menjadi sangat berdaya
guna.
Misalnya, kita ingin
membentuk tipe data struktur yang namanya kotak. Maka dapat dideklarasikan
sebagai berikut:
struct tkotak
{
double panjang;
double lebar;
}; tkotak kotak;
Untuk memberi nilai
ukuran kotak tersebut, kita dapat menggunakan perintahperintah ini:
kotak.panjang = 10;
kotak.lebar = 7;
Untuk memberi nilai
panjang dan lebar kotak, salah satu caranya adalah seperti di atas. Cara lain
untuk memberi nilai panjang dan lebar
adalah dengan membentuk suatu fungsi. Karena fungsi ini hanya digunakan untuk
memberi nilai data panjang dan lebar suatu kotak, tentunya fungsi ini khusus
milik objek kotak, sehingga harus dianggap sebagai anggota struktur kotak. C++
sebagai bahasa pemrograman dapat mendefinisikan anggota tipe struktur yang
berupa fungsi.
Dengan menambah fungsi
tersebut, maka struktur kotak menjadi lebih jelas bentuknya.
struct tkotak {
double panjang;
double lebar;
void SetUkuran(double
pj, double lb)
{
panjang = pj;43
lebar = lb; }; };
tkotak kotak;
dengan tipe struktur
kotak seperti itu, untuk memberi nilai panjang dan lebar hanya dengan memanggil
fungsi SetUkuran() kotak.SetUkuran(10,7);
Selain punya ukuran
panjang dan lebar, kotak juga mempunyai keliling dan luas. Dengan demikian,
kita dapat memasukkan fungsi untuk menghitung keliling dan luas ke dalam
struktur kotak.
Sebagai catatan, bahwa
definisi fungsi yang menjadi anggota struktur dapat ditempatkan di luar tubuh
struktur. Dengan cara ini maka deklarasi struktur kotak menjadi seperti
berikut:
struct tkotak {
double panjang;
double lebar;
void SetUkuran(double
pj, double lb);
double Keliling();
double Luas(); };
tkotak kotak;
contoh penerapan
struktur kotak dapat dilihat dalam program berikut:
#include<iostream.h>
#include<conio.h>
struct tkotak {
double panjang;
double lebar;
void SetUkuran(double
pj, double lb);
double Keliling();
double Luas();
};
int main() {
tkotak kotak;
kotak.SetUkuran(10,7);
cout<<"Panjang
: "<<kotak.panjang<<endl;
cout<<"Lebar
: "<<kotak.lebar<<endl;
cout<<"Keliling
: "<<kotak.Keliling()<<endl;
cout<<"Luas
: "<<kotak.Luas()<<endl;
getch();
return 0;
}
void
tkotak::SetUkuran(double pj, double lb) {
panjang = pj;
lebar = lb;
}
double
tkotak::Keliling() {
return
2*(panjang+lebar); }
double tkotak::Luas()
{
return panjang*lebar;
}
Tampilan Output:
Panjang : 10
Lebar : 7
Keliling : 34
Luas : 70
Bentuk program di
atas, adalah contoh gaya pemrograman berorientasi prosedur (terstruktur) yang
sudah mengubah pola pikirnya menjadi berorientasi objek. 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.
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.
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 masingmasing. Hak akses ini ditandai dengan kenampakan
anggota kelas. Kelas pada C++ menawarkan tiga atas 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.
Konstruktor dan Destruktor
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. Tiga jenis konstruktor:
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
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(~).
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.
Unggas
Ayam Burung Bebek
Ayam Kampung Ayam
Hutan
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.
Tidak ada komentar:
Posting Komentar