Selasa, 22 September 2009

array of object

Array ( Larik )
Array merupakan kumpulan dari nilai-nilai data yang bertipe sama dalam urutan tertentu yang menggunakan nama yang sama. Letak atau posisi dari element array ditunjukan oleh suatu index.Index berawal dari 0 hingga jumlah data dikurangi satu (n-1) misalkan jumlah data adalah 5 maka index dimulai dari 0 sampai dengan 4. Dilihat dari dimensinya array dapat dibagi menjadi Array dimensi satu, Array dimensi dua dan array multi-dimensi.

Array Dimensi Satu
Setiap elemen array dapat diakses melalui indeks
Indeks array secara default dimulai dari 0.
Deklarasi ArrayBentuk umum:
tipe_arraynama_array[ukuran]

Contoh:
Int Nilai[5];
Nilai[0] Nilai[1] Nilai[2] Nilai[3] Nilai[4]
70 80 82 60 75

Array Dimensi Dua
Array dua dimensi merupakan array yang terdiri dari m buah baris dan n buah kolom.Bentuknya dapat berupa matriks atau table.

Deklarasi Array.
Tipe_arraynama_array[baris][kolom];

Contoh:
Int X[3][4];

X[0][0] X[0][1] X[0][2] X[0][3]
X[1][0] X[1][1] X[1][2] X[1][3]
X[2][0] X[2][1] X[2][2] X[2][3]

Cara mengakses array:
Untuk mengakses array, misalnya kita ingin mengisi elemen array baris 2 kolom 3 dengan 10 maka perintahnya adalah seperti berikut:
1.
X[1][2]=10;

Untuk menigisi dan menampilkan isi elemen array ada dua cara yaitu:
1. Row major order(secara baris perbaris)
2. Column major order(secara kolom per kolom)

Array Multi-Dimensi
Array multi-dimensi merupakan array yang mempunyai ukuran legih dari dua. Bentuk pendeklarasian array sama saja dengan array dimensi satu maupun array dimensi dua. Bentuk umumnya yaitu:
Tipe_arraynama_array[ukuran1][ukuran2]…[ukuranN];
Contoh:

Float X[2][4][3];
X[0][0] X[0][1] X[0][2]
X[1][0] X[1][1] X[1][2]
X[2][0] X[2][1] X[2][2]
X[3][0] X[3][1] X[3][2]
X[0][0] X[0][1] X[0][2]
X[1][0] X[1][1] X[1][2]
X[2][0] X[2][1] X[2][2]
X[3][0] X[3][1] X[3][2]

program array of objects

#include
class benda
{ int kode;
public:void setkode( int x ) {
kode = x;
};
void showkode( void )
{ cout << “kode = " << kode << "\n"; }; }; main( ) { benda array_benda[3]; cout <<“Inisialisasi data…” <<“\n”; for(int i=0; i<3; i++) array_benda[i].setkode( i*10 ); for(i=0; i<3; i++) array_benda[i].showkode(); objects as function argument #include
class time
{ int hours; int minutes;
public: void gettime(int h, int m)
{ hours = h; minutes = m; }
void puttime(void)
{ cout << hours << " hours & " << minutes << " minutes \n";
}
void sum(time, time); // objects are arguments
};
void time :: sum(time t1, time t2)
{ minutes = t1.minutes + t2.minutes;
hours = minutes / 60;
minutes = minutes % 60;
hours = hours + t1.hours + t2.hours;
}
main( )
{ time T1, T2, T3;
T1.gettime(2, 45); T2.gettime(3, 30);
T3.sum(T1, T2);
cout << "T1 = "; T1.puttime(); cout << "T2 = "; T2.puttime();
cout << "T3 = "; T3.puttime();
}




Ref : www.ansav.com/forum/showthread.php?t=128

Polymorphysm

Polymorphism

Polymorphism adalah kemampuan untuk mempunyai beberapa bentuk yang berbeda.

Misal: Manager adalah Employee

public class Employee {
public String nama;
public String gaji;

void infoNama(){
System.out.println(“Nama” + nama);
}
}

public class Manajer extends Employee {
public String departemen;
}

Contoh

Employee emp = new Manager();

Reference variabel dari emp adalah Employee.
Bentuk emp adalah Manager.

Polymorphism: ingat !!

. Satu obyek hanya boleh mempunyai satu bentuk saja.
. Yaitu bentuk yang diberikan ketika obyek dibuat.
. Reference variabel bisa menunjuk ke bentuk yang berbeda.

Virtual Method Invocation

. Virtual method invocation merupakan suatu hal yang sangat penting dalam konsep
polimorfisme.
. Syarat terjadinya VMI adalah sebelumnya sudah terjadi polymorphism.
. Pada saat obyek yang sudah dibuat tersebut memanggil overridden method pada
parent class, kompiler Java akan melakukan invocation (pemanggilan) terhadap
overriding method pada subclass, dimana yang seharusnya dipanggil adalah
overridden.

> Contoh Virtual Method Invocation

class Employee{}
class Manager extends Employee{}

Employee emp = new Manager();
emp.getDetails();


Virtual Method Invocation

Yang terjadi pada contoh:
. Obyek e mempunyai behavior yang sesuai dengan runtime type bukan compile type.
. Ketika compile time e adalah Employee.
. Ketika runtime e adalah Manager.
Jadi :
. emp hanya bisa mengakses variabel milik Employee.
. emp hanya bisa mengakses method milik Manager

Virtual Method Invocation

. Bagaimana dengan konstruktor yang dijalankan?
. Pada pembentukan
Employee e = new Manager();
. Pertama kali akan menjalankan konstruktor Manager, ketika ketemu super() maka
akan menjalankan konstruktor Employee (superclass), setelah semua statement
dieksekusi baru kemudian menjalankan konstruktor Manager (subclass).

Virtual Method Invocation pada C++

. Pada method yang akan dilakukan VMI harus ditandai dengan kata virtual.

Polymorphic Arguments

. Polymorphic arguments adalah tipe data suatu argumen pada suatu method yang bisa
menerima suatu nilai yang bertipe subclass-nya.

Polymorphic Arguments
class Pegawai {

}

class Manajer extends Pegawai {

}

public class Tes {
public static void Proses(Pegawai peg) {

}

public static void main(String args[]) {
Manajer man = new Manajer();
Proses(man);
}
}

Operator instanceof

. Pernyataan instanceof sangat berguna untuk mengetahui tipe asal dari suatu.
polymorphic arguments


Operator instanceof

class Kurir extends Pegawai {

}

public class Tes {
public static void Proses(Pegawai peg) {
if (peg instanceof Manajer) {
… lakukan tugas-tugas manajer…
} else if (peg instanceof Kurir) {
… lakukan tugas-tugas kurir…
} else {
… lakukan tugas-tugas lainnya…
}
}

public static void main(String args[]) {
Manajer man = new Manajer();
Kurir kur = new Kurir();
Proses(man);
Proses(kur);
}
}

Casting object
. Seringkali pemakaian instanceof diikuti dengan casting object dari tipe
parameter ke tipe asal.
. Tanpa adanya casting obyek, maka nilai yang akan kita pakai setelah proses
instanceof masih bertipe parent class-nya, sehingga jika ia perlu dipakai maka
ia harus di casting dulu ke tipe subclass-nya.


if (peg instanceof Manajer) {
Manajer man = (Manajer) peg;
…lakukan tugas-tugas manajer…
}


Kenapa diperlukan polymorphic arguments?
. Mengefisienkan pembuatan program
. Misal Employee mempunyai banyak subclass.
. Maka kita harus mendefinisikan semua method yang menangani behavior dari masing-
masing subclass.
. Dengan adanya polymorphic arguments kita cukup mendefinisikan satu method saja
yang bisa digunakan untuk menangani behavior semua subclass.

Tanpa polymorphic arguments


public class Tes {
public static void ProsesManajer() {
…lakukan tugas-tugas manajer…
}

public static void ProsesKurir() {
…lakukan tugas-tugas kurir…
}

}

Object Reference Conversion

.Pada object reference bisa terjadi:
> Assignment conversion
> Method-call conversion
> Casting
. Pada object references tidak terdapat arithmetic promotion karena references
tidak dapat dijadikan operan arithmetic.
. Reference conversion terjadi pada saat kompile

Object Reference Assignment Conversion

. Terjadi ketika kita memberikan nilai object reference kepada variabel yang
tipenya berbeda.
. Three general kinds of object reference type:
>A class type, such as Button or Vector
>An interface type, such as Runnable or LayoutManager
>An array type, such as int[][] or TextArea[]
Contoh:
1. Oldtype x = new Oldtype();
2. Newtype y = x; // reference assignment conversion
The rules for object reference conversion

. Interface hanya dapat di konversi ke interface atau Object.
Jika NewType adalah interface, maka NewType ini harus merupakan superinterface
dari OldType.
. Class hanya bisa dikonversi ke class atau interface.
Jika dikonversi ke class, NewType harus merupakan superclass dari OldType.
Jika dikonversi ke interface, OldType (class) harus mengimplementasikan (NewType)
interface
. Array hanya dapat dikonversi ke Object, interface Cloneable atau Serializable,
atau array.
Hanya array of object references yang dapat dikonversi ke array, dan old element
type harus convertible terhadap new element type.
Contoh 1 :
Tangelo tange = new Tangelo();
Citrus cit = tange; // No problem

Contoh 2:
Citrus cit = new Citrus();
Tangelo tange = cit; // compile error

Contoh 3:
Grapefruit g = new Grapefruit();
Squeezable squee = g;// No problem
Grapefruit g2 = squee; // Error

Object Method-Call Conversion

. Aturan object reference method-call conversion sama dengan aturan pada object
reference assignment conversion.
. Converting to superclass  permitted.
. Converting to subclass  not permitted.

Object Method-Call Conversion
Contoh:
Vector myVec = new Vector();
Tangelo tange = new Tangelo();
myVect.add(tange); // No problem

Note: method add pada vector meminta satu parameter  add(Object ob)

Object Reference Casting

. Is like primitive casting
. Berbagai macam konversi yang diijinkan pada object reference assignment dan
method call, diijinkan dilakukan eksplisit casting.

Contoh:
Lemon lem = new Lemon();
Citrus cit = lem; // No problem

Sama dengan:
Lemon lem = new Lemon();
Citrus cit = (Citrus) lem; // No problem

The cast is legal but not needed.
The power of casting appears when you explicitly cast to a type that is not allowed by the rules of implicit conversion.

Object Reference Casting

1. Grapefruit g, g1;
2. Citrus c;
3. Tangelo t;
4. g = new Grapefruit();
// Class is Grapefruit
5. c = g;
// Legal assignment conversion,
// no cast needed
6. g1 = (Grapefruit)c;
// Legal cast
7. t = (Tangelo)c;
// Illegal cast
// (throws an exception)

Kompile  ok, kompiler tidak bisa mengetahui object reference yang di pegang oleh c.
Runtime  error  class c adalah Grapefruit

Object Reference Casting
Example: Object is cast to an interface type.

1. Grapefruit g, g1;
2. Squeezable s;
3. g = new Grapefruit();
4. s = g; // Convert Grapefruit to Squeezable (OK)
5. g1 = s; // Convert Squeezable to Grapefruit
// (Compile error)

Implicitly converting an interface to a class is never allowed
Penyelesaian : gunakan eksplisit casting

g1 = (Grapefruit) s;
Pada saat runtime terjadi pengecekan.

Object Reference Casting
Example: array.

1. Grapefruit g[];
2. Squeezable s[];
3. Citrus c[];
4. g = new Grapefruit[500];
5. s = g; // Convert Grapefruit array to Squeezable array (OK)
6. c = (Citrus[])s; // Convert Squeezable array to Citrus array (OK)
Ref : lecturer.eepis-its.edu/~riyanto/oop9.ppt

Selasa, 01 September 2009

Pemrograman Berorientasi Objek

Pemrograman berorientasi objek (Object Oriented Programing - OOP) merupakan satu ide luar biasa dalam bidang pemrograman yang ternyata juga melahirkan bahasa yang lebih maju seperti C++, Java, Phyton, dan sebagainya. Perkembangan OOP ini pun melahirkan konsep pemrograman yang lain yang berbasis Windows atau GUI (Graphical User Interface) yang kemudian populer dengan bahasa visual, seperti visual basic, delphi, visual c, visual java, dan sebagainya. Para programer yang terbiasa dengan konsep bahasa prosedural seperti BASIC, PASCAL, dan C biasanya memerlukan suatu pengenalan ke dalam konsep objek agar kemudian dapat merancang kooncep objek dalam pemrograman serta prinsip perancangan program berorientasi objek.


  • KONSEP OBJEK


Objek dalam pengetian sehari-hari adalah benda, baik yang secara fisik dapat diketahui keberadaanya maupun yang bersifat khayal(virtual). Mobil, Toyota, komputer mugen, notebook Toshiba, restoran, atau suatu gagasan dan sebagainya adalah objek. Objek dalam pemrograman adalah suatu komponen dari suatu sistem yang dibangun, misalnya objek matematis, objek jendela(window), objek tombol (button), objek kotak gambar(picture box), objek kotak teks (text boxt), dan sebagainya. Analogi objek pada prosedural adalah "fungsi" atau "prosedur" yang bekerja mandiri menghasilkan sesuatu dalam suatu proses pertukaran data dengan program utama


  • Apa itu “objek” : objek adalah modul self-contained yang terdiri dari kode pemrogaman yang telah disusun sebelumnya. Modul memuat atau mengkapsulasi baik(1) cabang data, maupun (2) instruksi pemrosesan yang bisa dilakukan pada data tersebut.

  • Kapan objek data akan diproses – mengirim “ message”: setelah objek menjadi bagian dari suatu program, instruksi tertentu diaktivasi hanya ketika “message” yang terkait sudah dikirimkan. Message adalah pengiriman peringatan kepada objek ketika operasi yang harus melibatkan objek tertentu dilakukan.

  • Bagaimana data objek diproses – “method”: message cukup mengidentifikasi operasinya. Bagaimana sebenarnya hal itu dilakukan akan disertakan didalam instruksi pemrosesan yang menjadi bagian dari objek. Instruksi pemrosesan ini dinamakan method.


Menggunakan kembali blok kode program setelah anda menuliskan satu blok kode program, kode tersebut dapat digunakan kembali pada program-program lain. Jadi, dengan OOP-tidak seperti pemrograman tradisional-anda tidak perlu memulai dari awal.


Dibandingkan dengan pemrogaman tradisional, mempelajar pemrogaman berorintasi objek memakan waktu yang lebih lama karena seperti berpikir dengan cara yang baru. Sekalipun demikian, OOP memilliki keunggulan yaitu objek bisa digunakan berulang-ulang pada aplikasi yang berbeda dan oleh programmer yang berbeda, karena itu waktu pengembanganya pun lebih cepat dan biaya pun bisa berkurang.


Tiga Konsep OOP


Bagaimana saya mendefinisikan ketiga konsep dasar OOP?


Pemrograman berorientasi objek memiliki tiga konsep dasar yang penting, yaitu enskaplusi, pewarisan, dan polimorfisme. Sebenarnya, konsep tersebut tidak menakutkan seperti kelihatanya.


Enkapsulasi Enkapsulasi berarti objek memuat (1) data dan (2) instruksi pemrosesan yang relevan. Setelah objek dibuat, objek dapat digunakan kembali untuk program lain. Penggunaan sebuah objek bisa dijabarkan melalui konsep kelas dan pewarisan.


Pewarisan (inheritance) setelah mencipatakan sebuah objek. Anda dapat menggunakanya sebagai fondasi untuk objek yang sama yang memilliki perilaku atau karakteristik sama. Semua objek berasal dari atau yang saling berhubungan bisa membntuk suatu kelas. Masing-masing kelas memuat instruksi khusus (method) yang unik untuk kelompok tersebut.


Kelas bisa diatur dalam hierarki-kelas atau subkelas. Pewarisan adalah metode untuk mewariskan cirri dari suatu objek dari keas ke subkelas dalam hierarki. Jadi objek yang baru dapat diciptakan dengan mewariskan ciri dari kelas yang sudah ada.


Penulis Alan Freedman memberikan contoh sebagai berikut : “ Objek MACINTOSH bisa menjadi salah satu contoh kelas KOMPUTER PRIBADI, yang mewariskan property dari kelas SISTEM KOMPUTER”. Jika anda ingin menambahkan suatu komputer baru, misalnya COMPAQ, Anda tinggal memasukan apa yang membuat komputer itu berbeda dengan komputer yang lain. Karakteristik dari komputer pribadi dapat diwariskan.


Polimorfisme Polimorfisme berarti “banyak bentuk” . Dalam pemrograman berorientasi objek, polimorfisme berarti sebuah pesan (permintaan yang sudah digeneralisasi) memberikan hasil yang berbeda berdasarkan objek yang dikirimkan.


Polimorfisme sangat berguna. Dengan polimorfisme programmer dapat membuat prosedur mengenai objek yang jenisnya tidak diketahui sebelumnya, namun akan diketahui saat program dijalankan di komputer. Freedman memberikan contoh berikut : “kursor pada layar akan berubah bentuk dari anak panah menjadi garis tergantung pada mode program”. Instruksi pemrosesan “pindahkan kursor pada layar sebagai respon atas pergerakan mouse akan ditulis sebagai “cursor”, dan diperlukan polimorfisme untuk membuat kursor tersebut menjadi sembarang bentuk pada saat program dijalankan”. Polimorfisme juga memungkinkan bentuk kursor baru dapat diitegrasikan dengan mudah ke dalam program. (bab 10.5 Buku Using Information Technology : Wiliam / Sawyer)