Selasa, 15 Desember 2009

Inheritance (Lanjutan)

Pada Inheritance yang pertama, saya membahas tentang single inheritance. Pada bagian ini, saya akan membahas tentang multiple inheritance. Multiple Inheritance adalah sebuah kelas yang diturunkan dari beberapa kelas induk. Kelas turunan tersebut mewarisi karakteristik-karakteristik yang dimiliki oleh kelas-kelas induknya. Setiap kelas induk yang akan mewarisi karakteristiknya, dipisahkan dengan tanda koma(,) dan masing-masing kelas induk harus didahului dengan jenis aksesnya terlebih dahulu (private, protected, public).

Contoh:

class Pegawai
{ protected:
char NIP[10], Nama[30];
};
class Pendidikan
{ protected:
char Tingkat[20], Sekolah[80];
};
class Manajer : public Pegawai, public Pendidikan //Multiple Inheritance
{ private:
char Titel[20], Telpon[20];
};
class Peneliti : public Pegawai, public Pendidikan //Multiple Inheritance
{ private:
int Publikasi;
};
class Satpam : public Pegawai //Single Inheritance
{ };


Construcor dan Destructor pada Kelas Turunan
Constructor untuk kelas turunan perlu dibuat untuk melakukan inisialisasi kelas itu sendiri dan kelas induknya. Jika Constructor kelas induk memiliki parameter (argument), maka parameter Constructor kelas induk tersebut harus dimasukkan dalam Constructor kelas turunan. Destructor kelas turunan dijalankan dengan urutan yang terbalik dengan urutan Constructor, yaitu Destructor kelas turunan dijalankan terlebih dahulu baru destructor kelas induknya. Apabila kelas turunan memiliki lebih dari satu klas induk, setelah menjalankan destructor kelas turunan kemudian destructor kelas induk terakhir dijalankan sampai destructor kelas induk pertama dijalankan (sesuai dengan urutan terbalik dari penurunan kelas-kelas induk di dalam definisi kelas turunan tersebut).

Rabu, 09 Desember 2009

Inheritance

Inherintance adalah proses pembentukan satu kelas baru (derived class) dari kelas lainnya (based class). Inheritance merupakan salah satu ciri dari object oriented programming. Dengan adanya inheritance, hal ini memungkinkan hal yang disebut dengan reusability (pendauran ulang suatu class agar dapat digunakan lagi di kedepannya). Kelas turunan mewarisi semua kemampuan yang dimiliki oleh kelas induk nya, dari data members maupun methods yang dideklarasikan dengan public atau protected (apabila private, maka tidak akan didapatkan oleh kelas turunan). Hubungan antar kelas turunan dan kelas induknya akan membentuk suatu hirarki kelas. Dalam OOP, perancangan hirarki kelas merupakan hal yang utama.

Ada 2 jenis inheritance, yaitu single inheritance dan multiple inheritance. Single berarti 1 kelas induk menhasilkan 1 atau lebih kelas turunan. Sedangkan multiple berarti 2 atau lebih kelas induk menhasilkan 1 atau lebih kelas turunan.

Pada perancangan hirarki kelas, kelas induk merupakan kelas yang mempunyai sifat (property) yang paling umum atau yang harus dimiliki oleh seluruh kelas turunannya. Sedangkan sifat yang khusus dimiliki oleh kelas-kelas turunannya, dimana sifat-sifat khusus tersebut digunakan untuk meningkatkan sifat atau kemampuan dari kelas induknya.

Contoh single inheritance:
class Mobil
{ protected: int roda;
};
class Kijang : public Mobil
{ protected: char tipe[20];
};

Anggota kelas induk dapat diakses hanya oleh anggota kelas turunan apabila jenis akses dari anggota kelas induk adalah public atau protected (private tidak dapat diakses).
Anggota protected suatu kelas tetap tidak dapat diakses oleh fungsi / kelas lainnya dalam program yang tidak menjadi anggota kelas turunan tersebut.

Selasa, 01 Desember 2009

Array & Pointer of Class

Array pada C++ tidak terdapat range checking sehingga apabila kita compile, tidak akan ada error/warning sama sekali, tetapi ketika kita melakukan pengisian lebih dari array yang telah disediakan, maka akan terjadi error. Dan juga dalam penggunaannya, kita tidak dapat mengbandingkan yang 1 dengan yang lainnya (kecuali menggunakan function yang telah ada atau membandingkan isi array 1 demi 1) dan juga kita tidak dapat mengisi array secara langsung semuanya (harus mengisi 1 demi 1).
Sedangkan apabila kita mengimplemantasikan Array pada Class, maka akan dilakukan range checking terlebih dahulu. Jadi apabila terdapat isi array yang lebih, pada waktu dicompile akan terjadi warning/error. Dengan penggunaan Array pada Class, maka array dapat langsung dibandingkan dengan yang lainnya.
Pada implementasi Array pada class, juga dapat digunakan copy constructor agar dapat mengcopy object yang dibutuhkan.
Implementasi Pointer pada Class, apabila kita menggunakan Array, maka tempat yang disediakan akan terbatas sesuai dengan yang sudah kita alokasikan, tetapi apabila kita menggunakan pointer, kita dapat menggunakan sesuai kebutuhan kita. Alokasi memory pada array adalah static (sesuai dengan yang dialokasikan pada awal, apabila kurang, kita harus mengalokasikan lebih pada awalnya), sedangkan pada pointer alokasinya adalah dynamic (di mana alokasi memory sesuai dengan yang kita butuhkan).

Contoh implementasi pointer pada Class:
#include
class First
{ public:
int value;
First() {value = 0;}
int GetValue() {return value;}
};

class Second
{ int id;
public:
First *obj1;
Second() {id = 0;}
int GetName(){ return id;}
};

int main()
{ Second Obj2;
int num;
num = Obj2.GetName();
return 0;
}

Selasa, 03 November 2009

Class (lanjutan)

Dalam menggunakan class dengan konsep enkapsulasi, sebaiknya untuk data member dimasukkan ke dalam private, agar data hanya bisa diakses oleh class tersebut. Sedangkan untuk function, diletakkan di public. Untuk data member, kenapa dimasukkan ke dalam private? Agar nilai-nilai dari data member tidak bisa diubah selain dari dalam class tersebut. Tapi kita tetap bisa mengambil/mengubah nilai yang berada di dalamnya dengan menggunakan setter dan getter. Berikut adalah contohnya:

#include
class data
{
private:
int no;
public:
int getNo() // getter
{
return(no);
}

void setNo(int x) // setter
{
no=x;
}

};


void main()
{
data obj;
obj.setNo(5);
cout << "Nilai dari No adalah: " << obj.getNo;
cout << endl;
cin.get();
}

Sebuah class dapat berisi object dari class lain (hal ini disebut dengan nested object). Member object disusun berurutan. Contohnya adalah class dengan member objects (host objects) berada setelah deklarasi class host object tersebut (perlu class prototype).

class B; // class prototype
class A
{ public: int i;
}
class B
{ public: int j;
A obj_A; //host object
}
B obj_B; // create object class B
Obj_B.Obj_A.i = 0; // inisialisasi member class A via object B


Tiap class member function memiliki hidden parameter -> pointer "this". This menunjuk kepada individual object. Pointer this dapat digunakan secara explicit.
Contoh penggunaan this:

class data
{
private:
int no;
public:
int getNo() // getter
{
return(no);
}

void setNo(int no) // setter
{
this->no=no; //dimaksudkan agar no yang berada di dalam class yang mendapat nilai
}

};

Jumat, 30 Oktober 2009

Class

Setelah membahas struct pada blog saya yang lalu, sekarang saya akan membahas class. Class sama seperti struct (mengelompokan data dan function ke dalam sebuah class/struct), perbedaannya adalah batasan aksesnya memiliki default private (sedangkan struct mempunyai default akses public).
contoh pembuatan class:
class Product
{ public:
int Prod_id;
char Prod_Name;
float Price;
int Stock_qty;
};
Product Brg1;

3 Access Level Class
Public:
Bagian class yang dapat diakses oleh umum baik dari dalam maupun dari luar class.
Protected:
Bagian class yang dapat diakses oleh linkungan internal class dan class turunannya.
Private:
Bagian class yang hanya dapat diakses oleh linkungan internal class itu sendiri.

Constructor dan Destructor
class Time
{ private:
int hour;
int minute;
int second;
public:
Time(); //constructor
void setTime( int, int, int );
void printUniversal();
void printStandard();
~Time(); //destructor
};

Constructor adalah member function yang pertama kali di kerjakan ketika satu object di create. Nama constructor harus sama dengan nama classnya dan digunakan untuk inisiasi object. Minimal harus ada 1 constructor dan bisa dioverload. Apalagi tidak ada constructor, maka compiler akan mengenerate default constructor untuk class tersebut

Destructor adalah member function yang di kerjakan ketika satu object di destroy / death (sebagai pengakhiran object). Nama destructor sama dengan nama class nya hanya ditambahkan tanda tilde (~) di awalannya dan digunakan untuk de-inisialisasi/dealokasi memori. Destructor hanya ada 1.


Deklarasi Object Class
Time timeObject; //object biasa
Time timeArray[ 10 ]; // object array
Time *timePtr; //object pointer
Time &timeRef = timeObject; // object reference

Kamis, 22 Oktober 2009

Struct

Struct merupakan jenis user define data type sehingga kita bisa meninisiasikan sebuah variabel dengan bermacam-macam bentuk data tidak seperti array yang hanya 1 jenis data type saja.
Cara mendeklarasikan struct adalah sebagai berikut:
struct Time // struct tag
{
int hour; // struct member
int minute; // struct member
int second; // struct member
};
dan cara untuk mendeklarasikannya adalah sebagai berikut:
Time timeObject; //variable biasa
Time timeArray[ 10 ]; // variable array
Time *timePtr; //variable pointer
Time &timeRef = timeObject; //reference

Cara untuk mengakses member struct adalah dengan menggunakan .(dot) apabila menggunakan variable basa, contohnya adalah cout << timeObject.hour;
Apabila menggunakan variable pointer/reference, digunakan ->(arrow) untuk mengakses datanya, contohnya adalah cout << timePtr->hour;

Nested Struct adalah struct yang terdapat didalam struct. Contohnya adalah sebagai berikut:
struct Date
{
int tgl;
int bln;
int thn;
};
struct Employee
{
int ID;
int Name;
Date hire;
};

Sabtu, 17 Oktober 2009

Set IOS Flags

Dalam C++, kita dapat mengatur penampilan hasil program kita dengan menggunakan cout.setf. Berikut ini adalah adalah syntax syntax yang digunakan dalam menggunakan cout.setf:
cout.setf(ios::showpos); -> Memberikan tanda + / - pada output
contoh :
double x=5.35;cout.setf(ios::showpos);
cout << x;
hasil : +5.35

cout.setf(ios::dec); -> Mengubah bilangan menjadi basis 10 (desimal)
contoh :
int bil = 125; cout.setf(ios::dec);
cout << bil;
hasil : 125

cout.setf(ios::hex); -> Mengubah bilangan menjadi basis 16 (hexadesimal)
contoh :
int bil = 125; cout.setf(ios::hex);
cout << bil;
hasil : 7d

cout.setf(ios::oct); -> Mengubah bilangan menjadi basis 8 (octal)
contoh :
int bil = 125; cout.setf(ios::oct);
cout << bil;
hasil : 175

cout.setf(ios::fixed); -> Menampilkan bilangan nol di belakang koma (apabila ia double)
contoh :
double x=5.35;cout.setf(ios::fixed);
cout << x;
hasil : 5.350000

cout.setf(ios::scientific); -> Menampilkan bilangan nol di belakang koma (apabila ia double)
contoh :
double x=5.35;cout.setf(ios::scientific);
cout << x;
hasil : 5.350000e+00

cout<-> Menyiapkan tempat sebanyak variabel x.default rata kanan
contoh : double x=5.35; cout << x;
hasil : _5.35

cout.setf(ios::showpos | ios::internal); -> Menampilkan tanda positif atau negatif di kanan
contoh :
double x=5.35; cout.setf(ios::showpos | ios::internal);
cout << setw(10) << x;
hasil : + _____5.35

cout.setf(ios::right); -> Membuat rata kanan
contoh :
int bil=125; cout.setf(ios::right);
cout << bil;
hasil : __125

cout.setf(ios::left); -> Membuat rata kiri
contoh :
int bil=125; cout.setf(ios::left);
cout << setw(5) << bil;
hasil : 125

cout.setf(ios::hex | ios::uppercase); -> Mengubah A-F menjadi huruf besar pada bilangan hexadesimal
contoh :
int bil = 125; cout.setf(ios::hex | ios::uppercase);
cout << bil;
hasil : 7D

cout.setf(ios::showbase | ios::hex); -> Untuk menunjukkan base karakter untuk bilangan octal atau hexa
contoh :
int bil = 125; cout.setf(ios::showbase | ios::hex);
cout << bil;
hasil : 0x7d

cout.setf(ios::showpoint); -> Menunjukkan desimal point untuk semua float
contoh :
float b=3; cout.setf(ios::showpoint);
cout << b
hasil : 3.00000

Untuk menghentikan cout.setf, kita dapat menggunakan cout.unsetf.

Jumat, 09 Oktober 2009

Recursive Function

Pertama-tama sebelum kita masuk ke dalam recursive function, sebenarnya, function itu apa sih?
Function adalah membagi program ke dalam komponen-komponen program (modularisasi program) agar program dapat lebih mudah di manage. Biasanya hal ini disebut dengan modularisasi programming. Function dipanggil dengan cara memanggil function namenya. Analoginya adalah sebagai berikut Boss (main program) yang meminta anak buahnya untuk mengerjakan sesuatu (function) dan melaporkan (return) hasilnya.

Sekarang kita masuk ke dalam recursive function. "Sebenernya recursive function itu apa sih?"
Recursive function adalah sebuah function yang memanggil dirinya sendiri dan hanya dapat menyelesaikan base case saja dan apabila tidak ada base case, maka masalah akan dipecahkan ke masalah yang lebih kecil dan kemudian function akan bekerja pada masalah yang lebih kecil tersebut dan pelan-pelan masalah-masalah yang kecil tersebut akan menjadi base case sehingga dapat dipecahkan.

"Kelebihan dan kekurangan dari recursive function apa ya?"
Kelebihan dari recursive function ini adalah kita dapat membuat function yang lebih singkat apabila dibandingkan dengan function yang biasa (iteration function).
kekurangannya adalah recursive function banyak memakan memory dan terkadang apabila nilai yang dikerjakan oleh function tersebut sangat besar, maka kerjanya akan menjadi lambat jika dibandingkan dengan function yang biasa (iteration function).

Contoh dari recursive function adalah sebagai berikut:
Mencari deret fibonaci

long fibonacci( long n )
{
if ( n == 0 || n == 1 ) // base case
return n;
else
return fibonacci( n - 1 ) + fibonacci( n – 2 );
}

Minggu, 20 September 2009

C++

“Eh lu tau ga cara pake C++?” “Hah? C++? Apaan tuh? Game baru?”

Mungkin banyak sekali orang yang tidak tahu tentang C++. Memangnya, C++ itu apa sih? Di sini, saya akan menjelaskan sedikit mengenai C++ dan kemudian apa sih karakteristik C++. Saya tidak mungkin menjelaskannya semua dikarenakan dunia C++ sangatlah luas. Mari kita mulai dengan apa sih C++ itu.

C++ adalah bahasa pemrograman yang mempunyai multi-paradigma, bahasa yang terstruktur dan merupakan bahasa pemrograman yang multi-purpose. C++ merupakan bahasa pemrograman tingkat tengah karena merupakan gabungan dari bahasa pemrograman tingkat tinggi dan tingkat rendah. C++ diciptakan dan dikembangkan oleh Bjarne Stroustrup pada tahun 1979 yang merupakan pemgembangan dari C dan nama aslinya adalah “C with Classes” yang kemudian diganti dengan mana C++ pada tahun 1983. Contoh server yang menyediakan compiler C++ adalah Microsoft, GNU Project, Intel, Borland, dan lain-lain. Penambahan karakteristik pada C adalah penambahan classes, virtual functions, operator overloading, multiple inheritance, templates, dan exception handling. C++ digunakan dalam industri software dan masih merupakan bahasa yang popular dalam pemrograman. Contoh bidang-bidang yang menggunakan C++ adalah system software, aplikasi software, embedded software, video games, dan lain-lain.

“Kenapa sih namanya harus C++? Kan awalnya namanya “C with Classes”?”

Pada awalnya, namanya memanglah C with Classes, tetapi pada tahun 1983, Rick Mascitti mengganti namanya menjadi C++ dan mulai digunakan sejak mulai tahun 1993. Kenapa C++? Kenapa tidak Evoluted C atau nama lainnya? Dalam pemrograman dalam C maupun C++, ++ merupakan penambahan nilai 1, contohnya adalah sebagai berikut: i++; yang berarti bahwa nilai variable i ditambahkan nilainya dengan 1, sehingga apabila nilai variable i yang awalnya adalah 1, menjadi 2. ++ (dibaca plus plus) adalah increment, penambahan nilai, sehingga C++ berarti adalah C yang telah ditambahkan nilai-nilainya.

Berikut ini adalah karakteristik dari C++:

1. C++ merupakan bahasa pemrograman yang terstruktur sehingga penggunaannya sangat effisien dan juga mudah digunakan seperti sama halnya dengan C

2. C++ mensupport beberapa programming styles seperti procedural programming, data abstraction, object-oriented programming, and generic programming

3. C++ memberikan kebebasan pada programmer untuk memilih, walaupun pilihannya bisa saja salah

4. C++ cocok dengan C sehingga program yang kita buat di C, dapat dijalankan di C++

5. C++ tidak mempunyai fungsi yang tidak bersifat tidak general-purpose

6. C++ tidak mempunyai fungsi yang tidak digunakan

7. C++ dirancang untuk bekerja tanpa memerlukan pengetahuan yang tinggi akan bahasa pemrograman (user friendly ya J)

Demikian penjelasan singkat mengenai C++ dari saya. Semoga membantu