Pada pemrograman berorientasi objek, kita membagi masalah pemrograman berdasarkan objek atau "sesuatu" benda. Objek ini diibaratkan seperti makhluk hidup, yaitu memiliki ciri-ciri fisik dan juga perilaku. Dalam pemrograman berorientasi objek, ciri-ciri fisik ini disebut juga sebagai atribut, pada dasarnya berisi informasi tentang objek tersebut. Sedangkan perilaku disebut sebagai metode, yaitu bagaimana suatu objek bertindak atau melakukan sesuatu.
Dengan cara ini diharapkan pemrograman berorientasi objek merupakan pemrograman yang lebih alami dibandingkan dengan pemrograman berorientasi prosedur, karena cara fikir kita sudah terbiasa dengan bagaimana kita berinteraksi dengan dunia.
Sampai tingkat tertentu, PBO hanya merubah cara pandang programmer. Objek dalam kaitannya dengan dasar pemrograman adalah gabungan dari variabel (dalam hal ini atribut) dan subrutin (yaitu metode) yang berinteraksi dengan variabel pada objek.
Banyak bahasa pemrograman lain yang juga mendukung konsep PBO, akan tetapi Java merupakan bahasa yang mendukung penuh PBO, di antaranya karena Java memiliki beberapa fitur penting yang berbeda dari bahasa standar. Untuk menggunakan fitur ini, kita harus mengubah cara pandang kita terlebih dahulu.
Objek terkait erat dengan kelas. Kita telah bahas dan mencoba beberapa contoh kelas pada bab-bab sebelumnya. Seperti kita lihat pula bahwa kelas memiliki variabel dan subrutin.
Jika objek juga memiliki variabel dan subrutin, lalu apa bedanya dengan kelas? Lalu mengapa kita harus memiliki cara pandang berbeda dengan cara kita melihat kelas? Sepertinya apabila kita lihat contoh-contohnya sebelumnya, perbedaannya hanya menghilangkan kata "
static
" dari deklarasi variabel dan subrutinnya, khan?Seperti disebutkan sebelumnya bahwa kelas mendeskripsikan suatu objek, atau lebih tepatnya, bagian non "
static
"
mendeskripsikan suatu objek. Mungkin bahasa biologi, kelas adalah
species, sedangkan objek merupakan individu. Human sapiens (nama biologi
manusia) adalah kelas, sedangkan Anda, saya, ibu, bapak, pak hansip
adalah objek. Masing-masing dari kita memiliki "blueprint" atau cetak
biru yang sama, tetapi kita memiliki ciri-ciri yang berbeda, rambut,
mata, telinga, tinggi badan, berat badan, dan juga perilaku kita saat
makan, minum, belajar, dan lain-lain.Dalam sudut pandang pemrograman, kelas digunakan untuk menciptakan suatu objek. Atau dengan kata lain, kelas adalah pabrik pembuat objek. Bagian non-statik dari suatu kelas adalah bagian yang memuat detail suatu objek, yaitu apa isi variabel dan metodenya. Perbedaan kelas dan objek adalah : Objek diciptakan dan dihancurkan ketika program berjalan, sehingga kita bisa memiliki beberapa objek sekaligus.
Kita lihat contoh sederhana, dimana kelas sederhana digunakan untuk menggabungkan beberapa variabel statik. Misalnya
class DataPenduduk { static String nama; static int umur; }
DataPenduduk.nama
dan DataPenduduk.umur
.
Hanya akan ada satu penduduk, karena kita menyimpan data tersebut
sebagai data statik, yang artinya hanya satu tempat di memori di mana
data tersebut disimpan. Kelas DataPenduduk
dan variabel isinya akan ada selama program tersebut berjalan.Sekarang kita lihat kode berikut yang memiliki variabel non-statik:
class DataPenduduk { String nama; int umur; }
DataPenduduk.umur
, karena nama dan umur bukan anggota statik kelas DataPenduduk
. Jadi, tidak ada yang bisa kita lakukan dengan kelas ini sama sekali, kecuali membuat objek dari kelas ini.Setiap objek akan memiliki variable sendiri yang dinamakan "nama" dan "umur". Kita bisa membuat banyak "penduduk" karena kita bisa membuat objek untuk setiap penduduk. Misalnya setiap kali seseorang dilahirkan, kita bisa membuat objek penduduk baru. Atau jika seseorang meninggal dunia, kita bisa hapus objek tersebut.
Suatu sistem yang terdiri dari kumpulan objek digunakan untuk memodelkan apa yang terjadi di alam nyata. Kita tidak bisa membuat beberapa objek dengan menggunakan variabel statik.
Contoh lainnya adalah pada GUI. Bayangkan kita memiliki beberapa tombol, misalnya tombol OK, Cancel dan Apply. Masing-masing tombol ini memiliki kelas yang sama akan tetapi apa yang dilakukan tombol ini berbeda-beda. Teks yang ditampilkan (OK, Cancel atau Apply) merupakan variabel masing-masing objek.
Suatu objek yang diciptakan dari suatu kelas disebut instansi dari kelas tersebut. Variabel yang dimiliki oleh objek disebut variabel instansi. Sedangkan subrutinnya disebut . (Dalam PBO subrutin disebut metode)
Misalnya dalam kelas
DataPenduduk
di atas, kemudian kita buat suatu objek dari kelas ini, maka objek yang diciptakan disebut instansi dari kelas DataPenduduk
, "nama" dan "umur" adalah variabel instansi di dalam objek tersebut.Penting untuk diingat bahwa kelas suatu objek menentukan tipe data dari variabel instansi, akan tetapi isi datanya sendiri tidak disimpan di dalam kelas, akan tetapi di dalam objek yang diciptakan, sehingga setiap objek akan memiliki data masing-masing.
Begitu juga dengan metode instansi, misalnya pada kelas tombol, kita memiliki metode yang dinamakan
klik()
. Masing-masing tombol akan melakukan tugas berbeda-beda tergantung dari objeknya.Seperti kita lihat di sini bahwa bagian statik dan non-statik dari suatu kelas merupakan hal yang sama sekali berbeda. Banyak kelas yang hanya memiliki anggota statik, atau hanya memiliki anggota non-statik. Akan tetapi kita juga bisa mencampur keduanya dalam suatu kelas. Variabel anggota statik suatu kelas juga bisa disebut variabel kelas dan metode anggota statik suatu kelas juga bisa disebut metode kelas, karena mereka adalah milik kelas dan bukan milik objek yang diciptakan dari suatu kelas.
Sekarang kita gunakan contoh yang lebih real. Kita akan buat versi sederhana dari kelas
Murid
, dimana kita akan menyimpan informasi tentang murid yang terdaftar pada suatu sekolah.class Murid { String nama ; // nama murid double nilai1, nilai2, nilai3; // nilai ulangan murid tersebut double hitungRataRata() { // hitung rata-rata nilai ulangan return (nilai1 + nilai2 + nilai3) / 3; } }
nama
, nilai1
, nilai2
, dan nilai3
, dan juga metode instansi yang bernama hitungRataRata()
. Setiap murid memiliki nilai rata-rata yang berbeda-beda. (Makanya ini disebut perilaku suatu objek berbeda-beda).Dalam Java, kelas merupakan tipe data, yaitu mirip dengan tipe data bawaan seperti int atau boolean. Jadi nama kelas bisa digunakan untuk menentukan tipe suatu variabel dalam deklarasi pernyataan, dalam parameter formal dan juga dalam tipe keluaran suatu fungsi. Misalnya, program mendefinisikan seorang murid dengan pernyataan seperti :
Murid amir;
Dalam Java, tidak ada variabel yang bisa menyimpan objek. Variabel hanya bisa menyimpan referensi (alamat di memori) suatu objek. Komputer akan menggunakan referensi ini untuk mencari objek di dalam memori.
Objek diciptakan dengan pernyataan new, yang bertugas menciptakan objek kemudian mengembalikan referensi ke objek yang sudah diciptakan. Misalnya
amir
adalah variabel dengan tipe Murid
seperti dideklarasikan di atas, maka pernyataan berikut :amir = new Murid();
Murid
. Variabel amir
akan menyimpan referensi ke objek yang baru saja diciptakan.Sekarang anggap variabel
amir
merujuk pada objek yang diciptakan dari kelas Murid
. Dalam objek tersebut terdapat variabel nama
, nilai1
, nilai2
, dan nilai3
. Variabel instansi ini bisa dipanggil dengan amir.nama
, amir.nilai1
, amir.nilai2
, dan amir.nilai3
.
(Ingat aturan penulisan nama lengkap, akan tetapi karena kelas ini
tidak memiliki anggota statik, dan hanya objek yang diciptakan dari
kelas ini memiliki variabel atau metode ini, maka nama lengkapnya
diturunkan dari nama objek yang memilikinya).Misalnya, program berikut :
System.out.println("Hai, " + amir.nama + " . Nilai Anda adalah : "); System.out.println(amir.nilai1); System.out.println(amir.nilai2); System.out.println(amir.nilai3);
amir
. Begitu juga kita bisa menghitung rata-rata pada suatu objek dengan menggunakan amir.hitungRataRata()
. Sehingga untuk menghitung rata-rata murid tersebut, bisa kita perintahkan dengan:System.out.println("Nilai rata-rata Anda adalah : " + amir.hitungRataRata());
amir.nama
seperti layaknya variabel bertipe String, artinya kita bisa menghitung jumlah karakter dengan menggunakan amir.nama.length()
.Kita juga bisa membuat variabel seperti
amir
untuk tidak menunjuk atau memiliki referensi ke obek mana pun. Dalam hal ini kita sebut bahwa objek amir berisi referensi kosong (null reference). Referensi kosong ini ditulis dalam Java dengan ekspresi "null
". Dan kita bisa menyimpan nilai "null
" pada variabel amir dengan perintah :amir = null;
if (amir == null) . . .
amir
berisi null
, maka kita tidak bisa mengambil variabel amir.nilai1
. Jika program kita mencoba mengakses referensi kosong secara ilegal, maka di tengah-tengah jalannya program, program akan menampilkan pesan kesalahan "null pointer exception".
Mari kita lihat beberapa pernyataan yang bisa digunakan dengan objek :
Murid mrd1, mrd2, mrd3, mrd4; // mendeklarasikan 4 variabel yang bertipe Murid mrd1 = new Murid(); // membuat objek baru dari kelas Murid, kemudian menyimpan referensinya pada variabel mrd1 mrd2 = new Murid(); // membuat objek baru dari kelas Murid, kemudian menyimpan referensinya pada variabel mrd2 mrd3 = mrd1; // menkopi „referensi" yang disimpan pada mrd1 ke mrd3 mrd4 = null; // menyimpan referensi kosong ke mrd4 mrd1.nama = "Ahmad Surahmat"; // mengisi nilai variabel instansi mrd2.nama = "Hamid Samsudin";
Gambar tersebut menunjukkan variabel dalam kotak-kotak kecil dengan nama variabelnya. Objek ditunjukkan dalam kotak dengan pojok bulat. Ketika suatu variabel berisi referensi ke suatu objek, maka nilainya adalah seperti panah yang menunjuk pada objek tersebut.
Variabel
mrd4
bernilai null
, sehingga tidak menunjuk ke mana-mana. Panah dari mrd1 dan mrd3 menjunjuk pada objek ang sama. Ini merupakan Hal Yang Sangat Penting :Jika isi variabel suatu objek diberikan kepada variabel yang lain, maka yang dikopi hanya referensinya saja. Isi objek tidak pernah dikopi.
Ketika pernyataan "
mrd3 = mrd1;
" dieksekusi, tidak ada objek baru yang dibuat. Akan tetapi mrd3
akan merujuk pada alamat yang sama seperti mrd1
. Konsekuensinya mungkin sedikit mengejutkan. Misalnya variabel mrd1.nama
dan mrd3.nama
menunjuk pada variabel yang persis sama, maka apabila mrd1.nama
disi dengan "Juju Juminten", maka mrd3.nama
juga berisi "Juju Juminten".Sekali lagi, variabel tidak berisi objek, akan tetapi berisi referensi ke suatu objek.
Kita bisa menguji beberapa objek dengan operator == dan != untuk menguji kesamaan dan ketidaksamaan. Akan tetapi yang dicek lagi-lagi bukan isi objek, melainkan alamat memori dimana objek tersebut dijadikan referensi. Jika alamat referensi di memori sama, artinya kedua objek tersebut merujuk pada alamat memori yang sama. Ini berarti perubahan yang dilakukan pada variabel yang satu akan ikut mempengaruhi variabel yang lain.
Untuk menguji isinya, maka isinya harus dibandingkan satu per satu, yaitu misalnya dengan "
mrd3.nilai1 == mrd1.nilai1 && mrd3.nilai2 == mrd1.nilai2 && mrd3.nilai3 == mrd1.nilai3 && mrd3.nama.equals(mrd1.nama)
"Seperti telah disebutkan sebelumnya bahwa String juga merupakan objek. Sehingga membandingkan String yang satu dengan String yang lain dengan menggunakan tanda == adalah membandingkan apakah alamat memori yang ditunjuk oleh String yang satu sama dengan alamat memori yang ditunjuk oleh String yang lain. Ingat == pada objek bukan membandingkan isi objek, tetapi membandingkan alamat memori yang ditunjuk oleh variabel tersebut. Untuk membandingkan isi String, kita dapat menggunakan
String.equals()
di mana parameternya adalah objek String yang akan dibandingkan. Metode
ini akan membandingkan karakter per karakter dari kedua String. Misalnya, variabel salam berisi String "Selamat". Untuk menguji apakah variabel salam berisi "Selamat", bisa kita gunakan perintah
salam.equals("Selamat")
final
"
tetapi menunjuk pada alamat memori yang sama, kemudian variabel ini
mengubah isi objek tersebut, maka isi objek tersebut bisa berubah.Kita boleh saja untuk menulis perintah sebagai berikut.
final Murid mrd = new Murid(); murid.nama = "Ahmad Basir";
Murid mrd99 = new Murid(); mrd = mrd99; // ILEGAL, karena mrd adalah variabel final
Sumber : http://java.lyracc.com/belajar/java-untuk-pemula/objek-metode-instansi-dan-variable-instansi
Tidak ada komentar:
Posting Komentar