kali ini saya akan berbagi ilmu tentang "MENGENAL C++" , tanpa basa basi langsung saja kita bahas materinya :)
BAB I
POINTER
A.
Pengertian Pointer
Pointer adalah suatu variabel yang berisi alamat memori dari
sebuah variabel lain. Dengan kata lain ketika variabel pointer diakses, maka
akses akan diarahkan ke alamat lain yang merupakan lokasi sebenarnya dari
sebuah variabel. Suatu pointer dimaksudkan untuk menunjukkan ke suatu alamat
memori sehingga alamat dari suatu variabel dapat diketahui dengan mudah. Karena
kemampuannya tersebut, pointer biasa disebut sebagai variabel penunjuk.
B.
Kegunaan Pointer
pointer berguna untuk :
-
Mengirimkan
“Parameter yang berupa variabel” ke dalam fungsi, artinya nilai
variabel bisa diubah di dalam fungsi.
-
Untuk
membuat variabel DINAMIS (Bukan variabel Statis).
C. Operator Pointer & Bentuk Penulisannya
-
Operator
Pointer
Terdapat dua macam operator pointer yang disediakan oleh
Borland C++ :
1. Operator dereference (&)
Didalam mendeklarasikan suatu variabel harus pada lokasi yang
pasti didalam penggantian memori.Pada umumnya kita tidak dapat
menentukan dimana variabel akan ditempatkan Terkadang secara otomatis dilakukan
oleh kompiler dan sistem operasi yang sedang aktif, tetapi sesekali sistem
operasi akan memberikan banyak alamat yang kita tidak mengetahui dimana
variabel ditempatkan. Hal ini dapat dilakukan dengan memberikan suatu
identifier “&” (ampersand sign) didepan nama variabel, operator ini biasa
disebut dengan “address of” atau operator alamat. Dengan menggunakan operator
dereference ( & ) ini, suatu variabel akan menghasilkan alamat lokasi
memori.
2. Operator reference (*)
Dengan menggunakan operator anda dapat mengakses secara
langsung nilai yang terdapat didalam variabel yang berpointer, hal ini dapat
dilakukan dengan menambahkan identifier asterisk ( * ), agar dapat
menterjemahkan nilai sebenarnya dari suatu variabel. Operator ini biasa disebut
dengan “value pointed by”.
Dengan menggunakan operator reference ( * ) ini, menghasilkan
nilai yang berada pada suatu alamat memori.
-
Deklarasi
Pointer
1. Deklarasi Pointer Pada Konstanta
Suatu
pointer dapat dideklarasikan secara konstanta atau secara tetap tidak dapat
diubah. Untuk mendeklarasikan pointer secara konstanta dengan memberikan kata
const didepan nama konstanta.
Bentuk
penulisan:
tipe_data
* const nama_konstanta;
2. Deklarasi Pointer Pada Variabel
Karena
keakhlian dari pointer untuk menunjuk secara langsung kesuatu nilai, memeriksa
satu persatu data yang memiliki pointer pada saat variabel tersebut pertama
kali dideklarasikan.
Bentuk
penulisan:
tipe_data
*nama_variabel;
3. Pointer Pada Pointer
Tidak
terbatas menunjuk alamat dari suatu variabel, pointer dapat pula menunjuk ke
pointer lainnya. Didalam pendeklarasianya, hanya menambahkan pointer reference
( * ) pada variabel yang akan ditunjuk.
4. Pointer pada Array
Konsep
Array diantaranya banyak loncatan dari pointer satu ke pointer yang lain.
karena secara internal array juga menyatakan alamat, yaitu pengenal array sama
dengan alamat pada elemen pertama, pada array.
5. Pointer pada String
perubahan
nilai pointer yang di tunjukkan oleh penambahan nilai pointer, secara default,
pembacaan dilakukan mulai dari pointer pertama, karena sudah terjadi
penambahan.
D.
Contoh Program Pointer & Penjelasannya
Contoh Aplikasi Pointer
Salah satu penggunaan pointer adalah untuk membuat suatu array yang dinamis
(banyaknya data yang bisa ditampung sesuai keperluan).
Sebagaimana kita ketahui jika kita membuat suatu program yang dapat
menampung data nilai sebanyak 5 buah maka kita akan membuat suatu variabel
array yang bertipe int dengan perintah int data[5]. Dengan cara begitu
maka program hanya akan berjalan dengan baik jika data yang diinputkan
banyaknya di kurang atau sama dengan 5 buah. Apa yang terjadi ketika data yang
akan diinputkan ternyata 10 buah, maka langkah yang dilakukan adalah harus
mengubah programnya dan mengganti int data[5] menjadi int data[10].
Cara lain untuk membuat program tersebut adalah dengan menggunakan suatu
variabel array yang dinamis dimana pemesanan tempat yang diperlukan untuk
menyimpan data tidak dideklarasikan dalam program tapi dilakukan secara runtime
(ketika program berjalan).
01: #include <stdio.h>
02: #include <conio.h>
03: #include <stdlib.h>
04: main()
05: {
06: int *data;
07: int i,banyakdata;
08: printf(“Banyak data yang akan
diinputkan : “);scanf(“%i”,&banyakdata);
09: data=(int
*)malloc(sizeof(int)*banyakdata);
10: for(i=0;i<banyakdata;i++)
11: {
12:
printf(“Pemasukan data ke-%i :”,i+1);scanf(“%i”,(data+i));
13: }
14: printf(“Data yang telah
diinputkan adalah : \n”);
15: for(i=0;i<banyakdata;i++)
16: printf(“Data
ke-%i : %i\n”,i+1,*(data+i));
17: getch();
18: return 0;
19: }
|
Tampilan yang
dihasilkan oleh program diatas adalah sebagai berikut :
Banyak data
yang akan diinputkan : 5
Pemasukan data
ke-1 :12
Pemasukan data
ke-2 :3
Pemasukan data
ke-3 :4
Pemasukan data
ke-4 :5
Pemasukan data
ke-5 :67
Data yang
telah diinputkan adalah :
Data ke-1 : 12
Data ke-2 : 3
Data ke-3 : 4
Data ke-4 : 5
Data ke-5 : 67
Keterangan
program :
Baris 6 :
Pendeklarasian sebuah variabel pointer int yang bernama data.
Baris 7 :
Pendeklarasian variabel i sebagai counter dan banyakdata untukmenyimpan
banyaknya data.
Baris 8 :
Pengisian data banyak data.
Baris 9 :
Pemesanan alokasi di memori untuk variabel pointer data sebesar besarnya int
(sizeof(int)) dikali dengan banyakdata.
Baris 10 :
Perulangan untuk membaca data dari data ke-0 sampai ke banyakdata-1.
Baris 12 :
Membaca data dari keyboard dan dimasukan ke alamat data pada urutan ke-i.
Baris 15 – 16
: Menampilkan isi data yang ditunjuk oleh pointer.
BAB II
CLASS & OBJECT
A.
Pengertian Class & Object
-
PENGERTIAN CLASS
Class adalah suatu
struktur dalam program yang berisi satu atau beberapa metode (dapat berupa
fungsi atau prosedur) dan atribut (dapat berupa data ataupun variable yang
aka di operasikan dalam metode).
-
PENGERTIAN OBJECT
Setiap Object di
bangun dari sekumpulan data (atribut) yang di sebut variable untuk menjabarkan
karakteristik khusus dari object, dan juga terdiri dari sekumpulan method yang
menjabarkan tingkah laku dari object.
Bisa di katakan bahwa
object adalah sebuah perangkat lunak yang berisi sekumpulan variable dan method
yang berhubungan.
Sebuah obyek adalah
sebuah instance (keturunan) dari class. Atau object bisa juga di sebut variable
dari class.
-
PERBEDAAN CLASS DAN
OBJECT
Misal, kita memiliki sebuah
class mobil dimana dapat di gunakan untuk mendefinisikan beberapa obyek mobil.
Pada table di bawah, mobil A dan mobil B adalah obyek dari class mobil. Class
memiliki field nomor, plat, warna, manufaktur dan kecepatan yang diisi dengan
nilai pada object mobil A dan mobil B. Mobil juga dapat berakselerasi, berbelok
dan melakukan rem.
Ketika diinisialisi,
setiap object mendapat satu set variable yang baru. Bagaimanapun, implementasi
dari method di bagi di antara object pada class yang sama. Class menyediakan
keuntugan dari reusability.
Programmer perangkat lunak dapat menggunakan sebuah kelas beberapa kali untuk
membuat banyak object.
B.
Kegunaan Class & Object
-
KEGUNAAN CLASS
Kelas dibuat untuk mempresentasikan sebuah objek tertentu sehingga akan
membantu dalam proses penyelesaian masalah-masalah kompleks. Apabila kita
amati, definisi sebuah kelas itu sama saja dengan pembuatan tipe data baru.
Sebagai contoh kita dapat membuat tipe-tipe yang berkaitan dengan suatu objek
seperti mobil, rumah, karyawan dan lain-lain.
-
KEGUNAAN
OBJECT
Untuk menjabarkan karakteristik khusus dari object, dan juga terdiri dari
sekumpulan method yang menjabarkan tingkah laku dari object.
C.
Bentuk penulisan class & object
Bentuk sederhana deklarasi class adalah sebagai berikut,
class C { }; atau
struct C { };
dalam bahasa C++ struct dan class mempunyai pengertian yang sama. Deklarasi
class dengan struct mempunyai anggota dengan akses public kecuali jika
dinyatakan
lain.
struct C class
C
{ {
int i; public:
void f(); int
i;
} void
f();
}
Kedua deklarasi tersebut mempunyai arti yang sama. Hal ini adalah pilihan
desain yang diambil oleh desainer C++ (Bjarne Stroustrup) untuk menggunakan C
sebagai basis C++ ketimbang membuat bahasa yang sama sekali baru. Tentunya ada konsekuensi
atas pilihan desain ini, salah satu contoh adalah kompatibilitas terhadap bahasa C.
Dalam bahasa C deklarasi,
struct C { … };
menyatakan C sebagai nama tag. Nama tag berbeda dengan nama tipe, sehingga
C
(nama tag) tidak dapat dipergunakan dalam deklarasi yang membutuhkan C
sebagai
suatu tipe obyek. Kedua contoh deklarasi berikut ini tidak valid dalam
bahasa C,
C c; /* error, C adalah nama tag */
C *pc; /* error, C adalah nama tag */
Dalam bahasa C, kedua deklarasi tersebut harus ditulis sebagai berikut,
struct C c;
struct C *pc;
atau menggunakan typedef sebagai berikut,
struct C { … };
typedef struct C C;
C c;
C *pc;
C++ memperlakukan nama class, C sebagai nama tag sekaligus nama tipe dan
dapat
dipergunakan dalam deklarasi. Kata class tetap dapat dipergunakan dalam
deklarasi,
seperti contoh berikut ini,
class C c;
Dengan demikian C++ tidak membedakan nama tag dengan nama class, paling
tidak
dari sudut pandang pemrogram (programmer), dan tetap menerima deklarasi
structure seperti dalam bahasa C. Kompatibilitas C++ terhadap tidak sebatas
perbedaan nama tag dan nama tipe, karena standar C++ masih perlu mendefinisikan
tipe POD (Plain Old Data). POD type mempunyai banyak persamaan dengan structure
dalam C. standar C++ mendefinisikan POD type sebagai object suatu class yang
tidak mempunyai user defined constructor, anggota protected maupun private,
tidak punya base class, dan tidak memiliki fungsi virtual.
Dalam desain suatu aplikasi terdiri atas banyak class, dan masing-masing
class tidak berdiri sendiri melainkan saling bergantung atau berhubungan satu
sama lain. Salah satu contoh hubungan tersebut adalah hubungan antara satu class
dengan satu atau lebih base class atau parent class. Jika class C mempunyai
base class B, dikenal dengan inheritance, maka deklarasi class menjadi,
class C : public B {}; atau
class C : protected B {}; atau
class C : private B {};
akses terhadap anggota base class B dapat bersifat public, protected,
maupun private, atau disebut dengan istilah public, protected atau private
inheritance. Class C disebut dengan istilah derived class. Jika tidak
dinyatakan bentuk akses secara eksplisit, seperti dalam deklarasi berikut:
class C : B
maka interpretasinya adalah private inheritance (default), tetapi jika
menggunakan
struct maka tetap merupakan public inheritance.
Jika desainer class C tersebut menginginkan hubungan multiple inheritance
(MI) terhadap class B dan A, maka deklarasi class C menjadi,
class C : public B, public A { };
Sebuah class, seperti halnya class C mempunyai anggota berupa data maupun
fungsi
(member function). Isi class tersebut berada diantara tanda kurung { } dan
dipilah-pilah sesuai dengan batasan akses yang ditentukan perancang (desainer)
class tersebut.
class C : public B
{
public:
(explicit) C()(:member-initializer);
C(const C& );
C& operator=(const C&);
(virtual)~C();
statement lain
(protected: statement)
(private: statement)
};
Secara ringkas batasan akses (access specifiers) mempunyai arti seperti
ditunjukkan
pada table berikut ini,
Batasan Akses
|
Arti
|
Public
|
Semua Class atau bebas
|
Protected
|
Class itu sendiri, friend, atau derived Class
|
Private
|
Class itu sendiri, friend
|
Sebuah class dapat memberikan ijin untuk class lain mengakses bagian
protected maupun private class tersebut melalui hubungan friendship (dinyatakan
dengan keyword friend).
Sebuah class mempunyai beberapa fungsi khusus, yaitu constructor, copy constructor,
destructor dan copy assignment operator.
D.
Contoh Program Class & Object & Penjelasannya
Contoh :
#include
<iostream>
using namespace std;
/* membuat class
PersegiPanjang */
class PersegiPanjang{
private:
int panjang;
int lebar;
public:
void
setPanjangLebar(int x, int y){
panjang = x;
lebar = y;
}
int luas();
}
int PersegiPanjang ::
luas(){
return (panjang*lebar);
}
int main(){
/* membuat object
persegi */
PersegiPanjang persegi;
persegi.setPanjangLebar(5,6);
cout <<
"Luas Persegi Panjang adalah " << persegi.luas() <<
endl;
return 0;
}
|
Pada contoh diatas merupakan pembuatan kelas persegi
panjang yang didalamnya terdapat data member private dan public, yang termasuk
private member yaitu atribut panjang dan lebar (int) Sedangkan public member
yaitu fungsi setPanjangLebar dan fungsi luas. Pada fungsi luas di class
hanya didefiniskan sebagai protype saja, yang isinya didefiniskan di luar
pendefinisian class. Hal ini akan merupakan salah satu ciri konsep
encapsulation yang akan saya jelaskan pada tutorial selanjutnya. Karena atribut
panjang dan lebar merupakan private member maka jika anda mengakses diluar dari
class persegi panjang misal di main anda
menuliskan persegi.panjang=5; maka akan menghasilkan error.
Object yang dibuat pada contoh diatas adalah
persegi, anda dapat membuat lebih object dengan nama yang berbeda-beda pada
satu class.
Pada contoh source code diatas jika di run
akan mengasilkan keluaran:
“Luas Persegi Panjang adalah 30″ Dengan menggunakan class kita dapat dengan
mudah membuat object-object yang berbeda dengan lebih efisien.
BAB III
INHERITANCE
A.
Pengertian Inheritance
o
Inheritence adalah proses pembentukan class baru
(derived class) dan class yang lainya (base class dan class induk).
o
Inheritance adalah
turunan atau pewarisan suatu class ke class baru dengan mewakili semua function
yang ada di class utama (parent class). Inheritance sering sekali digunakan di
dalam promgraman berorientasi objek atau OOP. Dengan kata lain, class utama (parent
class) dengan classes turunannya berhubungan satu sama lain.
o
Dalam
bahasa C++, inheritance merupakan peristiwa di suatu kelas mewarisi data dan
fungsi anggota dari kelas yang lain. Kelas yang mewarisi, diistilahkan dengan
kelas anak atau kelas turunan, sedangkan kelas yang mewariskan, diistilahkan
dengan induk. Pewarisan memungkinkan seorang programmer berorientasi obyek
menghindari penulisan ulang fungsi dan data anggota berulang kali.
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. 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.
B.
Kegunaan Inheritance
o
Inheritance
sering sekali digunakan di dalam pemrograman berorientasi objek atau OOP. Dengan kata lain, class utama (parent class)
dengan classes turunannya berhubungan satu sama lain.
o
metode
ini digunakan untuk menurunkan kelas yang bersifat umum dan dapat digunakan
kembali re-use dalam kelas yang lain.
C.
Bentuk Penulisan Inheritance
Berikut adalah bentuk
umum mendefinisikan suatu kelas turunan :
Keterangan :
nama_kelas -->
merupakan nama kelas turunan
kelas_induk -->
merupakan nama kelas induk dimana data dan fungsi anggota diturunkan. Kelas
induk dapat berjumlah lebih dari satu. Apabila lebih dari satu, masing-masing
kelas induk harus dipisahkan dengan tanda koma (,).
perubah_akses --> merupakan perubah akses kelas (class access modifier).
Perubah ini menentukan sifat akses anggota-anggota dari kelas induk. Perubah
akses ada 3 macam jenis, yaitu :
o
Private merupakan perubah akses bawaan jika tidak ada perubah
akses yang dispesifikasikan
o
Protected
o
Public
Beberapa aturan pewarisan yang berlaku untuk perubah akses
ini adalah sebagai berikut :
a.
Untuk perubahan akses kelas
public :
o
Anggota public dari kelas induk menjadi anggota public
kelas turunan
o
Anggota protected dari kelas induk menjadi anggota
protected kelas turunan
o
Anggota private tidak diwariskan ke kelas turunan
b.
Untuk perubah akses kelas
protected :
o
Anggota public dari kelas induk menjadi anggota protected
kelas turunan
o
Anggota protected dari kelas induk menjadi anggota
protected
o
Anggota private tidak diwariskan ke kelas turunan
c.
Untuk perubah akses kelas
private :
o
Anggota public dari kelas induk menjadi anggota private
kelas turunan
o
Anggota protected dari kelas induk menjadi anggota private
kelas turunan
o
Anggota private tidak diwariskan ke kelas turunan
Contoh hierarki suatu
kelas dalam pewarisan :
D.
Contoh Program Inheritance & Penjelasannya
Untuk memahami tentang
konsep pewarisan, marilah kita lihat contoh berikut ini.
#include
<iostream.h>
#include <conio.h>
class Basis
{
private
:
int
alpha;
int
bravo;
public
:
void
info_basis()
{
cout<<”info_basis()
dijalankan…”<<endl;
}
};
class Turunan : public
Basis
{
public
:
void
info_turunan()
{
cout<<”info_turunan()
dijalankan…”<<endl;
}
};
void main()
{
clrscr();
Turunan
anak;
anak.info_basis();
anak.info_turunan();
}
Keluarannya :
info_basis() dijalankan…
info_turunan()
dijalankan…
Pada contoh diatas, terdapat
kelas bernama Basis dan Turunan. Dalam hal ini :
· Basis adalah
kelas dasar
· Turunan adalah
kelas turunan
Kelas Turunan mewarisi
sifat-sifat dari kelas Basis .
Perhatikan pernyataan
pada main() :
Turunan anak;
Anak.info_basis();
Sekalipun info_basis()
dideklarasikan pada kelas Basis, ia juga diwariskan pada kelas Turunan. Namun
bagaimana mekanisme pewarisannya? Jawaban dari pertanyaan ini terletak pada
topik berikut.
Pada pendeklarasian
kelas Turunan terdapat baris sebagai berikut :
Class Turunan : public
Basis
Pada baris
ini terdapat kata-kata kunci tersebut pada konteks ini ? Untuk melihat kegunaan
kata-kata kunci ini, perhatikan terlebih dulu program berikut.
#include
<iostream.h>
#include <conio.h>
class Basis
{
private
:
int
alpha;
int
bravo;
public
:
void
info_basis()
{
cout<<”info_basis()
dijalankan…”<<endl;
}
};
class Turunan : Basis
{
public
:
void
info_turunan()
{
cout<<”info_turunan()
dijalankan…”<<endl;
}
};
void main()
{
clrscr();
Turunan
anak;
anak.info_basis();
anak.info_turunan();
}
Perbedaan program di
atas dengan program sebelumnya terletak pada kata-kunci public. Pada program
diatas, kata kunci public pada baris yang berisi class Turunan dibuang.
Apabila program
dikompilasi, kesalahan akan terjadi, yakni pada pernyataan :
anak.info_basis();
Kesalahan menyatakan
bahwa Basis::info_basis() tidaklah dapat diakses pada main(). Lalu, apa
artinya?
Bentuk seperti :
class Turunan : Basis
sebenarnya mempunyai
makna yang sama dengan :
class Turunan : private
Basis
Maksudnya yaitu semua
anggota yang bersifat public ( dan juga protected ) pada kelas dasar ( Basis )
diwariskan ke kelas turunan ( Turunan ) sebagai anggota yang bersifat private.
Sedangkan kalau
pewarisan dilakukan dengan public, semua anggota yang bersifat public pada
kelas dasar diwariskan ke kelas turunan seperti apa adanya pada kelas basis.
BAB IV
POLIMORFISME
A.
Pengertian
Polimorfisme
Polimorfisme
merupakan fitur pemrograman berorientasi obyek yang penting setelah pengkapsulan
(encapsulation) dan pewarisan (inheritance). Polimorfisme berasal dari bahasa
Yunani, poly(banyak) dan morphos (bentuk). Polimorfisme menggambarkan
kemampuan kode-kode bahasa C++ berperilaku berbeda tergantung situasi pada
waktu run (program berjalan).
Contoh
polimorfisme yang konkrit dalam dunia nyata yaitu mobil. Mobil yang ada di
pasaran terdiri atas berbagai tipe dan berbagai merk, tetapi semuanya memiliki
interface kemudi yang sama, seperti: stir, tongkat transmisi, pedal gas dan
rem. Jika seseorang dapat mengemudikan satu jenis mobil saja dari satu merk
tertentu, maka orang itu akan dapat mengemudikan hampir semua jenis mobil yang
ada, karena semua mobil tersebut menggunakan interface yang sama. Harus
diperhatikan disini bahwa interface yang sama tidak berarti cara kerjanya juga
sama. Misal pedal gas, jika ditekan maka kecepatan mobil akan meningkat, tetapi
bagaimana proses peningkatan kecepatan ini dapat berbeda-beda untuk setiap
jenis mobil.
Konstruksi
polimorfisme dalam pemrograman berorientasi obyek memungkinkan untuk
mengadakan ikatan dinamis (juga disebut ikatan
tunda, atau ikatan akhir). Apabila fungsi-fungsi dari suatu kelas dasar
didefinisikan ulang atau ditindih pada kelas turunan, maka obyek-obyek yang
dihasilkan hirarki kelas berupa obyek polimorfik. Polimorfik artinya mempunyai
banyak bentuk atau punya kemampuan untuk mendefinisi banyak bentuk.
Polimorfisme
merupakan suatu konsep yang menyatakan bahwa sesuatu yang sama dapat memiliki
berbagai bentuk dan perilaku yang berbeda. Dalam hal ini polimorfisme merupakan
suatu sifat menyandarkan pada kesamaan nama dalam program. Pengenal data,
instans, dan metode, bahkan nama fungsi dapat dibuat dengan nama yang sama
untuk kegunaan yang berbeda.
Salah
satu bentuk polimorfisme pada C++ dapat digunakan pada fungsi atau operator dan
dikenal sebagai istilahoverloading. Overloading terhadap fungsi akan memungkinkan
sebuah fungsi dapat menerima bermacam-macam tipe dan memberikan nilai balik
yang bervariasi pula.
B.
Kegunaan
Polimorfisme
bentuk
polimorfisme pada C++ dapat digunakan pada fungsi atau operator dan dikenal sebagai
istilahoverloading. Overloading terhadap
fungsi akan memungkinkan sebuah fungsi dapat menerima bermacam-macam tipe dan
memberikan nilai balik yang bervariasi pula.
C.
Bentuk
Penulisan Polimorfisme
Polymorphism dibedakan menjadi 2
jenis, yakni:
1. Trivial
polymorphism
o menggunakan
C style
o function
terjadi pada saat compile time
o dengan
menggunakan functin overloading
o link
body function + function header / prototype
2. True
polymorphism
o menggunakan
C++ style
o dengan
virtual method
o function
didefinisi saat runtime
o terdapat
dalam ADT atau abstrak data class
o compiler
membuat UMT untuk class yang mengandung polymorphism
o jika
derived class memiliki fungsi yang sama (overriding), maka UMT akan menunjuk ke
fungsi base class
Implementasi polymorphism dapat dilakukan dengan dua cara,
yaitu:
1.
Overloading function
adalah penggunaan kembali nama fungsi yang sama tapi dengan
argumen yang berbeda 3 signature yang perlu diperhatikan dalam melakukan
overloading :
o Jumlah
argument
o Letak
argument
o Type
argument
Contoh :
Void hitung (int x, int y);
Void hitung(float x, float y);
2.
Overriding function
adalah sebuah fungsi dalam class turunan yang memiliki nama,
return type dan argumen function yang sama dengan fungsi dalam class
induk. Ada 2 jenis virtual method dalam overriding, yaitu :
1.
Pure
Virtual Method
merupakan virtual method yang hanya mendeklarasikan function
prototipes saja (tidak memiliki implementasi) Suatu class yang memiliki pure
virtual method. Instance (object) tidak dapat dibuat dari suatu abstract class,
karena masih ada fungsi yang tidak memiliki function body. Ciri dari pure
virtual method adalah pada deklarasi ditulis fungsi() = 0.
Contoh :
class kendaraan
{
virtual void jalan()= 0;
};
2.
Squasi
Virtual Method
merupakan virtual metthod yang mempunyai function body atau implementasi
Contoh :
class kendaraan
{
virtual void jalan() {;}
};
Dan pada penggunaannya hanya destructor saja yang dapat dibuat
virtual.
D.
Contoh Program Polimorfisme &
Penjelasannya
contoh implementasi dari penggunaan konsep
polimorfisme. Program berikut ditulis dengan bahasa pemrograman C++.
Program di atas merupakan program untuk melakukan perhitungan
luas kotak dan volume balok. Kelas-kelas yang terdapat dalam program di atas
yaitu kelas kotak dan kelas balok. Pada kelas balok ini mengandung beberapa
metode yang sama dengan metode yang terdapat dalam kelas balok. Dengan
menggunakan konsep polimorfisme, deklarasi metode yang sama tersebut dapat
dituliskan secara lebih singkat tanpa menuliskan bagian hal-hal yang sama
tersebut. Dengan kata lain, bagian metode yang dibutuhkan tersebut hanya perlu
dipanggil nama metodenya saja. Perbedaan antara konsep pewarisan dan
polimorfisme yaitu jika dalam pewarisan, sifat yang dimiliki oleh kelas induk
diturunkan kepada kelas turunannya sehingga apabila salah satu nilai variabel
yang dimiliki oleh kelas induk maupun turunan diubah maka output yang
dihasilkan akan mempengaruhi semua kelas. Sedangkan dalam polimorfisme, apabila
salah satu nilai variabel pada salah satu kelas, maka output yang dihasilkan
tidak mempengaruhi output semua kelas, tetapi hanya pada kelas yang memuat
nilai variabel tersebut.
Untuk lebih jelasnya berikut
merupakan uraian serta pembahasan tentang masing-masing baris program di atas
yaitu sebagai berikut :
1.
Semua baris yang diawali dengan
dua buah tanda slash (//), akan dianggap sebagai baris komentar dan tidak akan
berpengaruh pada hasil eksekusi program. Baris komentar dipakai oleh Programmer
untuk memberikan penjelasan atau keterangan tentang maksud program tersebut.
Bagian dari program di atas yang menggunakan dua buah tanda slash (//) yaitu
2.
Pernyataan yang diawali dengan tanda (#) merupakan pernyataan
untuk menyertakan preprocessor. Pernyataan ini bukan untuk dieksekusi.
Pernyataan seperti #include <stdio.h> berarti memerintahkan kompiler
untuk menyertakan file header stdio.h. File header stdio.h merupakan library
file input output standar. Kemudian juga terdapat fungsi #include
<iostream>. Dalam file header ini, terdapat beberapa fungsi standar yang
dipakai dalam proses input dan output. Seperti misalnya perintah cout yang
dipakai dalam program di atas merupakan bagian dari file header iostream.
Header yang dipanggil <iostream>, tanpa menggunakan “.h”. Apabila tetap
menggunakan “.h” maka akan muncul peringatan (warning) ketika dieksekusi,
walaupun demikian program masih tetap dapat dieksekusi dengan benar. Bagian
dari program di atas yang menggunakan tanda (#) yaitu :
3.
Pada kelas Kotak, terdapat ungkapan-ungkapan sebagai berikut
:
Pada kelas
Kotak, nama kelas ditulis dengan sintaks class Kotak, yang menunjukkan bahwa
Kotak adalah nama suatu kelas. Tampak bahwa terdapat dua buah perubah akses
(anggota kelas) yang digunakan pada kelas ini yaitu protected dan public. Yang
termasuk perubah akses protected yaitu variabel panjang (bertipe data integer
“int”), lebar (bertipe data integer “int”), luas (bertipe data long atau bilangan real dengan range yang lebih
besar), dan keliling (bertipe data longatau bilangan
real dengan range yang lebih besar).Yang termasuk perubah akses public yaitu
metode Kotak, ambil_panjang()(bertipe data integer),
ambil_lebar() (bertipe data integer), hitung ()
(bertipe virtual void), dan
ambil (bertipe void). Prototype metode Kotak ini berfungsi sebagai konstruktor
dan memiliki argumen yang terdiri dari variabel Panjang dan Lebar yang
masing-masing bertipe integer. Metode
ambil terdiri dari argumen yang terdiri dari variabel Luas dan Keliling.
Prototype yang menggunakan tipe data void, berarti bahwa hasil eksekusinya
tidak bertipe (tanpa parameter) dan tidak memberikan nilai balik. Prototype
virtual digunakan untuk memanggil fungsi kelas induk, apabila tidak menggunakan
prototype virtual ini fungsi kelas induk tidak dapat dipanggil. Definisi atas
metode-metode tersebut akan dipaparkan di bagian bawah.
4.
Pada kelas
Balok, terdapat ungkapan-ungkapan sebagai berikut :
5.
Berikut ini merupakan definisi metode-metode pada kelas Kotak
:
Pada metode Kotak::Kotak di atas
pernyataan panjang = Panjang; berfungsi untuk memberikan inisialisasi terhadap
variabel input panjang ke variabel Panjang. Demikian pula untuk pernyataan
lebar = Lebar; berarti memberikan inisialisasi terhadap variabel input lebar ke
variabel Lebar. Inisialisasi ini dilakukan untuk mempermudah dalam hal eksekusi
baris program di bawahnya yang membutuhkan manipulasi (perhitungan) terhadap
variabel-variabel tersebut.
Pada metode
Kotak::ambil_panjang()terdapat ungkapan return panjang; yang berfungsi untuk
mengakhiri eksekusi dan mengembalikan ke fungsi pemanggil. Ketika pernyataan
return dieksekusi, eksekusi fungsi yang memuat variabel panjang segera diakhiri
pada keadaan tersebut.
Pada metode
Kotak::ambil_lebar()terdapat ungkapan return lebar; yang berfungsi untuk
mengakhiri eksekusi dan mengembalikan ke fungsi pemanggil. Ketika pernyataan
return dieksekusi, eksekusi fungsi yang memuat variabel lebar segera diakhiri
pada keadaan tersebut.
Metode Kotak::hitung()digunakan
untuk melakukan perhitungan terhadap variabel panjang dan lebar sehingga
dihasilkan output berupa luas dan keliling bangun kotak. Pernyataan luas =
panjang * lebar; berarti bahwa nilai variabel luas merupakan hasil perkalian
antara variabel panjang dan variabel lebar, sehingga akan diperoleh luas bangun
kotak. Sedangkan pernyataan keliling = 2 * (panjang + lebar); berarti bahwa
nilai dari variabel keliling merupakan hasil penjumlahan variabel panjang dan
variabel lebar kemudian hasilnya dikalikan dengan 2, sehingga akan diperoleh
keliling bangun kotak.
Metode Kotak::ambil (long&
Luas, long& Keliling) digunakan untuk melakukan inisialisasi terhadap isi
variabel luas dan keliling. Pernyataan Luas = luas; digunakan untuk mengisi
variabel Luas dengan nilai yang dihasilkan oleh variabel luas yang dihasilkan
pada metode Kotak::hitung(). Sedangkan pernyataan Keliling = keliling;
digunakan untuk mengisi variabel Keliling dengan nilai yang dihasilkan oleh
variabel keliling yang dihasilkan pada metode Kotak::hitung().
6.
Berikut ini merupakan definisi metode-metode pada kelas Balok
:
Pada metode Balok::Balok di atas
pernyataan tinggi = Tinggi; berfungsi untuk memberikan inisialisasi terhadap
variabel input tinggi ke variabel Tinggi. Pada metode ini juga dibutuhkan
variabel panjang dan lebar yang sebelumnya diinisialisasi dalam metode kelas
Kotak. Hal ini menunjukkan bahwa dalam metode ini diperlukan tiga buah variabel
perhitungan yaitu Panjang, Lebar, dan Tinggi.
Pada metode int
Balok::ambil_tinggi()terdapat ungkapan return tinggi; yang berfungsi untuk
mengakhiri eksekusi dan mengembalikan ke fungsi pemanggil. Ketika pernyataan
return dieksekusi, eksekusi fungsi yang memuat variabel tinggi segera diakhiri
pada keadaan tersebut.
Metode Balok::hitung()digunakan
untuk melakukan perhitungan terhadap variabel panjang, lebar, dan tinggi
sehingga dihasilkan output berupa luas alas, keliling alas, dan volume sebuah
balok. Pernyataan Kotak::hitung(); berarti bahwa metode ini memanggil kembali
metode yang berada di dalam kelas Kotak, sehingga nantinya akan dihasilkan
output sesuai dengan metode tersebut (luas alas dan keliling alas balok) dalam
kelas Balok. Sedangkan pernyataan volume = panjang*lebar*tinggi; berarti bahwa
nilai dari variabel volume merupakan hasil perkalian antara isi variabel
panjang, variabel lebar dan variabel tinggi, sehingga akan diperoleh volume
balok.
Metode Balok::ambil(long&
Luas, long& Keliling, long& Volume) digunakan untuk melakukan
inisialisasi terhadap isi variabel luas alas, keliling alas, dan volume balok.
Pernyataan Kotak::ambil(Luas, Keliling); digunakan untuk memanggil metode
tersebut yang berada dalam kelas Kotak. Melalui metode yang dipanggil ini, maka
inisialisasi terhadap variabel luas dan keliling akan sama dengan inisialisasi
yang dilakukan pada kelas Kotak. Pernyataan Volume = volume; digunakan untuk
mengisi variabel Volume dengan nilai yang dihasilkan oleh variabel volume yang
dihasilkan pada metode Balok::hitung().
7.
Bagian program utama dalam keseluruhan program di atas yaitu
sebagai berikut :
Penulisan listing program untuk
bagian program utama di atas selalu diawali dengan fungsi int main (). Fungsi
dari program utama di atas yaitu untuk menentukan prosedur dan langkah eksekusi
terhadap masing-masing kelas yang telah dibuat. Pada program utama di atas ternyata
prosedur yang digunakan untuk menampilkan output ke layar yaitu tanpa meminta
input dari user, artinya obyek yang dimasukkan sudah ditentukan terlebih dahulu
dalam program utama.
Pernyataan Kotak A (12, 3);
digunakan untuk menyatakan bahwa objek yang akan dieksekusi adalah sebuah objek
A berbentuk Kotak yang mempunyai panjang = 12 dan lebar = 3. Pernyataan Balok B
(12, 3, 8); digunakan untuk menyatakan bahwa objek yang akan dieksekusi adalah
sebuah objek B berbentuk Balok yang mempunyai panjang = 12, lebar = 3, dan
tinggi = 8.
Pernyataan seperti std::cout
berfungsi untuk menampilkan suatu output ke layar, sedangkan pernyataan
std::endl; berfungsi untuk menandai akhir suatu baris output (ganti baris).
Pernyataan long l, k;
berarti mendefinisikan bahwa hasil eksekusi variabel l (luas) dan variabel k
(keliling) bertipe datalong (bilangan dengan range
data yang lebih panjang). Kemudian pernyataan seperti B.hitung(); berarti objek
B akan dieksekusi menurut metode hitung () yang ada di dalam kelas Balok. Pernyataan
seperti B.ambil(l, k, v); berarti objek B akan dieksekusi menurut metode ambil
(l, k , v) yang ada di dalam kelas Balok sehingga akan dihasilkan hasil
eksekusi berupa Luas, Keliling, dan Volume.
Tanda “<<” berfungsi
sebagai penghubung yang diartikan untuk memasukkan data ke dalam suatu perintah
eksekusi. Misalnya pernyataan std::cout << "Lebar = "
<< A.ambil_lebar() << std::endl; berarti hasil eksekusi objek A
terhadap metode ambil_lebar() yang membutuhkan isi dari variabel Lebar akan
diperintahkan untuk tampil ke layar dengan format ganti baris dari hasil
eksekusi di atasnya. Demikian juga untuk baris program lainnya yang mempunyai
format yang sama.
8.
Tanda kurung kurawal ({...}) digunakan untuk menandai bagian
suatu isi kelas, bagian isi metode-metode di dalam kelas (behaviour), serta bagian isi program utama.
9. Tanda titik koma (;) digunakan untuk menandai
akhir penulisan data dan fungsi dalam program. Tanda titik koma tidak digunakan
untuk mengakhiri nama kelas, nama metode, nama perubah akses, serta
inisialisasi program utama.
BAB
V
ENCAPSULATION
A.
Pengertian
Encapsulation
Pengertian dasar dari encapsulation
adalah penyembunyian data dengan membungkus seluruh member dari class
tersebut sehingga nilainya tidak dapat diubah menjadi apa yang tidak diinginkan
atau menyelipkan sebuah proses bisnis didalamnya. Pengertian lainnya adalah
sebuah proses dalam menyatukan data yang kita kelola menjadi sebuah kelompok
tertentu dimana pembentukannya terjadi secara abstrak.
Ecapsulation yaitu merupakan sebuah proses
pengelompokan property & method serta memberikan hak akses kepada property
& method yang menyebabkan property hanya dapat diakses melalui method
accessor dan tidak dapat di rubah tanpa melalui prosedur yang seharusnya yang
diatur pada method mutator.
Di dalam OOP encapsulation berbentuk class
yang terdiri dari property & method yang mempunyai hak akses tertentu
terhadap environment/lingkungannya, yang biasa disebut Acces Modifier.
Encapsulation biasa dilambangkan dengan penggunaan accessor dan mutator atau
disebut juga dengan metode get dan set. Dinamakan accessor (get) karena metode
ini hanya mengambil tanpa mengubah state dari member tersebut, dan dinamakan
mutator (set) karena metode ini juga mengubah state dari member tersebut.
Method-method ini dideklarasikan sebagai public, sedangkan variable
dideklarasikan sebagai private.
B. Kegunaan
Encapsulation
untuk menjaga
suatu proses program agar tidak dapat diakses secara sembarangan atau di
intervensi oleh program lain. Konsep enkapsulasi sangat penting dilakukan untuk
menjaga kebutuhan program agar dapat diakses sewaktu-waktu, sekaligus menjaga
program tersebut.
C.
Bentuk
Penulisan Encapsulation
Dalam bahasa pemrograman C++, objek
memiliki abstraksi yang bernama class. Di dalam class, kita dapat
membangun "blue print"dari sebuah objek. Pada C++ kita
tidak hanya dapat menggunakanclass untuk membuat abstraksi dari objek,
tetapi kita juga dapat menggunakan struct, mengingat C++ merupakan
superset dari C.
Pada penggunaannya antara class dan struct hanya berbeda pada default member
accessnya, pada struct semua member secara default akan bersifat public,
sedangkan pada class secara default member akan bersifat private. Contoh Bentuk
Penulisan Encapsulation :
class tes{
int angka; // access private
char huruf; // access private
void get_angka(); // access
private
public :
int angka2; // access public
char huruf2; // access public
void get_huruf(); // access
public
};
struct tes{
int angka; // access public
char huruf; // access public
void get_angka(); // access
public
private :
int angka2; // access private
char huruf2; // access
private
void get_huruf(); // access
private
};
Berbicara tentang public dan private, kita
berbicara tentang access spesifier. Access spesifier adalah cara member sebuah
class atau struct diakses. Pada bahasa C++ sebenarnya ada 3 jenis access
spesifier, yaitu public, private, dan protected, tetapi pada pembahasan ini
hanya akan dibahas public dan private, sedangkan protected akan dibahas pada
pembahasan berikutnya.
Access spesifier public
berarti semua member di bawah tanda tersebut akan dapat diakses dari luar
class, sedangkan private hanya dapat diakses oleh method pada class itu
sendiri, misalnya :
class tes{
int angka; // access private
char huruf; // access private
void get_angka(); // access
private
public :
int angka2; // access public
char huruf2; // access public
void get_huruf(); // access
public
};
int main()
{
tes objek1;
objek1.angka2 = 1;
//diperbolehkan karena access public
objek1.get_huruf() // diperbolehkan
karena access public
objek1.angka = 1;
//compile-error karena access private
objek1.get_angka() //
compile-error karena access private
return 0;
}
D.
Contoh Program Encapsulation &
Penjelasannya
Output :
Daftar
Pustaka :
-
http://apinisme.wordpress.com/2012/12/07/kegunaan-pointer/
-
http://ty000.wordpress.com/2010/04/01/kegunaan-pointer/
-
https://jumariyah.wordpress.com/category/pemrograman-c/
-
http://alvarisimm.wordpress.com/2013/11/10/tutorial-c-class-and-object/
-
http://dioirwansyah.wordpress.com/2009/03/18/kelas-dan-objek-dalam-c/
-
http://202.154.59.182/ejournal/files/Class%20C++%20Dasar.pdf
-
http://zegyjib.wordpress.com/matkul/oop2/oop2-inheritance-turunan-atau-pewarisan-c-java-c/
-
http://novadwik.com/2013/04/07/pbo-inheritance-dengan-c/
-
http://www.adityarizki.net/2011/04/tutorial-pemrograman-berorientasi-obyek-dengan-c-polimorfisme-studi-kasus/
-
http://ottooktavianus.blogspot.com/2009/10/encapsulation.html
-
http://afifatullailiya.wordpress.com/2013/04/08/bab-2-encapsulation/
-
http://zegyjib.wordpress.com/matkul/oop2/oop2-encapsulation-c-java-dan-c/
DOWNLOAD VERSI PDF-nya
PASSWORD : gudang-faisal.blogspot.com
Sekian postingan saya kali ini mohon maaf apabila ada kesalahan dalam pengetikan karena saya hanya manusia biasa yang tak luput dari kesalahan maupun dosa. Terimakasih, semoga bermanfaat :)
Wassalamualaikum Wr.Wb