Java adalah salah satu bahasa pemrograman berorientasi objek atau lebih
terkenal disebut dengan Object Oriented Programming (OOP). Java
mengadopsi bahasa C yang dikemas dengan lebih mudah untuk dipelajari.
Pemrograman berorientasi objek diciptakan untuk mempermudah
pengembangan program dengan cara mengikuti model yang telah ada dalam
kehidupan nyata. Dalam paradigma ini, sesuai dengan model kehidupan
nyata, segala bagian (entiti) dari suatu permasalahan adalah objek.
Objek-objek ini kemudian juga dapat berupa gabungan dari beberapa objek
yang lebih kecil. Sebagai contoh, tengoklah sebuah mobil. Mobil adalah
sebuah objek dalam kehidupan nyata. Namun mobil sendiri terbentuk dari
beberapa objek yang lebih kecil seperti roda ban, mesin, jok, dll. Mobil
sebagai objek yang merupakan gabungan dari objek yang lebih kecil
dibentuk dengan membentuk hubungan antara objek-objek penyusunnya.
Begitu juga dengan sebuah program. Objek besar dapat dibentuk dengan
menggabungkan beberapa objek-objek dalam bahasa pemrograman. Objek-objek
tersebut berkomunikasi dengan saling mengirim pesan kepada objek lain.
Konsep-konsep pemrograman berorientasi objek dalam Java secara umum
sama dengan yang digunakan oleh bahasa-bahasa lain. Jadi kebanyakan
konsep yang kita bahas juga terdapat dalam bahasa selain Java. Namun,
terkadang terdapat perbedaan-perbedaan kecil antara penerapan
konsep-konsep tersebut dalam masing-masing bahasa. Perbedaan-perbedaan
ini juga akan dijelaskan seiring penjelasan masing-masing konsep.
Objek
Dalam penjelasan mengenai analogi, kita sudah menyinggung mengenai
objek. Sekarang kita akan mengupas lebih dalam tentang objek sebagai
konsep kunci dari pemrograman berorientasi objek.
Baik dalam dunia nyata atau dalam sebuah program, sebuah objek
memiliki dua karakteristik, yaitu state dan behaviour. State adalah
keadaan dari sebuah objek, seperti mobil memiliki state warna, model,
tahun pembuatan, kondisi, dll. Sedang behaviour adalah kelakuan dari
objek tersebut, seperti mobil dapat melaju, membelok, membunyikan
klakson, dll. Objek menyimpan statenya dalam satu atau lebih variabel,
dan mengimplementasikan behaviournya dengan metode. Dengan penjelasan di
atas, dapat disimpulkan bahwa objek adalah bagian software yang
dibentuk dengan variabel-variabel dan metode-metode yang berhubungan
dengan variabel tersebut.
Dengan karakteristik tersebut, kita dapat memodelkan berbagai objek
dalam kehidupan nyata ke dalam objek-objek dalam sebuah program. Lebih
lanjut kita dapat memodelkan objek-objek abstrak ke dalam sebuah
program. Contoh umum untuk konsep abstrak seperti ini adalah objek
Event, yaitu objek untuk mewakili peristiwa klik atau tombol ditekan.
Sebuah objek yang dibentuk dari sebuah kelas biasa disebut instans
dalam terminologi OOP. Artinya objek tersebut adalah wujud nyata dari
sebuah kelas. Variabel dan metode dari instans ini disebut variabel
instans dan metode instans. Setiap instans menyimpan variabelnya
sendiri-sendiri, jadi nilai variabel untuk tiap instans bisa berbeda.
Kelas
Kelas adalah semacam cetakan, atau template, untuk membuat objek.
Ibaratkan sebuah rancangan rumah yang digunakan untuk membangun ratusan
rumah. Rumah yang dibangun tersebut adalah objek dari kelas rancangan
rumah. Hal ini dapat dilakukan karena semua objek rumah yang dibangun
memiliki karakteristik yang sama, sehingga dapat dibuatkan semacam
blueprintnya. Tetapi objek-objek yang dibangun tetap akan memiliki
bentuk fisik tertentu sendiri-sendiri, seperti variabel dalam sebuah
program, atau pintu sebuah objek rumah. Dengan penjelasan ini, kelas
dapat kita definisikan kembali menjadi sebuah blueprint, atau prototipe,
yang mendefinisikan variabel dan metode yang sama untuk semua objek
sejenis.
Sebagai contoh, misalkan kita ingin membuat kelas Rumah, maka kita
harus membuat sebuah kelas yang mendefinisikan semua variabel yang
dimiliki objek dari kelas tersebut. Selain itu, kelas tersebut juga
harus mendeklarasikan metode-metode yang dimiliki objek dari kelas dan
juga membuat implementasi dari metode tersebut. Dengan adanya kelas ini,
kita dapat membuat sebanyak apapun objek-objek rumah yang sejenis,
yaitu jenis yang didefinisikan oleh kelas Rumah. Setiap objek Rumah
diciptakan, sistem akan mengalokasikan sejumlah memori untuk objek
tersebut dan variabel-variabelnya. Dengan begitu setiap objek akan
memiliki salinan masing-masing untuk setiap variabel instans.
Setelah mengenal konsep kelas, saatnya Anda dikenalkan dengan
variabel kelas. Variabel kelas sebenarnya sama dengan variabel instans.
Bedanya adalah, setiap objek berbagi satu dan hanya satu variabel kelas,
tapi masing-masing memiliki salinan dari variabel instans. Misalkan
kelas Rumah yang kita buat hanya akan mendukung 2 lantai, dan setiap
objek Rumah terdiri atas 2 lantai. Maka informasi ini cukup disimpan
satu kali, karena nilainya tidak berbeda untuk semua objek. Lebih jauh,
bila ada satu objek yang mengubah nilai dari variabel kelas, maka semua
objek sejenis lainnya akan mengikuti perubahan itu. Di samping variabel,
terdapat juga metode kelas. Metode jenis ini dapat langsung dipanggil
melalui kelas dan bukan dari instans kelas tersebut.
Message (Pesan)
Objek-objek yang bekerja sama membentuk suatu sistem harus saling
berkomunikasi untuk menjalankan sistem tersebut. Dalam sebuah program,
objek-objek berkomunikasi satu sama lain dengan mengirimkan pesan.
Sebagai contoh, jika sebuah objek ingin memanggil metode dari objek
lain, maka objek ini akan mengirimkan sebuah pesan yang meminta objek
tujuan untuk menjalankan metode yang dikehendaki. Pesan ini akan berisi
informasi-informasi yang dibutuhkan objek tujuan untuk dapat menunaikan
permintaan tadi.
Sebuah pesan dibentuk oleh informasi berikut ini:
1) objek yang
dituju;
2) nama metode yang ingin dipanggil;
3) parameter yang
dibutuhkan metode tersebut.
Misalnya:
anotherObject.aMethod(parameter1);
Bila sebuah objek ingin memanggil metode miliknya sendiri, maka
informasi pertama adalah dirinya sendiri. Untuk menunjuk diri sendiri
dalam Java digunakan kata kunci this. Maka contoh sebelumnya akan
menjadi:
this.aMethod(parameter1);
Atau kita dapat menghilangkan informasi pertama sehingga menjadi:
aMethod(parameter1);
karena bila informasi pertama tidak ada, kompiler akan secara otomatis menunjuk ke objek itu sendiri.
Ada dua keuntungan dalam penggunaan pesan, yaitu:
1) semua kebutuhan
interaksi antarobjek dapat dilakukan;
2) objek-objek yang saling
berinteraksi tidak harus berada dalam satu proses atau bahkan dalam satu
komputer.
Pewarisan
Terminologi asing untuk pewarisan adalah inheritance. Mungkin dalam
literatur lain Anda akan sering menjumpai istilah ini. Secara gamblang,
pewarisan berarti sebuah kelas mewarisi state dan behaviour dari kelas
lain. Sebagai contoh, sebuah kelas RumahMewah akan mewarisi state dan
behaviour dari kelas Rumah. Begitu juga dengan kelas RumahSederhana.
Kelas RumahMewah dan RumahSederhana disebut subkelas, atau kelas anak,
dari kelas Rumah, yang disebut superkelas, atau kelas induk.
Seluruh subkelas akan mewarisi (inherits) state dan behaviour dari
superkelasnya. Dengan begitu, semua subkelas dari superkelas yang sama
akan memiliki state dan behaviour yang sama. Namun, masing-masing
subkelas bisa menambah sendiri state atau behaviournya. Misalkan, pada
kelas Rumah tidak terdapat variable kolamRenang, namun subkelas
RumahMewah memiliki variabel tersebut. Contoh lain misalnya kelas Rumah
tidak memiliki metode nyalakanAlarm, namun rumah mewah memiliki metode
itu.
Dalam kasus tertentu subkelas mungkin memiliki implementasi behaviour
yang berbeda dengan superkelasnya. Hal seperti ini disebut override.
Contohnya subkelas SepedaBalap memiliki implementasi metode ubahGigi
yang berbeda dengan implementasi metode tersebut pada superkelas Sepeda.
Tingkat pewarisan tidak hanya terbatas pada dua tingkatan. Dari
contoh di atas, kita bisa saja membuat subkelas dari kelas SepedaBalap,
dan seterusnya. Kita bisa terus memperpanjang tingkat pewarisan ini
sepanjang yang kita butuhkan. Dengan begitu, subkelas-subkelas yang
dibuat akan lebih khusus dan lebih terspesialisasi. Namun terdapat
batasan pewarisan dalam Java yang disebut single inheritance. Artinya
sebuah kelas hanya dapat mewarisi sifat dari satu dan hanya satu
superkelas saja. Dalam beberapa bahasa pemrograman berorientasi objek
lain, yang berlaku adalah multiple inheritance. Artinya sebuah kelas
dapat mewarisi sifat dari beberapa superkelas sekaligus.
Dalam Java, terdapat kelas Object yang merupakan superkelas dari
semua kelas dalam Java, baik yang builtin ataupun yang kita buat
sendiri, lansung maupun tidak langsung. Karena itu sebuah variabel
bertipe Object akan dapat menyimpan referensi ke objek apapun dalam
bahasa Java. Kelas Object ini memiliki behaviour yang dibutuhkan semua
objek untuk dapat dijalankan di Java Virtual Machine. Sebagai contoh,
semua kelas mewarisi metode toString dari kelas Object, yang
mengembalikan representasi String dari objek tersebut.
Manfaat penggunaan konsep pewarisan antara lain: pertama, kita dapat
menggunakan kembali kelas-kelas yang kita buat (sebagai superkelas) dan
membuat kelas-kelas baru berdasar superkelas tersebut dengan
karakteristik yang lebih khusus dari behaviour umum yang dimiliki
superkelas. Kedua, kita dapat membuat superkelas yang hanya
mendefinisikan behaviour namun tidak memberi implementasi dari
metode-metode yang ada. Hal ini berguna jika kita ingin membuat semacam
template kelas. Kelas semacam ini disebut kelas abstrak, karena
behaviournya masih abstrak dan belum diimplementasikan.
Subkelas-subkelas dari kelas semacam ini, yang disebut kelas konkret,
mengimplementasikan behaviour abstrak tersebut sesuai dengan kebutuhan
masing-masing.
Tidak ada komentar:
Posting Komentar