Kamis, 24 September 2009

CONSTRUCTOR

Constructor otomatis dipanggil pada saat objek/instance dibuat dari suatu class.

Berikut ini adalah contoh dari program constuktor dalam bahasa C++


#include"iostream.h"
#include"conio.h"

class Kompleks
{
private:
double re; //nilai real
double im; //nilai imajiner
public:
Kompleks();
void info();
};
void main()
{
clrscr(); //hapus layar
Kompleks a,b; //mendefinisikan objek a
a.info();
b.info();

/* Kompleks b; //Mendefinisikan objek b
b.info();*/
getch();
}
// Definisi fungsi anggota kelas kompleks
Kompleks::Kompleks()
{
cout<<"Konstruktor dijalankan..."< re=5.2;
im=3.6;
}
void Kompleks::info()
{
cout<<"\nBilangan kompleks :"< cout<<"real ="<< cout<<"imajiner ="<< cout<}

bahasa pemrograman 2 oop

FUNCTION NAME OVERLOADING
Yang dimaksud dengan function name overloading adalah penggunaan nama
yang sama untuk beberapa fungsi yang menyatakan suatu operasi pada tipe-tipe argumen
yang berbeda-beda. Secara abstrak operasi-operasi itu sebaiknya sama di antara fungsifungsi
tersebut. Sebagai contoh, operator + dalam operasi aritmatika yang sudah tersedia
sebagai bagian dari sistem. Pemakai dapat mendefinisikan fungsi yang di-overload
menurut keperluannya, misalnya:
3 + 4 ;
3.2 + 5.6 ;
Kata (nama) yang di-overload harus ditentukan maksudnya berdasarkan konteks. Tanpa
konteks, kata/nama yang di-overloaded itu akan ambigous (berarti banyak).
Dua atau lebih fungsi dapat diberi nama yang sama asalkan masing-masing fungsi
mempunyai signature yang unik. Signature dibutuhkan oleh jumlah atau tipe dari
argumen, misalnya:
int max ( int , int ) ;
int max ( const int *, int ) ;
int max ( const list & ) ;
Masing-masing memerlukan implementasi yang berbeda, tetapi sebaiknya operasi umum
yang dilakukan sama, yaitu memberikan nilai maksimum. Dari sudut pandang pemakai,
hanya ada satu operasi, yaitu penentuan nilai maksimum, yaitu misalnya:
int ix = max ( i , j );
int iy = max ( iArray , 1024 );
Kompilator bertugas membedakan berbagai instance itu, bahkan pemakai. Tanpa
overloading, ketiga fungsi maksimum di atas masing-masing harus mempunyai nama
yang unik, misalnya i_max, ia_max, atau lainnya. Kerumitan leksikal inilah yang dapat
diatasi dengan overloading. Apabila suatu nama fungsi dideklarasikan lebih dari satu kali
dalam sebuah program, kompilator akan menginterpretasikan deklarasi-deklarasi yang
kedua dan seterusnya sebagai berikut:
1. Jika return-type dan signature dari kedua fungsi itu tepat sama, yang kedua dianggap
sebagai suatu redeklarasi dari yang pertama, misalnya:
extern void print ( int *ia , int sz ) ;
void print (int *ary , int size ) ; // redeklarasi
2. Jika signature dari kedua fungsi itu tepat sama tetapi mempunyai return-type berbeda,
deklarasi yang kedua dianggap sebagai suatu redeklarasi yang keliru dan merupakan
kesalahan pada waktu kompilasi, misalnya:
unsigned int max ( int * , int sz ) ;
extern int max ( int *ia , int ) ; // error
3. Jika signature dari kedua fungsi itu berbeda, kedua fungsi itu dianggap overloaded,
misalnya:
extern void print ( int * , int ) ;
void print ( double *da, int sz ) ;
Pada suatu function overloaded dipanggil, instance mana yang dipilih ditentukan melalui
proses argument matching, yaitu membandingkan argumen aktual dengan argumen
journal dari tiap instance. Misalnya diberikan empat instance berbeda dari fungsi print():
extern void print ( unsign int ) ;
extern void print (char * ) ;
extern void print (char ) ;
extern void print ( int ) ;
Ada tiga kemungkinan matching dari suatu call, yaitu:
1. Match, suatu instance cocok, misalnya:
unsign int a ;
print (‘a’) ; // cocok dengan print (char) ;
print (“a”) ; // cocok dengan print (char* );
print ( a ) ; // cocok dengan print ( unsign int ) ;
2. No Match, argumen aktual tidak dapat dibuat cocok dengan argumen journal dari
semua instance yang tersedia, misalnya:
int *ip ;
small int si ;
print (ip) ; // error : no match
print (si) ; // error : no match
3. Ambigous Match, dimana argumen aktual dapat “match” lebih dari satu instance,
misalnya:
unsign long ul ;
print (ul) ; // error : dapat match dengan print (int) ;
// print (unsign int ) , print (char ).

POINTER KE FUNGSI
Fungsi tidak dapat disalurkan sebagai argumen , tetapi pointer ke fungsi dapat. Tipe
suatu fungsi ditentukan oleh return-type dan signature dari daftar argumennya. Nama
fungsi bukan bagian dari tipe fungsi. Misalnya:
void (*pf) (int * , int , int ) ;
menyatakan bahwa pf adalah pointer ke fungsi yang memerlukan tiga argumen bertipe
int * , int , int dan mengembalikan nilai bertipe void. Contoh fungsi yang dapat ditunjuk
oleh pf adalah:
void quickSort (int * , int , int) :
49
void heapSort (int * , int , int) ;
void ogah (int * , int , int) ;
Evaluasi dari nama fungsi memberikan pointer ke fungsi itu. Sebagai contoh, tipe dari
hasil evaluasi quickSort adalah: void (*) (int * , int , int). Penggunaan operator address-of
pada nama fungsi juga menghasilkan pointer ke tipe fungsi itu, sehingga quickSort
ekivalen dengan &quickSort.
Pointer ke suatu fungsi dapat di inisialisasi sebagai berikut:
void (*pf) (int *, int , int ) = quickSort ;
void (*pfv2) (int * , int , int) = pfv ;
Perhatikan beberapa contoh berikut:
pfv = quickSort ;
pfv2 = pfv ;
extern void g (char ) ;
extern void g (unsign ) ;
void (*pg) (char ) = g ; // ok : void g (char ).
void (*pg2) (int ) = g ; // error
void (*pg3) (char ) = g ; // error
int (*testFunction [10] ) ( ) ;
#include
extern min (int *, int ) ;
int (*pf) (int *, int ) = min ;
const int iaSize = 5 ;
int ia [iaSize] = {1,1,2,3,5} ;
main ( ) {
count << “call langsung : “ << min (ia , iaSize) << endl ;
count << “call lewat pointer : “ << pf (ia , iaSize) << endl ;
}
min (int *ia , int sz ) {
int minVal = ia [0] ;
for (int i = 1 ; i < sz ; ++i )
if (minVal > ia [0] ) minVal = ia [0] ;
return minVal ;
}
Pointer ke fungsi dapat menjadi argumen dari fungsi, misalnya:
extern void quickSort (int *, int , int ) ;
void sort (int , int , int , void ( *) (int *, int ,int , ) = quickSort ) ;
Aplikasi pointer ke fungsi dapat dilihat pada contoh program sort berikut:
#include
void sort ( int*ia , int bawah , int atas , void (*pf) (int *, int , int ) )
{
assert (ia != 0 ) ;
assert (pf != 0 ) ;
pf ( ia , bawah , atas ) ;
}
typedef void (*pfi3) (int *, int ,int ) ;
void sort ( int * ia , int b , int a , pfi3 , pf ) ;
Pointer ke fungsi dapat menjadi return type di suatu fungsi, misalnya:
int ( *ff (int )) (int * ,int ) ;
yang mendeklarasikan bahwa ff() adalah suatu fungsi yang memerlukan suatu argumen
bertipe int . Return type dari ff ( ) adalah int (*) (int *, int ). Penulisan tersebut dapat
disederhanakan dengan typedef, yaitu:
typedef int (*pfi) ( int*, int ) ;
pfi ff (int ) ;

Senin, 07 September 2009

tugas bp 2 OOP

Pemrograman berorientasi objek
Dari Wikipedia bahasa Indonesia, ensiklopedia bebas
Langsung ke: navigasi, cari

Pemrograman berorientasi objek (Inggris: object-oriented programming disingkat OOP) merupakan paradigma pemrograman yang berorientasikan kepada objek. Semua data dan fungsi di dalam paradigma ini dibungkus dalam kelas-kelas atau objek-objek. Bandingkan dengan logika pemrograman terstruktur. Setiap objek dapat menerima pesan, memproses data, dan mengirim pesan ke objek lainnya.

Model data berorientasi objek dikatakan dapat memberi fleksibilitas yang lebih, kemudahan mengubah program, dan digunakan luas dalam teknik piranti lunak skala besar. Lebih jauh lagi, pendukung OOP mengklaim bahwa OOP lebih mudah dipelajari bagi pemula dibanding dengan pendekatan sebelumnya, dan pendekatan OOP lebih mudah dikembangkan dan dirawat.

[sunting] Konsep dasar dari Pemrograman Berorientasi Objek

Pemrograman orientasi-objek menekankan konsep berikut:

  * kelas — kumpulan atas definisi data dan fungsi-fungsi dalam suatu unit untuk suatu tujuan tertentu. Sebagai contoh 'class of dog' adalah suatu unit yang terdiri atas definisi-definisi data dan fungsi-fungsi yang menunjuk pada berbagai macam perilaku/turunan dari anjing. Sebuah class adalah dasar dari modularitas dan struktur dalam pemrograman berorientasi object. Sebuah class secara tipikal sebaiknya dapat dikenali oleh seorang non-programmer sekalipun terkait dengan domain permasalahan yang ada, dan kode yang terdapat dalam sebuah class sebaiknya (relatif) bersifat mandiri dan independen (sebagaimana kode tersebut digunakan jika tidak menggunakan OOP). Dengan modularitas, struktur dari sebuah program akan terkait dengan aspek-aspek dalam masalah yang akan diselesaikan melalui program tersebut. Cara seperti ini akan menyederhanakan pemetaan dari masalah ke sebuah program ataupun sebaliknya.

  * Objek - membungkus data dan fungsi bersama menjadi suatu unit dalam sebuah program komputer; objek merupakan dasar dari modularitas dan struktur dalam sebuah program komputer berorientasi objek.

  * Abstraksi - Kemampuan sebuah program untuk melewati aspek informasi yang diproses olehnya, yaitu kemampuan untuk memfokus pada inti. Setiap objek dalam sistem melayani sebagai model dari "pelaku" abstrak yang dapat melakukan kerja, laporan dan perubahan keadaannya, dan berkomunikasi dengan objek lainnya dalam sistem, tanpa mengungkapkan bagaimana kelebihan ini diterapkan. Proses, fungsi atau metode dapat juga dibuat abstrak, dan beberapa teknik digunakan untuk mengembangkan sebuah pengabstrakan.

  * Enkapsulasi - Memastikan pengguna sebuah objek tidak dapat mengganti keadaan dalam dari sebuah objek dengan cara yang tidak layak; hanya metode dalam objek tersebut yang diberi ijin untuk mengakses keadaannya. Setiap objek mengakses interface yang menyebutkan bagaimana objek lainnya dapat berinteraksi dengannya. Objek lainnya tidak akan mengetahui dan tergantung kepada representasi dalam objek tersebut.

  * Polimorfisme melalui pengiriman pesan. Tidak bergantung kepada pemanggilan subrutin, bahasa orientasi objek dapat mengirim pesan; metode tertentu yang berhubungan dengan sebuah pengiriman pesan tergantung kepada objek tertentu di mana pesa tersebut dikirim. Contohnya, bila sebuah burung menerima pesan "gerak cepat", dia akan menggerakan sayapnya dan terbang. Bila seekor singa menerima pesan yang sama, dia akan menggerakkan kakinya dan berlari. Keduanya menjawab sebuah pesan yang sama, namun yang sesuai dengan kemampuan hewan tersebut. Ini disebut polimorfisme karena sebuah variabel tungal dalam program dapat memegang berbagai jenis objek yang berbeda selagi program berjalan, dan teks program yang sama dapat memanggil beberapa metode yang berbeda di saat yang berbeda dalam pemanggilan yang sama. Hal ini berlawanan dengan bahasa fungsional yang mencapai polimorfisme melalui penggunaan fungsi kelas-pertama.

  * Inheritas- Mengatur polimorfisme dan enkapsulasi dengan mengijinkan objek didefinisikan dan diciptakan dengan jenis khusus dari objek yang sudah ada - objek-objek ini dapat membagi (dan memperluas) perilaku mereka tanpa haru mengimplementasi ulang perilaku tersebut (bahasa berbasis-objek tidak selalu memiliki inheritas.)

  * Dengan menggunakan OOP maka dalam melakukan pemecahan suatu masalah kita tidak melihat bagaimana cara menyelesaikan suatu masalah tersebut (terstruktur) tetapi objek-objek apa yang dapat melakukan pemecahan masalah tersebut. Sebagai contoh anggap kita memiliki sebuah departemen yang memiliki manager, sekretaris, petugas administrasi data dan lainnya. Misal manager tersebut ingin memperoleh data dari bag administrasi maka manager tersebut tidak harus mengambilnya langsung tetapi dapat menyuruh petugas bag administrasi untuk mengambilnya. Pada kasus tersebut seorang manager tidak harus mengetahui bagaimana cara mengambil data tersebut tetapi manager bisa mendapatkan data tersebut melalui objek petugas adminiistrasi. Jadi untuk menyelesaikan suatu masalah dengan kolaborasi antar objek-objek yang ada karena setiap objek memiliki deskripsi tugasnya sendiri.

[sunting] Bahasa pemrograman

Bahasa pemrograman yang mendukung OOP antara lain:

  1. Visual Foxpro
  2. Java
  3. C++
  4. Pascal (bahasa pemrograman)
  5. Visual Basic.NET
  6. SIMULA
  7. Smalltalk
  8. Ruby
  9. Python
  10. PHP
  11. C#
  12. Delphi
  13. Eiffel
  14. Perl

Rabu, 25 Maret 2009

TRACING inserton sort

SIMPLE INSERTION SORTING


void insertion ( int x[ ], int n)

{ int i,k,y

for (k=1;k

{ y=x [k]

for (i=k-1;i>=0 && y

x[i+1] = x [i];

x[i+1] = y ;

}

}




TRACING

N=6

x

k

i

y

kondisi

18

9

8

28

3

2


1

0

9

T /\ T = T



-1


F

9

18

8

28

3

2


2

1

8

T /\ T = T



0


T /\ T = T



-1


F

8

9

18

28

3

2


3

2

28

T /\ F

8

9

18

28

3

2


4

3

3

T /\ T = T



2


T /\ T = T



1


T /\ T = T



0


T /\ T = T



-1


F

3

8

9

18

28

2


5

4

2

T /\ T = T



3


T /\ T = T



2


T /\ T = T



1


T /\ T = T



0


T /\ T = T



-1


F

2

3

8

9

18

28


6