Rabu, 10 Oktober 2012

Bekerja dengan Java Class Library (part3)

Kita lanjutin lagi Pembahasan Bekerja dengan java library....


9.5 Casting, Converting dan Comparing Objects

Pada bagian ini, kita akan belajar bagaimana mengunakan typecasting. Typecasting atau
casting adalah proses konversi data dari tipe data tertentu ke tipe data yang lain. Kita juga
akan belajar bagaimana mengkonversi tipe data primitif ke obyek dan sebaliknya. Kemudian,
pada akhirnya kita akan belajar bagaimana membandingkan sebuah obyek.


9.5.1 Casting Tipe data Primitif
Casting antara tipe primitif dapat mengijinkan Anda untuk mengkonversikan sebuah nilai
dari sebuah tipe data tertentu kepada tipe primitif yang lain. Hal ini biasanya terjadi
diantara tipe data angka.
Ada sebuah tipe data primitif yang tidak dapat kita casting, yaitu tipe data boolean.
Sebagai contoh dari typecasting adalah pada saat Anda menyimpan sebuah variabel dengan
tipe data integer kepada sebuah variabel dengan tipe data double. Sebagai contoh:
int numInt = 10;
double numDouble = numInt; //implicit cast
Pada contoh ini dapat kita lihat bahwa, walaupun variabel yang dituju (double) memiliki
ukuran yang lebih besar daripada nilai yang akan kita tempatkan didalamnya, data
tersebut secara implisit dapat kita casting ke tipe data double.
Contoh yang lain adalah apabila kita ingin untuk melakukan typecasting sebuah int ke char
atau sebaliknya. Sebuah karakter akan dapat digunakan sebagai nilai integer karena setiap
karakter memiliki sebuah nilai numerik yang merepresentasikan posisinya dalam satu set
karakter. Jika sebuah variable memiliki nilai 65, maka cast (char) i akan menghasilkan nilai
'A'. Kode numerik yang merepresentasikan huruf kapital A adalah 65, berdasarkan set
karakter ASCII, dan Java telah mengadopsi bagian ini untuk mendukung karakter.
char valChar = 'A';
int valInt = valChar;
System.out.print( valInt ); //casting explisit: keluaran 65
Ketika kita mengkonversi data yang bertipe besar ke tipe data yang lebih kecil, kita harus
menggunakan explicit cast. Explicit casts mengikuti bentuk sebagai berikut :
(dataType)value
dimana, dataType, adalah nama dari tipe data yang Anda konversi
value, adalah pernyataan yang dihasilkan pada nilai dari the source type.
Sebagai contoh,
double valDouble = 10.12;
int valInt = (int)valDouble; //men-convert valDouble ke tipe int
double x = 10.2;
int y = 2;
int result = (int)(x/y); //hasil typecast operasi ke int


9.5.2 Casting Obyek
Instances dari class-class juga dapat di ubah ke instance-instance dari class-class yang lain
dengan satu batasan: class-class sumber dan tujuan harus terhubung
dengan mekanisme inheritance; satu class harus menjadi sebuah subclass
terhadap class yang lain. Kita akan menjelaskan mengenai inheritance pada bab
selanjutnya.
Sejalan dengan konversi nilai primitif ke tipe yang lebih besar ukurannya, beberapa
object mungkin tidak membutuhkan untuk ubah secara explisit. Faktanya karena semua
subclass terdiri atas informasi yang sama seperti class induknya.
Sebagai contoh, jika terdapat method yang memiliki dua argumen, satu tipe object dan tipe
window yang lain. Anda dapat melewatkan instance dari class apapun untuk argumen
object karena semua class java adalah subclass dari object. Untuk argumen window,
anda dapat melewatkannya subclassnya, seperti dialog, FileDialog, dan frame. Hal ini
dapat dituliskan dalam program dan bukan hanya dalam memanggil method. Jika anda
mempunyai variabel yang didefinisikan sebagai class window, anda dapat memberikan
obyek dari class tersebut atau dari subclassnya untuk dijadikan variabel tanpa konversi.
Untuk kebalikannya pun bisa dilakukan, Anda dapat menggunakan superclass ketika
sebuah subclass dibentuk. Akan tetapi error akan ditemukan karena subclass
kemungkinan memiliki lebih banyak tingkah laku daripada superclassnya, maka
mungkin akan terjadi hilangnya kendali dari superclass untuk method tertentu. Superclass object
mungkin tidak memiliki semua kemungkinan tingkah laku yang dapat dilakukan subclass
object. Sebagai contoh jika anda memiliki operasi yang memanggil method dalam obyek
dari class integer, mengunakan object dari class Number tidak akan didapat kan method
lebih banyak dar i yang dispesifikasikan dalam integer. Error akan terjadi jika Anda
mencoba untuk memanggil method yang tidak dimiliki oleh obyek tujuan.
Untuk mengunakan obyek-obyek superclass dimana obyek-obyek subclass
ditentukan terlebih dahulu, anda harus mengkonversi mereka secara eksplisit. Anda
tidak akan kehilangan informasi sebelumnya setelah proses konversi, tapi anda
mendapatkan semua method dan
variabel yang didefinisikan oleh subclass. Untuk konversi sebuah obyek ke class yang
lain, Anda dapat menggunakan operasi yang sama seperti konversi untuk tipe-tipe primitif :
Untuk memilih,
(classname)object
dimana,
classname, adalah nama dari class tujuan.
object, adalah sesuatu yang mengarah pada obyek sumber.
Catatan: casting akan membuat pengalamatan ke obyek yang lama dari classname
yang dituliskan; obyek yang lama akan dapat tetap dipakai seperti sebelumnya.


Contoh berikut konversi sebuah instance dari class VicePresident ke sabuah instance
dari class Employee; VicePresident adalah sebuah subclass dari Employee dengan
lebih banyak informasi, disini didefinisikan bahwa VicePresident memiliki akses menuju
executive washroom,
Employee emp = new Employee();
VicePresident veep = new VicePresident();
emp = veep; // tidak adah konversi yang diperlukan untuk penggunaan
yang cenderung naik
veep = (VicePresident)emp; // Harus memilih dengan pemilihan secara
eksplisit




Tidak ada komentar:

Posting Komentar