Sabtu, 09 Januari 2010

Polymorphism

Polymorphism berarti “mempunyai banyak bentuk” juga merupakan salah satu sifat class yang memungkinkan sebuah method mempunyai nama yang sama, namun memiliki aksi yang berbeda.
Polymorphism adalah pemikiran bahwa objek dinamis suatu class dasar dapat berperilaku seperti class turunan. Jika objek menunjuk class dasar maka ia perilaku seperti class dasar, dan jika ia menunjuk class turunan ia akan berperilaku seperti class turunan.
Dalam hal ini obkjek memiliki beberapa bentuk, tergantung ia menunjuk kemana. Dalam hal ini suatu objek atau class dan perubahan perilakunya adalah dari kelas dasar ke kelas turunan, tidak bisa objek kelas turunan menunjuk ke kelas dasar. Polimorfisme dimungkinkan karena adanya mekanisme ikatan dinamis, ikatan ini adalah ikatan yang terjadi ketika program dijalankan (run-time), ikatan yang terjadi pada saat compiling disebut ikatan dinamis. Ikatan dinamis hanya akan terjadi antara suatu objek dinamis dengan metode yang dinamis juga, dalam hal ini metode virtual (maya)


Pada dasarnya ada 2 tipe polymorphism, yaitu:
1. Static atau trivial
merupakan, function overloading (penggunaan kembali nama fungi yang sama tapi dgn argumen yang berbeda) yang terbagi dalam 3 signature yaitu:
- Jenis Array
- Letak Array
- Type Array

Contoh function overloading :
void tambah (int a, int b);
void tambah(float d, float c);
2. Dynamic atau true
Merupakan function overriding (sebuah fungsi dalam class turunan yang memiliki nama, return type argumen function yang sama dengan fungsi dalam class induk). Menggunakan virtual method.

Pure Virtual Method (tanpa function body)
contoh : virtual void jalan() = 0;

Squasi Virtual Method (ada function body)
contoh : virtual void info() {;}


Contoh codingan polymorphism

#include <>

/* class DENGAN virtual( POLYMORPHISME)==========*/
class tbujursangkar_vir

{
protected :
double panjang; //panjang sisi bujur sangkar


public:
tbujursangkar_vir(double pj) {panjang = pj;}
double panjangf() {return panjang;}
virtual double lebarf() {return panjang;}
double luasf() {return panjangf()*lebarf();}
double keliling() {return 4*panjang;}
};

class tpersegipanjang_vir:public tbujursangkar_vir
{
protected:
double lebar; //lebar persegi panjang
public:
tpersegipanjang_vir(double pj, double lb):
tbujursangkar_vir(pj) {lebar = lb;}
virtual double lebarf() {return lebar;}
double keliling() {return 2*panjang+2*lebar;}
};

//=========================================main===============================//
void main()
{
double a,b;

cout< cout<

tbujursangkar_vir *bujur = new tbujursangkar_vir(a);
tpersegipanjang_vir *persegi = new tpersegipanjang_vir(a,b);

cout<<"===========hasil pada class tbujursangkar================"< cout<<"panjang = "< cout<<"lebar = "< cout<<"luas = "< cout<<"keliling = "<<

cout<<"===========hasil pada class tpersegipanjang================"< cout<<"panjang = "< cout<<"lebar = "< cout<<"luas = "< cout<<"keliling = "<

delete bujur;
delete persegi;
system("pause");
}

Jumat, 18 Desember 2009

Inheritance

Menurut bahasa, inheritance adalah warisan atau pewarisan. Sebuah pewarisan berarti ada pewaris dan yang mewarisi. Dalam PBO, inheritance atau pewarisan adalah suatu keadaan dimana suatu kelas baru mewarisi seluruh variabel atau data dan method yang dimiliki oleh kelas yang menjadi induknya (parents). Suatu kelas bisa dikatakan mewarisi sebuah kelas lain apabila kelas tersebut memliki semua variabel dan method yang dimiliki kelas induknya dan dia sendiri mememiliki variabel dan atau method sendiri yang tidak dimiliki olek kelas induk.

Contoh pewarisan yang sederhana misalnya kelas burung. Sebuah kelas burung mempunyai antara lain :

variabel :

* warna bulu
* panjang sayap
* makanan

method :

* bisa terbang
* bisa bertelur
* bisa bersuara

kemudian kita mendefinisikan lagi sebuah kelas baru yang mewarisi variabel dan method dari kelas burung, misalnya kelas burungLiar. Maka kelas burungLiar akan mempunyai semua variabel dan method yang dimiliki oleh kelas burung disamping dia sendiri mempunyai variabel dan method sendiri yang tidak dimiliki oleh kelas burung. Jadi seluruh variabel dan method kelas burungLiar misalnya sebagai berkut :

variabel :

* warna bulu
* panjang sayap
* makanan
* habitat ( variabel hanya milik kelas burungLiar )

method :

* bisa terbang
* bisa bertelur
* bisa bersuara
* bisa berkoloni ( method hanya milik kelas burungLiar )

Tetapi tidak semua variabel atau fungsi dapat diwariskan ke kelas turunan. Variabel atau fungsi yang di deklarasikan public akan diwariskan kepada turunan, sedang variabel atau fungsi yang dideklarasi private tidak akan diwariskan ke kelas turunnya. Variabel yang hanya bisa diakses oleh turunannya biasanya dideklarasikan secara protected.

Contoh program :

#include "iostream.h"
class PersegiPanjang
{
protected :
int panjang;
int lebar;
public :
PersegiPanjang(int pj, int lb)
{
panjang = pj;
lebar = lb;
}
int Panjang()
{
return panjang;
}
int Lebar()
{
return lebar;
}
int Keliling()
{
return 2*(panjang+lebar);
}
int Luas()
{
return panjang*lebar;
}
void Skala(float sk)
{
panjang *= sk;
lebar *= sk;
}
void TulisInfo()
{
cout<<"Panjang : "<< panjang << endl
<<"Lebar :"<< lebar < <<"Keliling :"<< Keliling() << endl
<<"Luas :"<< Luas() << endl;
}
};


Simpan file di atas dengan nama PersegiPJ.Cpp
Kemudian lanjutkan pembuatan program berikut pada halaman baru:


// penggunaan kelas persegi panjang
#include "PersegiPJ.Cpp"
void main()
{
PersegiPanjang pp1(10,5);
pp1.Skala(2);
pp1.TulisInfo();
cin.get();
cin.sync();
cin.clear();
}

Senin, 07 Desember 2009

Array & Pointer of Class

Array

Suatu Objek bisa didefinisikan dalam Array.
Misalkan : Mobil merk_mobil[10];
maksudnya adalah kita membuat suatu array yang berisi 10 objek kelas mobil
Berbeda dengan array biasa, array of class tau sizenya sendiri. Selain itu array of class dapat dibandingkan dengan '==' atau '!='

Pointer

Untuk mendefinisikan suatu pointer yang menunjuk ke objek, kita bisa menggunakan suatu pointer of class. Pointer of class berguna sebagai debugging function yang mengakses 2 bytes pertama dari data member tiap objek dan mengambil nilainya.
Misalkan : Mobil *matic;

Seperti pointer yang sudah kita pelajari, tanda '*' diletakkan di depan nama variable pointer. Lalu untuk mendefinisikan pointer 'matic' tersebut untuk menunjuk suatu objek dinamis yang berkelas Mobil, kita bisa menggunakan statement :
matic = new Mobil();
New disini memiliki kegunaan yang sama dengan malloc dalam pendefinisian struct.

Contoh dalam program :

#include "constrea.h"

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;
}


Contoh dalam program, pointer of class sebagai debugging function :

#include "constrea.h"

class Pointer
{
public: int data1, data2;
int value;
int id;
void foo1() {}
void foo2() {}
};

void SetValue(Pointer& object)
{
int Pointer::*ip = &Pointer::value;
object.*ip = 3;
}

void SetId(int *member)
{
*member = 7;
}

void main()
{
int Pointer::*ip1 = &Pointer::data1;
int Pointer::*ip2 = &Pointer::data2;
Pointer obj1;

obj1.*ip1 = 5;
obj1.*ip2 = 10;

SetValue(obj1);

int *pointer1 = &obj1.value;
int *pointer2 = &obj1.id;

SetId(pointer1);
SetId(pointer2);
}

Senin, 30 November 2009

Friend Function & Operator Overloading dalam Class

Friend Function

Friend function adalah fungsi yang di definisikan di luar dari class’s scope namun memiliki hak akses ke semua anggota dari class tersebut.

Untuk mendeklarasikan sebuah friend function, kita menggunakan keyword 'friend'. Deklarasikan prototype dari friend function di class yang public.
Contoh: friend void setX( Count &, int );

Setelah class selesai, baru kita dapat membuat friend function di bawah class tersebut dan dapat dipanggil di void main untuk mengakses data anggota dalam class.


Contoh dalam kodingan program sederhana:


Operator Overloading

Pemakaian Operator overloading dalam class ditujukan untuk mengoperasikan data pada object menjadi mudah.

Untuk bisa menggunakan operator overloading, kita menggunakan keyword 'operator'
contoh : friend void operator -(data &a, data &b);

Contoh dalam kodingan program sederhana :


Tetapi tidak semua operator dapat dibuat menjadi operator overloading, antara lain :

Operator

Kegunaan

Contoh

. (dot)

Access ke member class

cin.getline

.* (dot asterix)

Pointer ke member class

Object.*member

:: (scope)

Akses ke data / member function

Class::member

?: (ternary)

seleksi kondisi

C=(a>b)?a:b

sizeof

Memperoleh ukuran tipe data

Sizeof (int)

Jumat, 30 Oktober 2009

Encapsulation dalan C++

Tiga karakteristik utama dari bahasa yang berorientasi objek adalah
• Encapsulation
• Inheritance
• Polymorphisme.

Tiga ciri diatas mendukung reusability, yang merupakan salah satu factor penentu kualitas software.

C++ mendukung karakteristik encapsulation dengan menggunakan konsep class. Setelah terbentuk, maka class akan bertindak sebagai entitas yang tenkapsulasi.

Dengan adanya konsep inheritance, maka C++ mendukung ide penggunaan ulang suatu object

encapsulation adalah pembungkusan struktur data dengan fungsi yang berkatian dengan struktur data tersebut menjadi sebuah class. Encapsulation bisa juga berarti pengelompokan data dan functions menjadi satu dalam sebuah class.

Ada 3 akses level :

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 : member function yang pertama kali di kerjakan ketika satu object di create
Destructor : member function yang di kerjakan ketika satu object di destroy / death (sebagai pengakhiran object)

Contoh Class :

class orang
{
private : char nama[35];
int umur;
public : orang() //constructor
{
ctk<umur = 0; //set umur 0 tahun
}
~orang() //destructor
{
ctk<}

Kamis, 22 Oktober 2009

Abstract Data Type (ADT)

ADT adalah tipe data yang merupakan hasil imajinasi kita dengan memberikan beberapa batasan domain maupun operasinya. Contoh : usia,daftarnilai.
ADT juga bisa diartikan dengan kumpulan nilai dan kumpulan operasi yang diizinkan.
AST memungkinkan pendefinisian suatu himpunan nilai di variable disertai operasi-operasi yang izinkan padanya. ADT menyatakan prilaku suatu variabel.


Modul Program

-Modul pada bahasa pemrograman berorientasi objek, diimplementasikan dengan kelas dengan sekumpulan layanan berupa metode publik yang dapat dipanggil oleh pemakai kelas
-Pada bahasa prosedural, modul diimplementasikan sebagai struktur, dan sekumpulan operasi berupa prosedur dan fungsi yang dipanggil pemakai modul lewat pemanggilan prosedur dan fungsi.

Abstraksi data

Persoalan abstraksi data, yaitu:
-struktur data seharusnya menjadi satu bagian internal yang tersembunyi
-pemakai modulu tidak perlu mengetahui struktur data yang digunakan untuk menginplementasikan suatu modul
-pemakai modul hanya diberikan gambaran perilaku, bukan struktur internal dari modul
-fokus pada perilaku objek, membentuk basis pemrograman berorientasi objek
-Abstraksi data memungkinkan kita memperluas bahsa pemrograman dengan tipe data baru
-abstraksi data memungkinkan kita mengabstraksikan rincian-rincian cara data diimplementasikan, menjadi bagaimana objek-objek berprilaku
-abstraksi data berisi sekumpulan objek
-abstraksi data pada prinsipnya merupakan dasar pemrograman berorientas objek (OOP)

Tujuan ADT

-ADT memisah struktur penyimpanan (lokasi memori) dari perilaku
-ADT menyembunyikan informasi atau pengkapsulan, yaitu :
-perubahan implementasi ADT tidak mengubah teks program lain bila
antarmuka tidak berubah

-pemakaian dan pembuatan ADT dapat dilakukan terpisah, hanya perlu
kesepakatan antarmuka pemakaian ADT

-ADT merupakan sarana pemrograman modular dan menjadi landasan pembentukan tim pemrograman
-ADT merupakan sarana untuk membuat modul-modul yang menyerupai dengan konsep-konseo yang ditemukan pada domain persoalan

pembuatan ADT
tahap pembuatan ADT
-spesifikasi
-implementasi
-pemrograman

ADT Homogen adalah Array, yang mampu menampung beberapa variabel yang memiliki tipe data yang sama.
ADT Heterogen adalah Struct, yaitu tipe data bentukan yang berisi kumpulan variabel dengan tipe data sama atau berbeda, struct juga dapat menyimpan variabel array dan struct (disebut juga nested struct, yang berarti struct dalam struct).

Berikut contoh dan cara mendeklarasi sebuah struct:
struct tgl {
int hari;
int bulan;
int tahun;
}

struct tgl Tanggal;

Jumat, 16 Oktober 2009

I/O Stream dalam C++

Bahasa C memiliki rutin-rutin untuk proses input/output yang dideklarasikan di header file stdio.h. proses input/output versi C ini masih dapat digunakan di C++. Namun demikian C++ mengenalkan teknik baru untuk proses input/output, yaitu yang dinamakan iostreams atau disingkat menjadi streams saja. Hampir semua fungsi yang terdapat di stdio.h dapat dikonversikan ke dalam bentuk streams. Kelebihan streams dibandingkan input/output C adalah fleksibilitasnya dalam melakukan format input/output dan juga kemampuannya yang mendukung konsep operator berbeban lebih (overloaded operator).

Streams adalah suatu abstraksi untuk menangani aliran data dari suatu sumber (producer) ke tujuan (consumer) lain. Baik sumber atau tujuan dapat berupa buffer di memori, string, file atau layar monitor. C++ mendeklarasikan kelas untuk strem di beberapa header file, yaitu;

* iostream.h (I/O umum)
* constrea.h (I/O ke console)
* strstrea.h (I/O ke string)
* fstream.h (I/O ke file)

Stream untuk Output
------------------------------

Untuk melakukan proses keluaran (output) digunakan operator <<. Bentuk umumnya adalah : objek_stream <<>

bentuk dikiri tanda << (objek_stream) adalah salah satu objek dari kelas ostream. Bentuk di kanan <<>

#include "iostream.h"

void main()

{

cout << “Bahasa” << “ pemrograman C++” << ‘\n’; } seperti tipe data skalar yang ada di C++ sudah mendukung stream. Dengan demikian identifier yang memiliki tipe data skalar dapat dituliskan ke output dengan stream. Contohnya : #include "iostream.h" void main() { int x=10; float y=20.0; cout << “x = ” << y =" “">

}

keluaran program diatas :

x = 10 y = 20

stream output juga dapat menuliskan alamat suatu identitas, misalnya :

#include "iostream.h"

void main()

{

int x;

cout << &x; // menuliskan alamat variabel x } keluaran program diatas : 0×8f98fff4 Format pada Output dengan fungsi Stream output dapat diformat seperti halnya output pada fungsi printf. Untuk mengubah format output, yang harus dilakukan adalah mengubah beberapa bit flag yang ada di kelas ios. Ada beberapa macam flag yang terdapat di kelas ios yaitu : Tabel Daftar Flag Untuk Format Pada Output

Flag

Bit

Keterangan

skipws

0

Mengabaikan karakter spasi putih (white space) pada saat proses input

left

1

Mengatur output menjadi rata kiri

right

2

Mengatur output menjadi rata kanan

internal

3

Output disisipi karakter pengisi (padding character) setelah tanda positif atau tanda basis bilangan

dec

4

Menampilkan bilangan dalam basis desimal

oct

5

Menampilkan bilangan dalam basis oktal

hex

6

Menampilkan bilangan dalam basis heksadesimal

showbase

7

Menampilkan basis bilangan saat suatu bilangan ditampilkan (untuk heksadesimal dengan tambahan “0x” dan untuk oktal dengan tambahan “O”)

showpoint

8

Menunjukan tanda titik pada output bilangan real

uppercase

9

Membuat output bilangan heksadesimal menjadi huruf capital

showpos

10

Menunjukan tanda ‘+’ pada output bila suatu bilangan lebih dari 0

scientific

11

Menggunakan cara penulisan eksponensial untuk bilangan real (format : xxxE()xxx)

fixed

12

Menggunakan format bilangan desimal untuk bilangan real

unitbuf

13

Mengosongkan semua stream

stdio

14

Mencegah masalah yang bisa terjadi bila digunakan stream dan stdio secara bersamaan



Stream untuk Input
----------------------

Penggunaan steram untuk input mirip dengan output tetapi yang digunakan adalah karakter >>. Argumen yang digunakan tetap sama, yaitu di kiri adalah objek stream untuk input dan dikanan adalah data yang akan dikenai operasi input. Pada proses input dikenal istilah spasi putih (white space), yaitu karakter pemisah antara satu identifier dengan identifier yang lain. Deklarasi spasi putih ini terletak di header file ctype.h. untuk mengetahui sebuah karakter merupakan spasi putih atau bukan digunakan fungsi isspace (int). Ada beberapa karakter yang biasanya dikenali sebagai spasi putih, yaitu spasi biasa, tab, carriage return, new line, vertical tab, formfeed (kode ASCII dari 09h sampai dengan 0Dh, 20h).


#include "iostream.h"

void main()

{

int x, y;

cout << “Masukan dua buah bilangan bulat : “; cin >> x >> y;

cout << “Bilangan itu adalah : “ << s =" new">> s;

cout << “String yang anda masukan : ” <<>> s;

Dengan

cin.getline (s, 100);

sehingga sekarang keluaran programnya :

Masukan sebuah string : Belajar pemrograman C++

String yang anda masukan : Belajar pemrograman C++