Pages

Jumat, 20 Juni 2014

MENGENAL C++

C++ Logo


Assalamualaikum wr.wb
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 :
Description: http://img18.imageshack.us/img18/5953/hirarki.png





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 istilahoverloadingOverloading 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 :
Description: cpp

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