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++

Fungsi dan Pointer pada C++

Pemrograman Modular adalah suatu teknik pemrograman di mana program yang biasanya cukup besar dibagi-bagi menjadi beberapa bagian program yang lebih kecil . Modul program dibuat agar suatu program mudah di-manage.

Menurut ketersediaannya, modul dibagi menjadi 2 yaitu modul baru(fungsi yang dibuat oleh si programmer) dan prepackaged(dari standard library)

Dalam C++, modul dibagi menjadi 2 yaitu Fungsi dan Class.


Fungsi
---------


Fungsi/function adalah suatu kumpulan instruksi/perintah/program yang dikelompokkan menjadi satu, letaknya terpisah dari program yang menggunakan fungsi tersebut, memiliki nama tertentu yang unik, dan digunakan untuk mengerjakan suatu tujuan tertentu.

Keuntungan Fungsi
1. Dapat melakukan pendekatan top-down dan divide-and-conquer:
2. Top-down: penelusuran program mudah
3. Divide-and-conquer: program besar dapat dipisah menjadi program-program kecil.
4. Kode program menjadi lebih pendek, mudah dibaca, dan mudah dipahami
5. Program dapat dikerjakan oleh beberapa orang sehingga program cepat selesai dengan koordinasi yang mudah.
6. Mudah dalam mencari kesalahan-kesalahan karena alur logika jelas dan sederhana Kesalahan dapat dilokalisasi dalam suatu modul tertentu saja.
7. Modifikasi program dapat dilakukan pada suatu modul tertentu saja tanpa mengganggu program keseluruhan
8. Fungsi – fungsi menjadikan program mempunyai struktur yang jelas.
9. Dengan memisahkan langkah – langkah detail ke satu atau lebih fungsi – fungsi, maka fungsi utama (main) akan menjadi lebih pendek, jelas dan mudah dimengerti.
10. Fungsi -fungsi digunakan untuk menghindari penulisan program yang sama yang ditulis secara berulang – ulang. Langkah – langkah tersebut dapat dituliskan sekali saja secara terpisah dalam bentuk fungsi. Selanjutnya bagian program yang membutuhkan langkah – langkah ini tidak perlu selalu menuliskannya, tidak cukup memanggil fungsi tersebut.
11. Mempermudah dokumentasi.
12. Reusability: Suatu fungsi dapat digunakan kembali oleh program atau fungsi lain

Sifat-sifat fungsi
1. Nilai fan-in tinggi, artinya semakin sering suatu modul dipanggil oleh pengguna semakin tinggi nilai fan-in
2. Nilai Fan-out rendah, artinya semakin spesifik fungsi suatu modul akan semakin rendah nilai fan-out
3. Memiliki Self-contained tinggi: artinya kemampuan untuk memenuhi kebutuhannnya sendiri

Perancangan Fungsi
Dalam membuat fungsi, perlu diperhatikan:
1. Data yang diperlukan sebagai inputan
2. Informasi apa yang harus diberikan oleh fungsi yang dibuat ke pemanggilnya
3. Algoritma apa yang harus digunakan untuk mengolah data menjadi informasi

Deklarasi fungsi
Deklarasi fungsi diakhiri dengan titik koma . Tipe_data dapat berupa segala tipe data yang dikenal C ataupun tipe data buatan, namun tipe data dapat juga tidak ada dan digantikan dengan void yang berarti fungsi tersebut tidak mengembalikan nilai apapun. Nama fungsi adalah nama yang unik. Argumen dapat ada atau tidak (opsional) yang digunakan untuk menerima argumen/parameter. Antar argumen-argumen dipisahkan dengan menggunakan tanda koma. Suatu fungsi perlu dideklarasikan sebelum digunakan. Untuk alasan dokumentasi program yang baik, sebaiknya semua fungsi yang digunakan dideklarasikan terlebih dahulu Deklarasi fungsi ditulis sebelum fungsi tersebut digunakan

Struktur Fungsi
1. Tubuh Function/Definisi Function (FunctionDefinition)Terdiri dari:
2. function prototype yang disertai dengan kode implementasi dari function yang berisikan statemen/instruksi yang akan melakukan tugas sesuai dengan tujuan dibuatnya fungsi tersebut.

Bentuk Umum Definisi Fungsi
Tubuh fungsi dapat berisi segala perintah yang dikenal oleh C++, pada dasarnya tubuh fungsi sama dengan membuat program seperti biasa. Return bersifat opsional, adalah keyword pengembalian nilai dari fungsi ke luar fungsi, return wajib jika fungsi tersebut mengembalikan nilai berupa tipe data tertentu, sedangkan return tidak wajib jika fungsi tersebut bersifat void.

Kapan menggunakan Deklarasi dan Definisi Fungsi?
Karena prinsip kerja program C++ sekuensial, maka. Jika bagian dari program yang menggunakan fungsi diletakkan sebelum definisi dari fungsi, maka deklarasi dari fungsi diperlukan. Akan tetapi jika bagian dari program yang menggunakan fungsi terletak setelah definisi dari fungsi, maka deklarasi dari fungsi dapat tidak dituliskan.


Class
-------


Class adalah bentuk penyederhanaan dari suatu permasalahan yang berkaitan dengan objek. Kelas juga dapat didefinisikan sebagai sesuatu yang mempunyai data (sifat) dan fungsi (kelakuan). Class bersifat abstrak, oleh karena itu kita harus melakukan instansiasi dari class tersebut, selanjutnya instance (contoh nyata atau perwujudan) dari kelas tersebut juga sering dinamakan dengan objek, sebagi contoh manusia adalah suatu kelas maka instance atau objek dari manusia adalah Andi, Ani, Budi dan yang lainnya.

Dalam C++, kelas dibuat dengan menggunakan keyword class. Adapun bentuk umum pembuatannya yaitu :

Class nama_kelas {
Access_specifier1:
Data_members;
Member_functions;
………
Access_specifier2:
Data_members;
Member_functions;
………
………
};

Untuk membuat implementasi fungsi-fungsi yang terdapat pada suatu kelas, kita menggunakan operator :
Bentuk umum pembuatannya yaitu :


Tipe_data nama_kelas :: nama_fungsi(daftar_parameter) {
Statemen_yang_akan_dilakukan;
……..
}

Sedangka untuk mengakses data atau fungsi yang terdapat di dalam kelas tersebut, kita menggunakan tanda titik. Bentuk umum pembuatannya yaitu :

Nama_instance.data
Atau
Nama_instance.nama_fungsi(daftar_parameter)


Pointer
---------


Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori dari suatu variabel lain. Alamat ini merupakan lokasi dari obyek lain (biasanya variabel lain) di dalam memori. Contoh, jika sebuah variabel berisi alamat dari variabel lain, variabel pertama dikatakan menunjuk ke variabel kedua.

Ada 2 operator pointer yang dikenal secara luas, yaitu operator & dan operator *.
Operator &

Operator '&' merupakan operator alamat. Pada saat pendeklarasian variable, user tidak diharuskan menentukan lokasi sesungguhnya pada memory, hal ini akan dilakukan secara otomatis oleh kompiler dan operating sysem pada saat run-time. Jika ingin mengetahui dimana suatu variable akan disimpan, dapat dilakukan dengan memberikan tanda ampersand (&) didepan variable , yang berarti "address of". Contoh :

ted = &andy;

Penulisan tersebut berarti akan memberikan variable ted alamat dari variable andy. Karena variabel andy diberi awalan karakter ampersand (&), maka yang menjadi pokok disini adalah alamat dalam memory, bukan isi variable. Misalkan andy diletakkan pada alamat 1776 kemudian dituliskan instruksi sbb :

andy = 25;

fred = andy;

ted = &andy;


Operator '*' merupakan operator reference. Dengan menggunakan pointer, kita dapat mengakses nilai yang tersimpan secara langsung dengan memberikan awalan operator asterisk (*) pada identifier pointer, yang berarti "value pointed by". Contoh :

beth = *ted;

(dapat dikatakan:"beth sama dengan nilai yang ditunjuk oleh ted") beth = 25, karena ted dialamat 1776, dan nilai yang berada pada alamat 1776 adalah 25.

Ekspresi dibawah ini semuanya benar, perhatikan :

andy = 25;

&andy = 1776;

ted = 1776;

*ted = 25;

Ekspresi pertama merupakan assignation bahwa andy = 25;. Kedua, menggunakan operator alamat (address/derefence operator (&)), sehingga akan mengembalikan alamat dari variabel andy. Ketiga bernilai benar karena assignation untuk ted adalah ted = &andy;. Keempat menggunakan reference operator (*) yang berarti nilai yang ada pada alamat yang ditunjuk oleh ted, yaitu 25. Maka ekspresi dibawah ini pun akan bernilai benar :

*ted = andy;

Deklarasi Pointer
Seperti halnya variabel lain, variabel pointer juga harus dideklarasikan terlebih dahulu sebelum digunakan. Bentuk umum deklarasi pointer adalah :

Dimana Tipe_data
merupakan tipe dari data yang ditunjuk, bukan tipe dari pointer-nya. Contoh :

1. Mensubstitusikan address sebuah variabel ke pointer dengan memakai address operator &

int x;
int *ptr;
ptr = &x;

2.Mensubstitusikan address awal sebuah array ke pointer

char t[5];
char *ptr;
ptr = t;

3.Mensubstitusikan address salah satu elemen array dengan address operator

char t[5] ;
char *ptr;
ptr = &t[3];

4.Mensubstitusikan address awal character string ke pointer char

char *ptr;
ptr = "jakarta"

5.Mensubstitusikan NULL pada pointer. NULL ada pointer kosong, menunjukkan suatu status dimana pointer itu belum diinisialisasikan dengan sebuah address tertentu.

6.Memakai fungsi MALLOC.